Merge branch 'for-linus' of git://git.kernel.dk/linux-block

Pull block layer fixes from Jens Axboe:
"Remember about a week ago when I sent the last pull request for 4.1?
Well, I lied. Now, I don't want to shift the blame, but Dan, Ming,
and Richard made a liar out of me.

Here are three small patches that should go into 4.1. More
specifically, this pull request contains:

- A Kconfig dependency for the pmem block driver, so it can't be
selected if HAS_IOMEM isn't availble. From Richard Weinberger.

- A fix for genhd, making the ext_devt_lock softirq safe. This makes
lockdep happier, since we also end up grabbing this lock on release
off the softirq path. From Dan Williams.

- A blk-mq software queue release fix from Ming Lei.

Last two are headed to stable, first fixes an issue introduced in this
cycle"

* 'for-linus' of git://git.kernel.dk/linux-block:
block: pmem: Add dependency on HAS_IOMEM
block: fix ext_dev_lock lockdep report
blk-mq: free hctx->ctxs in queue's release handler

+13 -8
+6 -2
block/blk-mq.c
··· 1600 return NOTIFY_OK; 1601 } 1602 1603 static void blk_mq_exit_hctx(struct request_queue *q, 1604 struct blk_mq_tag_set *set, 1605 struct blk_mq_hw_ctx *hctx, unsigned int hctx_idx) ··· 1619 1620 blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); 1621 blk_free_flush_queue(hctx->fq); 1622 - kfree(hctx->ctxs); 1623 blk_mq_free_bitmap(&hctx->ctx_map); 1624 } 1625 ··· 1891 unsigned int i; 1892 1893 /* hctx kobj stays in hctx */ 1894 - queue_for_each_hw_ctx(q, hctx, i) 1895 kfree(hctx); 1896 1897 kfree(q->queue_hw_ctx); 1898
··· 1600 return NOTIFY_OK; 1601 } 1602 1603 + /* hctx->ctxs will be freed in queue's release handler */ 1604 static void blk_mq_exit_hctx(struct request_queue *q, 1605 struct blk_mq_tag_set *set, 1606 struct blk_mq_hw_ctx *hctx, unsigned int hctx_idx) ··· 1618 1619 blk_mq_unregister_cpu_notifier(&hctx->cpu_notifier); 1620 blk_free_flush_queue(hctx->fq); 1621 blk_mq_free_bitmap(&hctx->ctx_map); 1622 } 1623 ··· 1891 unsigned int i; 1892 1893 /* hctx kobj stays in hctx */ 1894 + queue_for_each_hw_ctx(q, hctx, i) { 1895 + if (!hctx) 1896 + continue; 1897 + kfree(hctx->ctxs); 1898 kfree(hctx); 1899 + } 1900 1901 kfree(q->queue_hw_ctx); 1902
+6 -6
block/genhd.c
··· 422 /* allocate ext devt */ 423 idr_preload(GFP_KERNEL); 424 425 - spin_lock(&ext_devt_lock); 426 idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); 427 - spin_unlock(&ext_devt_lock); 428 429 idr_preload_end(); 430 if (idx < 0) ··· 449 return; 450 451 if (MAJOR(devt) == BLOCK_EXT_MAJOR) { 452 - spin_lock(&ext_devt_lock); 453 idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); 454 - spin_unlock(&ext_devt_lock); 455 } 456 } 457 ··· 690 } else { 691 struct hd_struct *part; 692 693 - spin_lock(&ext_devt_lock); 694 part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); 695 if (part && get_disk(part_to_disk(part))) { 696 *partno = part->partno; 697 disk = part_to_disk(part); 698 } 699 - spin_unlock(&ext_devt_lock); 700 } 701 702 return disk;
··· 422 /* allocate ext devt */ 423 idr_preload(GFP_KERNEL); 424 425 + spin_lock_bh(&ext_devt_lock); 426 idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); 427 + spin_unlock_bh(&ext_devt_lock); 428 429 idr_preload_end(); 430 if (idx < 0) ··· 449 return; 450 451 if (MAJOR(devt) == BLOCK_EXT_MAJOR) { 452 + spin_lock_bh(&ext_devt_lock); 453 idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); 454 + spin_unlock_bh(&ext_devt_lock); 455 } 456 } 457 ··· 690 } else { 691 struct hd_struct *part; 692 693 + spin_lock_bh(&ext_devt_lock); 694 part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); 695 if (part && get_disk(part_to_disk(part))) { 696 *partno = part->partno; 697 disk = part_to_disk(part); 698 } 699 + spin_unlock_bh(&ext_devt_lock); 700 } 701 702 return disk;
+1
drivers/block/Kconfig
··· 406 407 config BLK_DEV_PMEM 408 tristate "Persistent memory block device support" 409 help 410 Saying Y here will allow you to use a contiguous range of reserved 411 memory as one or more persistent block devices.
··· 406 407 config BLK_DEV_PMEM 408 tristate "Persistent memory block device support" 409 + depends on HAS_IOMEM 410 help 411 Saying Y here will allow you to use a contiguous range of reserved 412 memory as one or more persistent block devices.