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