summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/bio.c3
-rw-r--r--block/blk-core.c8
-rw-r--r--block/blk-mq-debugfs.c2
-rw-r--r--block/blk-mq.c1
-rw-r--r--block/blk-softirq.c1
-rw-r--r--block/blk-timeout.c1
-rw-r--r--block/sed-opal.c4
-rw-r--r--drivers/block/nbd.c42
-rw-r--r--drivers/block/null_blk.c2
-rw-r--r--drivers/lightnvm/Kconfig2
-rw-r--r--drivers/nvme/host/core.c1
-rw-r--r--drivers/nvme/host/fc.c6
-rw-r--r--drivers/nvme/host/nvme.h1
-rw-r--r--drivers/nvme/host/pci.c44
-rw-r--r--drivers/nvme/host/rdma.c73
-rw-r--r--drivers/nvme/target/core.c8
-rw-r--r--drivers/scsi/scsi_transport_fc.c2
-rw-r--r--include/linux/backing-dev-defs.h2
-rw-r--r--include/uapi/linux/nbd.h3
-rw-r--r--mm/backing-dev.c20
20 files changed, 142 insertions, 84 deletions
diff --git a/block/bio.c b/block/bio.c
index 9710e275f230..67eff5eddc49 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1807,9 +1807,6 @@ again:
1807 if (!bio_integrity_endio(bio)) 1807 if (!bio_integrity_endio(bio))
1808 return; 1808 return;
1809 1809
1810 if (WARN_ONCE(bio->bi_next, "driver left bi_next not NULL"))
1811 bio->bi_next = NULL;
1812
1813 /* 1810 /*
1814 * Need to have a real endio function for chained bios, otherwise 1811 * Need to have a real endio function for chained bios, otherwise
1815 * various corner cases will break (like stacking block devices that 1812 * various corner cases will break (like stacking block devices that
diff --git a/block/blk-core.c b/block/blk-core.c
index cf0ee764b908..afd2596ea3d3 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -273,10 +273,6 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
273 bio_advance(bio, nbytes); 273 bio_advance(bio, nbytes);
274 274
275 /* don't actually finish bio if it's part of flush sequence */ 275 /* don't actually finish bio if it's part of flush sequence */
276 /*
277 * XXX this code looks suspicious - it's not consistent with advancing
278 * req->bio in caller
279 */
280 if (bio->bi_iter.bi_size == 0 && !(rq->rq_flags & RQF_FLUSH_SEQ)) 276 if (bio->bi_iter.bi_size == 0 && !(rq->rq_flags & RQF_FLUSH_SEQ))
281 bio_endio(bio); 277 bio_endio(bio);
282} 278}
@@ -3081,10 +3077,8 @@ bool blk_update_request(struct request *req, blk_status_t error,
3081 struct bio *bio = req->bio; 3077 struct bio *bio = req->bio;
3082 unsigned bio_bytes = min(bio->bi_iter.bi_size, nr_bytes); 3078 unsigned bio_bytes = min(bio->bi_iter.bi_size, nr_bytes);
3083 3079
3084 if (bio_bytes == bio->bi_iter.bi_size) { 3080 if (bio_bytes == bio->bi_iter.bi_size)
3085 req->bio = bio->bi_next; 3081 req->bio = bio->bi_next;
3086 bio->bi_next = NULL;
3087 }
3088 3082
3089 /* Completion has already been traced */ 3083 /* Completion has already been traced */
3090 bio_clear_flag(bio, BIO_TRACE_COMPLETION); 3084 bio_clear_flag(bio, BIO_TRACE_COMPLETION);
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index ffa622366922..1c4532e92938 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -356,7 +356,7 @@ static const char *const blk_mq_rq_state_name_array[] = {
356 356
357static const char *blk_mq_rq_state_name(enum mq_rq_state rq_state) 357static const char *blk_mq_rq_state_name(enum mq_rq_state rq_state)
358{ 358{
359 if (WARN_ON_ONCE((unsigned int)rq_state > 359 if (WARN_ON_ONCE((unsigned int)rq_state >=
360 ARRAY_SIZE(blk_mq_rq_state_name_array))) 360 ARRAY_SIZE(blk_mq_rq_state_name_array)))
361 return "(?)"; 361 return "(?)";
362 return blk_mq_rq_state_name_array[rq_state]; 362 return blk_mq_rq_state_name_array[rq_state];
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 70c65bb6c013..b429d515b568 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -781,7 +781,6 @@ static void blk_mq_rq_timed_out(struct request *req, bool reserved)
781 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER); 781 WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER);
782 } 782 }
783 783
784 req->rq_flags &= ~RQF_TIMED_OUT;
785 blk_add_timer(req); 784 blk_add_timer(req);
786} 785}
787 786
diff --git a/block/blk-softirq.c b/block/blk-softirq.c
index 01e2b353a2b9..15c1f5e12eb8 100644
--- a/block/blk-softirq.c
+++ b/block/blk-softirq.c
@@ -144,6 +144,7 @@ do_local:
144 144
145 local_irq_restore(flags); 145 local_irq_restore(flags);
146} 146}
147EXPORT_SYMBOL(__blk_complete_request);
147 148
148/** 149/**
149 * blk_complete_request - end I/O on a request 150 * blk_complete_request - end I/O on a request
diff --git a/block/blk-timeout.c b/block/blk-timeout.c
index 4b8a48d48ba1..f2cfd56e1606 100644
--- a/block/blk-timeout.c
+++ b/block/blk-timeout.c
@@ -210,6 +210,7 @@ void blk_add_timer(struct request *req)
210 if (!req->timeout) 210 if (!req->timeout)
211 req->timeout = q->rq_timeout; 211 req->timeout = q->rq_timeout;
212 212
213 req->rq_flags &= ~RQF_TIMED_OUT;
213 blk_rq_set_deadline(req, jiffies + req->timeout); 214 blk_rq_set_deadline(req, jiffies + req->timeout);
214 215
215 /* 216 /*
diff --git a/block/sed-opal.c b/block/sed-opal.c
index 945f4b8610e0..e0de4dd448b3 100644
--- a/block/sed-opal.c
+++ b/block/sed-opal.c
@@ -877,7 +877,7 @@ static size_t response_get_string(const struct parsed_resp *resp, int n,
877 return 0; 877 return 0;
878 } 878 }
879 879
880 if (n > resp->num) { 880 if (n >= resp->num) {
881 pr_debug("Response has %d tokens. Can't access %d\n", 881 pr_debug("Response has %d tokens. Can't access %d\n",
882 resp->num, n); 882 resp->num, n);
883 return 0; 883 return 0;
@@ -916,7 +916,7 @@ static u64 response_get_u64(const struct parsed_resp *resp, int n)
916 return 0; 916 return 0;
917 } 917 }
918 918
919 if (n > resp->num) { 919 if (n >= resp->num) {
920 pr_debug("Response has %d tokens. Can't access %d\n", 920 pr_debug("Response has %d tokens. Can't access %d\n",
921 resp->num, n); 921 resp->num, n);
922 return 0; 922 return 0;
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 3b7083b8ecbb..74a05561b620 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -76,6 +76,7 @@ struct link_dead_args {
76#define NBD_HAS_CONFIG_REF 4 76#define NBD_HAS_CONFIG_REF 4
77#define NBD_BOUND 5 77#define NBD_BOUND 5
78#define NBD_DESTROY_ON_DISCONNECT 6 78#define NBD_DESTROY_ON_DISCONNECT 6
79#define NBD_DISCONNECT_ON_CLOSE 7
79 80
80struct nbd_config { 81struct nbd_config {
81 u32 flags; 82 u32 flags;
@@ -138,6 +139,7 @@ static void nbd_config_put(struct nbd_device *nbd);
138static void nbd_connect_reply(struct genl_info *info, int index); 139static void nbd_connect_reply(struct genl_info *info, int index);
139static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info); 140static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info);
140static void nbd_dead_link_work(struct work_struct *work); 141static void nbd_dead_link_work(struct work_struct *work);
142static void nbd_disconnect_and_put(struct nbd_device *nbd);
141 143
142static inline struct device *nbd_to_dev(struct nbd_device *nbd) 144static inline struct device *nbd_to_dev(struct nbd_device *nbd)
143{ 145{
@@ -1305,6 +1307,12 @@ out:
1305static void nbd_release(struct gendisk *disk, fmode_t mode) 1307static void nbd_release(struct gendisk *disk, fmode_t mode)
1306{ 1308{
1307 struct nbd_device *nbd = disk->private_data; 1309 struct nbd_device *nbd = disk->private_data;
1310 struct block_device *bdev = bdget_disk(disk, 0);
1311
1312 if (test_bit(NBD_DISCONNECT_ON_CLOSE, &nbd->config->runtime_flags) &&
1313 bdev->bd_openers == 0)
1314 nbd_disconnect_and_put(nbd);
1315
1308 nbd_config_put(nbd); 1316 nbd_config_put(nbd);
1309 nbd_put(nbd); 1317 nbd_put(nbd);
1310} 1318}
@@ -1705,6 +1713,10 @@ again:
1705 &config->runtime_flags); 1713 &config->runtime_flags);
1706 put_dev = true; 1714 put_dev = true;
1707 } 1715 }
1716 if (flags & NBD_CFLAG_DISCONNECT_ON_CLOSE) {
1717 set_bit(NBD_DISCONNECT_ON_CLOSE,
1718 &config->runtime_flags);
1719 }
1708 } 1720 }
1709 1721
1710 if (info->attrs[NBD_ATTR_SOCKETS]) { 1722 if (info->attrs[NBD_ATTR_SOCKETS]) {
@@ -1749,6 +1761,17 @@ out:
1749 return ret; 1761 return ret;
1750} 1762}
1751 1763
1764static void nbd_disconnect_and_put(struct nbd_device *nbd)
1765{
1766 mutex_lock(&nbd->config_lock);
1767 nbd_disconnect(nbd);
1768 nbd_clear_sock(nbd);
1769 mutex_unlock(&nbd->config_lock);
1770 if (test_and_clear_bit(NBD_HAS_CONFIG_REF,
1771 &nbd->config->runtime_flags))
1772 nbd_config_put(nbd);
1773}
1774
1752static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info) 1775static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info)
1753{ 1776{
1754 struct nbd_device *nbd; 1777 struct nbd_device *nbd;
@@ -1781,13 +1804,7 @@ static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info)
1781 nbd_put(nbd); 1804 nbd_put(nbd);
1782 return 0; 1805 return 0;
1783 } 1806 }
1784 mutex_lock(&nbd->config_lock); 1807 nbd_disconnect_and_put(nbd);
1785 nbd_disconnect(nbd);
1786 nbd_clear_sock(nbd);
1787 mutex_unlock(&nbd->config_lock);
1788 if (test_and_clear_bit(NBD_HAS_CONFIG_REF,
1789 &nbd->config->runtime_flags))
1790 nbd_config_put(nbd);
1791 nbd_config_put(nbd); 1808 nbd_config_put(nbd);
1792 nbd_put(nbd); 1809 nbd_put(nbd);
1793 return 0; 1810 return 0;
@@ -1798,7 +1815,7 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1798 struct nbd_device *nbd = NULL; 1815 struct nbd_device *nbd = NULL;
1799 struct nbd_config *config; 1816 struct nbd_config *config;
1800 int index; 1817 int index;
1801 int ret = -EINVAL; 1818 int ret = 0;
1802 bool put_dev = false; 1819 bool put_dev = false;
1803 1820
1804 if (!netlink_capable(skb, CAP_SYS_ADMIN)) 1821 if (!netlink_capable(skb, CAP_SYS_ADMIN))
@@ -1838,6 +1855,7 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1838 !nbd->task_recv) { 1855 !nbd->task_recv) {
1839 dev_err(nbd_to_dev(nbd), 1856 dev_err(nbd_to_dev(nbd),
1840 "not configured, cannot reconfigure\n"); 1857 "not configured, cannot reconfigure\n");
1858 ret = -EINVAL;
1841 goto out; 1859 goto out;
1842 } 1860 }
1843 1861
@@ -1862,6 +1880,14 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)
1862 &config->runtime_flags)) 1880 &config->runtime_flags))
1863 refcount_inc(&nbd->refs); 1881 refcount_inc(&nbd->refs);
1864 } 1882 }
1883
1884 if (flags & NBD_CFLAG_DISCONNECT_ON_CLOSE) {
1885 set_bit(NBD_DISCONNECT_ON_CLOSE,
1886 &config->runtime_flags);
1887 } else {
1888 clear_bit(NBD_DISCONNECT_ON_CLOSE,
1889 &config->runtime_flags);
1890 }
1865 } 1891 }
1866 1892
1867 if (info->attrs[NBD_ATTR_SOCKETS]) { 1893 if (info->attrs[NBD_ATTR_SOCKETS]) {
diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c
index 7948049f6c43..042c778e5a4e 100644
--- a/drivers/block/null_blk.c
+++ b/drivers/block/null_blk.c
@@ -1365,7 +1365,7 @@ static blk_qc_t null_queue_bio(struct request_queue *q, struct bio *bio)
1365static enum blk_eh_timer_return null_rq_timed_out_fn(struct request *rq) 1365static enum blk_eh_timer_return null_rq_timed_out_fn(struct request *rq)
1366{ 1366{
1367 pr_info("null: rq %p timed out\n", rq); 1367 pr_info("null: rq %p timed out\n", rq);
1368 blk_mq_complete_request(rq); 1368 __blk_complete_request(rq);
1369 return BLK_EH_DONE; 1369 return BLK_EH_DONE;
1370} 1370}
1371 1371
diff --git a/drivers/lightnvm/Kconfig b/drivers/lightnvm/Kconfig
index 10c08982185a..9c03f35d9df1 100644
--- a/drivers/lightnvm/Kconfig
+++ b/drivers/lightnvm/Kconfig
@@ -4,7 +4,7 @@
4 4
5menuconfig NVM 5menuconfig NVM
6 bool "Open-Channel SSD target support" 6 bool "Open-Channel SSD target support"
7 depends on BLOCK && HAS_DMA && PCI 7 depends on BLOCK && PCI
8 select BLK_DEV_NVME 8 select BLK_DEV_NVME
9 help 9 help
10 Say Y here to get to enable Open-channel SSDs. 10 Say Y here to get to enable Open-channel SSDs.
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 21710a7460c8..46df030b2c3f 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1808,6 +1808,7 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
1808 u32 max_segments = 1808 u32 max_segments =
1809 (ctrl->max_hw_sectors / (ctrl->page_size >> 9)) + 1; 1809 (ctrl->max_hw_sectors / (ctrl->page_size >> 9)) + 1;
1810 1810
1811 max_segments = min_not_zero(max_segments, ctrl->max_segments);
1811 blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors); 1812 blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors);
1812 blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX)); 1813 blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX));
1813 } 1814 }
diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
index b528a2f5826c..41d45a1b5c62 100644
--- a/drivers/nvme/host/fc.c
+++ b/drivers/nvme/host/fc.c
@@ -2790,6 +2790,9 @@ nvme_fc_delete_association(struct nvme_fc_ctrl *ctrl)
2790 /* re-enable the admin_q so anything new can fast fail */ 2790 /* re-enable the admin_q so anything new can fast fail */
2791 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q); 2791 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q);
2792 2792
2793 /* resume the io queues so that things will fast fail */
2794 nvme_start_queues(&ctrl->ctrl);
2795
2793 nvme_fc_ctlr_inactive_on_rport(ctrl); 2796 nvme_fc_ctlr_inactive_on_rport(ctrl);
2794} 2797}
2795 2798
@@ -2804,9 +2807,6 @@ nvme_fc_delete_ctrl(struct nvme_ctrl *nctrl)
2804 * waiting for io to terminate 2807 * waiting for io to terminate
2805 */ 2808 */
2806 nvme_fc_delete_association(ctrl); 2809 nvme_fc_delete_association(ctrl);
2807
2808 /* resume the io queues so that things will fast fail */
2809 nvme_start_queues(nctrl);
2810} 2810}
2811 2811
2812static void 2812static void
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 231807cbc849..0c4a33df3b2f 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -170,6 +170,7 @@ struct nvme_ctrl {
170 u64 cap; 170 u64 cap;
171 u32 page_size; 171 u32 page_size;
172 u32 max_hw_sectors; 172 u32 max_hw_sectors;
173 u32 max_segments;
173 u16 oncs; 174 u16 oncs;
174 u16 oacs; 175 u16 oacs;
175 u16 nssa; 176 u16 nssa;
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index fc33804662e7..ba943f211687 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -38,6 +38,13 @@
38 38
39#define SGES_PER_PAGE (PAGE_SIZE / sizeof(struct nvme_sgl_desc)) 39#define SGES_PER_PAGE (PAGE_SIZE / sizeof(struct nvme_sgl_desc))
40 40
41/*
42 * These can be higher, but we need to ensure that any command doesn't
43 * require an sg allocation that needs more than a page of data.
44 */
45#define NVME_MAX_KB_SZ 4096
46#define NVME_MAX_SEGS 127
47
41static int use_threaded_interrupts; 48static int use_threaded_interrupts;
42module_param(use_threaded_interrupts, int, 0); 49module_param(use_threaded_interrupts, int, 0);
43 50
@@ -100,6 +107,8 @@ struct nvme_dev {
100 struct nvme_ctrl ctrl; 107 struct nvme_ctrl ctrl;
101 struct completion ioq_wait; 108 struct completion ioq_wait;
102 109
110 mempool_t *iod_mempool;
111
103 /* shadow doorbell buffer support: */ 112 /* shadow doorbell buffer support: */
104 u32 *dbbuf_dbs; 113 u32 *dbbuf_dbs;
105 dma_addr_t dbbuf_dbs_dma_addr; 114 dma_addr_t dbbuf_dbs_dma_addr;
@@ -477,10 +486,7 @@ static blk_status_t nvme_init_iod(struct request *rq, struct nvme_dev *dev)
477 iod->use_sgl = nvme_pci_use_sgls(dev, rq); 486 iod->use_sgl = nvme_pci_use_sgls(dev, rq);
478 487
479 if (nseg > NVME_INT_PAGES || size > NVME_INT_BYTES(dev)) { 488 if (nseg > NVME_INT_PAGES || size > NVME_INT_BYTES(dev)) {
480 size_t alloc_size = nvme_pci_iod_alloc_size(dev, size, nseg, 489 iod->sg = mempool_alloc(dev->iod_mempool, GFP_ATOMIC);
481 iod->use_sgl);
482
483 iod->sg = kmalloc(alloc_size, GFP_ATOMIC);
484 if (!iod->sg) 490 if (!iod->sg)
485 return BLK_STS_RESOURCE; 491 return BLK_STS_RESOURCE;
486 } else { 492 } else {
@@ -526,7 +532,7 @@ static void nvme_free_iod(struct nvme_dev *dev, struct request *req)
526 } 532 }
527 533
528 if (iod->sg != iod->inline_sg) 534 if (iod->sg != iod->inline_sg)
529 kfree(iod->sg); 535 mempool_free(iod->sg, dev->iod_mempool);
530} 536}
531 537
532#ifdef CONFIG_BLK_DEV_INTEGRITY 538#ifdef CONFIG_BLK_DEV_INTEGRITY
@@ -2280,6 +2286,7 @@ static void nvme_pci_free_ctrl(struct nvme_ctrl *ctrl)
2280 blk_put_queue(dev->ctrl.admin_q); 2286 blk_put_queue(dev->ctrl.admin_q);
2281 kfree(dev->queues); 2287 kfree(dev->queues);
2282 free_opal_dev(dev->ctrl.opal_dev); 2288 free_opal_dev(dev->ctrl.opal_dev);
2289 mempool_destroy(dev->iod_mempool);
2283 kfree(dev); 2290 kfree(dev);
2284} 2291}
2285 2292
@@ -2289,6 +2296,7 @@ static void nvme_remove_dead_ctrl(struct nvme_dev *dev, int status)
2289 2296
2290 nvme_get_ctrl(&dev->ctrl); 2297 nvme_get_ctrl(&dev->ctrl);
2291 nvme_dev_disable(dev, false); 2298 nvme_dev_disable(dev, false);
2299 nvme_kill_queues(&dev->ctrl);
2292 if (!queue_work(nvme_wq, &dev->remove_work)) 2300 if (!queue_work(nvme_wq, &dev->remove_work))
2293 nvme_put_ctrl(&dev->ctrl); 2301 nvme_put_ctrl(&dev->ctrl);
2294} 2302}
@@ -2333,6 +2341,13 @@ static void nvme_reset_work(struct work_struct *work)
2333 if (result) 2341 if (result)
2334 goto out; 2342 goto out;
2335 2343
2344 /*
2345 * Limit the max command size to prevent iod->sg allocations going
2346 * over a single page.
2347 */
2348 dev->ctrl.max_hw_sectors = NVME_MAX_KB_SZ << 1;
2349 dev->ctrl.max_segments = NVME_MAX_SEGS;
2350
2336 result = nvme_init_identify(&dev->ctrl); 2351 result = nvme_init_identify(&dev->ctrl);
2337 if (result) 2352 if (result)
2338 goto out; 2353 goto out;
@@ -2405,7 +2420,6 @@ static void nvme_remove_dead_ctrl_work(struct work_struct *work)
2405 struct nvme_dev *dev = container_of(work, struct nvme_dev, remove_work); 2420 struct nvme_dev *dev = container_of(work, struct nvme_dev, remove_work);
2406 struct pci_dev *pdev = to_pci_dev(dev->dev); 2421 struct pci_dev *pdev = to_pci_dev(dev->dev);
2407 2422
2408 nvme_kill_queues(&dev->ctrl);
2409 if (pci_get_drvdata(pdev)) 2423 if (pci_get_drvdata(pdev))
2410 device_release_driver(&pdev->dev); 2424 device_release_driver(&pdev->dev);
2411 nvme_put_ctrl(&dev->ctrl); 2425 nvme_put_ctrl(&dev->ctrl);
@@ -2509,6 +2523,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2509 int node, result = -ENOMEM; 2523 int node, result = -ENOMEM;
2510 struct nvme_dev *dev; 2524 struct nvme_dev *dev;
2511 unsigned long quirks = id->driver_data; 2525 unsigned long quirks = id->driver_data;
2526 size_t alloc_size;
2512 2527
2513 node = dev_to_node(&pdev->dev); 2528 node = dev_to_node(&pdev->dev);
2514 if (node == NUMA_NO_NODE) 2529 if (node == NUMA_NO_NODE)
@@ -2546,6 +2561,23 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2546 if (result) 2561 if (result)
2547 goto release_pools; 2562 goto release_pools;
2548 2563
2564 /*
2565 * Double check that our mempool alloc size will cover the biggest
2566 * command we support.
2567 */
2568 alloc_size = nvme_pci_iod_alloc_size(dev, NVME_MAX_KB_SZ,
2569 NVME_MAX_SEGS, true);
2570 WARN_ON_ONCE(alloc_size > PAGE_SIZE);
2571
2572 dev->iod_mempool = mempool_create_node(1, mempool_kmalloc,
2573 mempool_kfree,
2574 (void *) alloc_size,
2575 GFP_KERNEL, node);
2576 if (!dev->iod_mempool) {
2577 result = -ENOMEM;
2578 goto release_pools;
2579 }
2580
2549 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev)); 2581 dev_info(dev->ctrl.device, "pci function %s\n", dev_name(&pdev->dev));
2550 2582
2551 nvme_get_ctrl(&dev->ctrl); 2583 nvme_get_ctrl(&dev->ctrl);
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index c9424da0d23e..9544625c0b7d 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -560,12 +560,6 @@ static void nvme_rdma_free_queue(struct nvme_rdma_queue *queue)
560 if (!test_and_clear_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags)) 560 if (!test_and_clear_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags))
561 return; 561 return;
562 562
563 if (nvme_rdma_queue_idx(queue) == 0) {
564 nvme_rdma_free_qe(queue->device->dev,
565 &queue->ctrl->async_event_sqe,
566 sizeof(struct nvme_command), DMA_TO_DEVICE);
567 }
568
569 nvme_rdma_destroy_queue_ib(queue); 563 nvme_rdma_destroy_queue_ib(queue);
570 rdma_destroy_id(queue->cm_id); 564 rdma_destroy_id(queue->cm_id);
571} 565}
@@ -698,7 +692,7 @@ static struct blk_mq_tag_set *nvme_rdma_alloc_tagset(struct nvme_ctrl *nctrl,
698 set = &ctrl->tag_set; 692 set = &ctrl->tag_set;
699 memset(set, 0, sizeof(*set)); 693 memset(set, 0, sizeof(*set));
700 set->ops = &nvme_rdma_mq_ops; 694 set->ops = &nvme_rdma_mq_ops;
701 set->queue_depth = nctrl->opts->queue_size; 695 set->queue_depth = nctrl->sqsize + 1;
702 set->reserved_tags = 1; /* fabric connect */ 696 set->reserved_tags = 1; /* fabric connect */
703 set->numa_node = NUMA_NO_NODE; 697 set->numa_node = NUMA_NO_NODE;
704 set->flags = BLK_MQ_F_SHOULD_MERGE; 698 set->flags = BLK_MQ_F_SHOULD_MERGE;
@@ -734,11 +728,12 @@ out:
734static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl, 728static void nvme_rdma_destroy_admin_queue(struct nvme_rdma_ctrl *ctrl,
735 bool remove) 729 bool remove)
736{ 730{
737 nvme_rdma_stop_queue(&ctrl->queues[0]);
738 if (remove) { 731 if (remove) {
739 blk_cleanup_queue(ctrl->ctrl.admin_q); 732 blk_cleanup_queue(ctrl->ctrl.admin_q);
740 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset); 733 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);
741 } 734 }
735 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
736 sizeof(struct nvme_command), DMA_TO_DEVICE);
742 nvme_rdma_free_queue(&ctrl->queues[0]); 737 nvme_rdma_free_queue(&ctrl->queues[0]);
743} 738}
744 739
@@ -755,11 +750,16 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl,
755 750
756 ctrl->max_fr_pages = nvme_rdma_get_max_fr_pages(ctrl->device->dev); 751 ctrl->max_fr_pages = nvme_rdma_get_max_fr_pages(ctrl->device->dev);
757 752
753 error = nvme_rdma_alloc_qe(ctrl->device->dev, &ctrl->async_event_sqe,
754 sizeof(struct nvme_command), DMA_TO_DEVICE);
755 if (error)
756 goto out_free_queue;
757
758 if (new) { 758 if (new) {
759 ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true); 759 ctrl->ctrl.admin_tagset = nvme_rdma_alloc_tagset(&ctrl->ctrl, true);
760 if (IS_ERR(ctrl->ctrl.admin_tagset)) { 760 if (IS_ERR(ctrl->ctrl.admin_tagset)) {
761 error = PTR_ERR(ctrl->ctrl.admin_tagset); 761 error = PTR_ERR(ctrl->ctrl.admin_tagset);
762 goto out_free_queue; 762 goto out_free_async_qe;
763 } 763 }
764 764
765 ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set); 765 ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set);
@@ -795,12 +795,6 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl,
795 if (error) 795 if (error)
796 goto out_stop_queue; 796 goto out_stop_queue;
797 797
798 error = nvme_rdma_alloc_qe(ctrl->queues[0].device->dev,
799 &ctrl->async_event_sqe, sizeof(struct nvme_command),
800 DMA_TO_DEVICE);
801 if (error)
802 goto out_stop_queue;
803
804 return 0; 798 return 0;
805 799
806out_stop_queue: 800out_stop_queue:
@@ -811,6 +805,9 @@ out_cleanup_queue:
811out_free_tagset: 805out_free_tagset:
812 if (new) 806 if (new)
813 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset); 807 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.admin_tagset);
808out_free_async_qe:
809 nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
810 sizeof(struct nvme_command), DMA_TO_DEVICE);
814out_free_queue: 811out_free_queue:
815 nvme_rdma_free_queue(&ctrl->queues[0]); 812 nvme_rdma_free_queue(&ctrl->queues[0]);
816 return error; 813 return error;
@@ -819,7 +816,6 @@ out_free_queue:
819static void nvme_rdma_destroy_io_queues(struct nvme_rdma_ctrl *ctrl, 816static void nvme_rdma_destroy_io_queues(struct nvme_rdma_ctrl *ctrl,
820 bool remove) 817 bool remove)
821{ 818{
822 nvme_rdma_stop_io_queues(ctrl);
823 if (remove) { 819 if (remove) {
824 blk_cleanup_queue(ctrl->ctrl.connect_q); 820 blk_cleanup_queue(ctrl->ctrl.connect_q);
825 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.tagset); 821 nvme_rdma_free_tagset(&ctrl->ctrl, ctrl->ctrl.tagset);
@@ -888,9 +884,9 @@ static void nvme_rdma_free_ctrl(struct nvme_ctrl *nctrl)
888 list_del(&ctrl->list); 884 list_del(&ctrl->list);
889 mutex_unlock(&nvme_rdma_ctrl_mutex); 885 mutex_unlock(&nvme_rdma_ctrl_mutex);
890 886
891 kfree(ctrl->queues);
892 nvmf_free_options(nctrl->opts); 887 nvmf_free_options(nctrl->opts);
893free_ctrl: 888free_ctrl:
889 kfree(ctrl->queues);
894 kfree(ctrl); 890 kfree(ctrl);
895} 891}
896 892
@@ -949,6 +945,7 @@ static void nvme_rdma_reconnect_ctrl_work(struct work_struct *work)
949 return; 945 return;
950 946
951destroy_admin: 947destroy_admin:
948 nvme_rdma_stop_queue(&ctrl->queues[0]);
952 nvme_rdma_destroy_admin_queue(ctrl, false); 949 nvme_rdma_destroy_admin_queue(ctrl, false);
953requeue: 950requeue:
954 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n", 951 dev_info(ctrl->ctrl.device, "Failed reconnect attempt %d\n",
@@ -965,12 +962,14 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work)
965 962
966 if (ctrl->ctrl.queue_count > 1) { 963 if (ctrl->ctrl.queue_count > 1) {
967 nvme_stop_queues(&ctrl->ctrl); 964 nvme_stop_queues(&ctrl->ctrl);
965 nvme_rdma_stop_io_queues(ctrl);
968 blk_mq_tagset_busy_iter(&ctrl->tag_set, 966 blk_mq_tagset_busy_iter(&ctrl->tag_set,
969 nvme_cancel_request, &ctrl->ctrl); 967 nvme_cancel_request, &ctrl->ctrl);
970 nvme_rdma_destroy_io_queues(ctrl, false); 968 nvme_rdma_destroy_io_queues(ctrl, false);
971 } 969 }
972 970
973 blk_mq_quiesce_queue(ctrl->ctrl.admin_q); 971 blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
972 nvme_rdma_stop_queue(&ctrl->queues[0]);
974 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set, 973 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
975 nvme_cancel_request, &ctrl->ctrl); 974 nvme_cancel_request, &ctrl->ctrl);
976 nvme_rdma_destroy_admin_queue(ctrl, false); 975 nvme_rdma_destroy_admin_queue(ctrl, false);
@@ -1736,6 +1735,7 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
1736{ 1735{
1737 if (ctrl->ctrl.queue_count > 1) { 1736 if (ctrl->ctrl.queue_count > 1) {
1738 nvme_stop_queues(&ctrl->ctrl); 1737 nvme_stop_queues(&ctrl->ctrl);
1738 nvme_rdma_stop_io_queues(ctrl);
1739 blk_mq_tagset_busy_iter(&ctrl->tag_set, 1739 blk_mq_tagset_busy_iter(&ctrl->tag_set,
1740 nvme_cancel_request, &ctrl->ctrl); 1740 nvme_cancel_request, &ctrl->ctrl);
1741 nvme_rdma_destroy_io_queues(ctrl, shutdown); 1741 nvme_rdma_destroy_io_queues(ctrl, shutdown);
@@ -1747,6 +1747,7 @@ static void nvme_rdma_shutdown_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
1747 nvme_disable_ctrl(&ctrl->ctrl, ctrl->ctrl.cap); 1747 nvme_disable_ctrl(&ctrl->ctrl, ctrl->ctrl.cap);
1748 1748
1749 blk_mq_quiesce_queue(ctrl->ctrl.admin_q); 1749 blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
1750 nvme_rdma_stop_queue(&ctrl->queues[0]);
1750 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set, 1751 blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
1751 nvme_cancel_request, &ctrl->ctrl); 1752 nvme_cancel_request, &ctrl->ctrl);
1752 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q); 1753 blk_mq_unquiesce_queue(ctrl->ctrl.admin_q);
@@ -1932,11 +1933,6 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1932 goto out_free_ctrl; 1933 goto out_free_ctrl;
1933 } 1934 }
1934 1935
1935 ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_rdma_ctrl_ops,
1936 0 /* no quirks, we're perfect! */);
1937 if (ret)
1938 goto out_free_ctrl;
1939
1940 INIT_DELAYED_WORK(&ctrl->reconnect_work, 1936 INIT_DELAYED_WORK(&ctrl->reconnect_work,
1941 nvme_rdma_reconnect_ctrl_work); 1937 nvme_rdma_reconnect_ctrl_work);
1942 INIT_WORK(&ctrl->err_work, nvme_rdma_error_recovery_work); 1938 INIT_WORK(&ctrl->err_work, nvme_rdma_error_recovery_work);
@@ -1950,14 +1946,19 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1950 ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues), 1946 ctrl->queues = kcalloc(ctrl->ctrl.queue_count, sizeof(*ctrl->queues),
1951 GFP_KERNEL); 1947 GFP_KERNEL);
1952 if (!ctrl->queues) 1948 if (!ctrl->queues)
1953 goto out_uninit_ctrl; 1949 goto out_free_ctrl;
1950
1951 ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_rdma_ctrl_ops,
1952 0 /* no quirks, we're perfect! */);
1953 if (ret)
1954 goto out_kfree_queues;
1954 1955
1955 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING); 1956 changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING);
1956 WARN_ON_ONCE(!changed); 1957 WARN_ON_ONCE(!changed);
1957 1958
1958 ret = nvme_rdma_configure_admin_queue(ctrl, true); 1959 ret = nvme_rdma_configure_admin_queue(ctrl, true);
1959 if (ret) 1960 if (ret)
1960 goto out_kfree_queues; 1961 goto out_uninit_ctrl;
1961 1962
1962 /* sanity check icdoff */ 1963 /* sanity check icdoff */
1963 if (ctrl->ctrl.icdoff) { 1964 if (ctrl->ctrl.icdoff) {
@@ -1974,20 +1975,19 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
1974 goto out_remove_admin_queue; 1975 goto out_remove_admin_queue;
1975 } 1976 }
1976 1977
1977 if (opts->queue_size > ctrl->ctrl.maxcmd) { 1978 /* only warn if argument is too large here, will clamp later */
1978 /* warn if maxcmd is lower than queue_size */
1979 dev_warn(ctrl->ctrl.device,
1980 "queue_size %zu > ctrl maxcmd %u, clamping down\n",
1981 opts->queue_size, ctrl->ctrl.maxcmd);
1982 opts->queue_size = ctrl->ctrl.maxcmd;
1983 }
1984
1985 if (opts->queue_size > ctrl->ctrl.sqsize + 1) { 1979 if (opts->queue_size > ctrl->ctrl.sqsize + 1) {
1986 /* warn if sqsize is lower than queue_size */
1987 dev_warn(ctrl->ctrl.device, 1980 dev_warn(ctrl->ctrl.device,
1988 "queue_size %zu > ctrl sqsize %u, clamping down\n", 1981 "queue_size %zu > ctrl sqsize %u, clamping down\n",
1989 opts->queue_size, ctrl->ctrl.sqsize + 1); 1982 opts->queue_size, ctrl->ctrl.sqsize + 1);
1990 opts->queue_size = ctrl->ctrl.sqsize + 1; 1983 }
1984
1985 /* warn if maxcmd is lower than sqsize+1 */
1986 if (ctrl->ctrl.sqsize + 1 > ctrl->ctrl.maxcmd) {
1987 dev_warn(ctrl->ctrl.device,
1988 "sqsize %u > ctrl maxcmd %u, clamping down\n",
1989 ctrl->ctrl.sqsize + 1, ctrl->ctrl.maxcmd);
1990 ctrl->ctrl.sqsize = ctrl->ctrl.maxcmd - 1;
1991 } 1991 }
1992 1992
1993 if (opts->nr_io_queues) { 1993 if (opts->nr_io_queues) {
@@ -2013,15 +2013,16 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
2013 return &ctrl->ctrl; 2013 return &ctrl->ctrl;
2014 2014
2015out_remove_admin_queue: 2015out_remove_admin_queue:
2016 nvme_rdma_stop_queue(&ctrl->queues[0]);
2016 nvme_rdma_destroy_admin_queue(ctrl, true); 2017 nvme_rdma_destroy_admin_queue(ctrl, true);
2017out_kfree_queues:
2018 kfree(ctrl->queues);
2019out_uninit_ctrl: 2018out_uninit_ctrl:
2020 nvme_uninit_ctrl(&ctrl->ctrl); 2019 nvme_uninit_ctrl(&ctrl->ctrl);
2021 nvme_put_ctrl(&ctrl->ctrl); 2020 nvme_put_ctrl(&ctrl->ctrl);
2022 if (ret > 0) 2021 if (ret > 0)
2023 ret = -EIO; 2022 ret = -EIO;
2024 return ERR_PTR(ret); 2023 return ERR_PTR(ret);
2024out_kfree_queues:
2025 kfree(ctrl->queues);
2025out_free_ctrl: 2026out_free_ctrl:
2026 kfree(ctrl); 2027 kfree(ctrl);
2027 return ERR_PTR(ret); 2028 return ERR_PTR(ret);
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index a03da764ecae..74d4b785d2da 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -686,6 +686,14 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)
686 } 686 }
687 687
688 ctrl->csts = NVME_CSTS_RDY; 688 ctrl->csts = NVME_CSTS_RDY;
689
690 /*
691 * Controllers that are not yet enabled should not really enforce the
692 * keep alive timeout, but we still want to track a timeout and cleanup
693 * in case a host died before it enabled the controller. Hence, simply
694 * reset the keep alive timer when the controller is enabled.
695 */
696 mod_delayed_work(system_wq, &ctrl->ka_work, ctrl->kato * HZ);
689} 697}
690 698
691static void nvmet_clear_ctrl(struct nvmet_ctrl *ctrl) 699static void nvmet_clear_ctrl(struct nvmet_ctrl *ctrl)
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index 1da3d71e9f61..13948102ca29 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -3592,7 +3592,7 @@ fc_bsg_job_timeout(struct request *req)
3592 3592
3593 /* the blk_end_sync_io() doesn't check the error */ 3593 /* the blk_end_sync_io() doesn't check the error */
3594 if (inflight) 3594 if (inflight)
3595 blk_mq_complete_request(req); 3595 __blk_complete_request(req);
3596 return BLK_EH_DONE; 3596 return BLK_EH_DONE;
3597} 3597}
3598 3598
diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
index 0bd432a4d7bd..24251762c20c 100644
--- a/include/linux/backing-dev-defs.h
+++ b/include/linux/backing-dev-defs.h
@@ -22,7 +22,6 @@ struct dentry;
22 */ 22 */
23enum wb_state { 23enum wb_state {
24 WB_registered, /* bdi_register() was done */ 24 WB_registered, /* bdi_register() was done */
25 WB_shutting_down, /* wb_shutdown() in progress */
26 WB_writeback_running, /* Writeback is in progress */ 25 WB_writeback_running, /* Writeback is in progress */
27 WB_has_dirty_io, /* Dirty inodes on ->b_{dirty|io|more_io} */ 26 WB_has_dirty_io, /* Dirty inodes on ->b_{dirty|io|more_io} */
28 WB_start_all, /* nr_pages == 0 (all) work pending */ 27 WB_start_all, /* nr_pages == 0 (all) work pending */
@@ -189,6 +188,7 @@ struct backing_dev_info {
189#ifdef CONFIG_CGROUP_WRITEBACK 188#ifdef CONFIG_CGROUP_WRITEBACK
190 struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */ 189 struct radix_tree_root cgwb_tree; /* radix tree of active cgroup wbs */
191 struct rb_root cgwb_congested_tree; /* their congested states */ 190 struct rb_root cgwb_congested_tree; /* their congested states */
191 struct mutex cgwb_release_mutex; /* protect shutdown of wb structs */
192#else 192#else
193 struct bdi_writeback_congested *wb_congested; 193 struct bdi_writeback_congested *wb_congested;
194#endif 194#endif
diff --git a/include/uapi/linux/nbd.h b/include/uapi/linux/nbd.h
index 85a3fb65e40a..20d6cc91435d 100644
--- a/include/uapi/linux/nbd.h
+++ b/include/uapi/linux/nbd.h
@@ -53,6 +53,9 @@ enum {
53/* These are client behavior specific flags. */ 53/* These are client behavior specific flags. */
54#define NBD_CFLAG_DESTROY_ON_DISCONNECT (1 << 0) /* delete the nbd device on 54#define NBD_CFLAG_DESTROY_ON_DISCONNECT (1 << 0) /* delete the nbd device on
55 disconnect. */ 55 disconnect. */
56#define NBD_CFLAG_DISCONNECT_ON_CLOSE (1 << 1) /* disconnect the nbd device on
57 * close by last opener.
58 */
56 59
57/* userspace doesn't need the nbd_device structure */ 60/* userspace doesn't need the nbd_device structure */
58 61
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index 347cc834c04a..2e5d3df0853d 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -359,15 +359,8 @@ static void wb_shutdown(struct bdi_writeback *wb)
359 spin_lock_bh(&wb->work_lock); 359 spin_lock_bh(&wb->work_lock);
360 if (!test_and_clear_bit(WB_registered, &wb->state)) { 360 if (!test_and_clear_bit(WB_registered, &wb->state)) {
361 spin_unlock_bh(&wb->work_lock); 361 spin_unlock_bh(&wb->work_lock);
362 /*
363 * Wait for wb shutdown to finish if someone else is just
364 * running wb_shutdown(). Otherwise we could proceed to wb /
365 * bdi destruction before wb_shutdown() is finished.
366 */
367 wait_on_bit(&wb->state, WB_shutting_down, TASK_UNINTERRUPTIBLE);
368 return; 362 return;
369 } 363 }
370 set_bit(WB_shutting_down, &wb->state);
371 spin_unlock_bh(&wb->work_lock); 364 spin_unlock_bh(&wb->work_lock);
372 365
373 cgwb_remove_from_bdi_list(wb); 366 cgwb_remove_from_bdi_list(wb);
@@ -379,12 +372,6 @@ static void wb_shutdown(struct bdi_writeback *wb)
379 mod_delayed_work(bdi_wq, &wb->dwork, 0); 372 mod_delayed_work(bdi_wq, &wb->dwork, 0);
380 flush_delayed_work(&wb->dwork); 373 flush_delayed_work(&wb->dwork);
381 WARN_ON(!list_empty(&wb->work_list)); 374 WARN_ON(!list_empty(&wb->work_list));
382 /*
383 * Make sure bit gets cleared after shutdown is finished. Matches with
384 * the barrier provided by test_and_clear_bit() above.
385 */
386 smp_wmb();
387 clear_and_wake_up_bit(WB_shutting_down, &wb->state);
388} 375}
389 376
390static void wb_exit(struct bdi_writeback *wb) 377static void wb_exit(struct bdi_writeback *wb)
@@ -508,10 +495,12 @@ static void cgwb_release_workfn(struct work_struct *work)
508 struct bdi_writeback *wb = container_of(work, struct bdi_writeback, 495 struct bdi_writeback *wb = container_of(work, struct bdi_writeback,
509 release_work); 496 release_work);
510 497
498 mutex_lock(&wb->bdi->cgwb_release_mutex);
511 wb_shutdown(wb); 499 wb_shutdown(wb);
512 500
513 css_put(wb->memcg_css); 501 css_put(wb->memcg_css);
514 css_put(wb->blkcg_css); 502 css_put(wb->blkcg_css);
503 mutex_unlock(&wb->bdi->cgwb_release_mutex);
515 504
516 fprop_local_destroy_percpu(&wb->memcg_completions); 505 fprop_local_destroy_percpu(&wb->memcg_completions);
517 percpu_ref_exit(&wb->refcnt); 506 percpu_ref_exit(&wb->refcnt);
@@ -697,6 +686,7 @@ static int cgwb_bdi_init(struct backing_dev_info *bdi)
697 686
698 INIT_RADIX_TREE(&bdi->cgwb_tree, GFP_ATOMIC); 687 INIT_RADIX_TREE(&bdi->cgwb_tree, GFP_ATOMIC);
699 bdi->cgwb_congested_tree = RB_ROOT; 688 bdi->cgwb_congested_tree = RB_ROOT;
689 mutex_init(&bdi->cgwb_release_mutex);
700 690
701 ret = wb_init(&bdi->wb, bdi, 1, GFP_KERNEL); 691 ret = wb_init(&bdi->wb, bdi, 1, GFP_KERNEL);
702 if (!ret) { 692 if (!ret) {
@@ -717,7 +707,10 @@ static void cgwb_bdi_unregister(struct backing_dev_info *bdi)
717 spin_lock_irq(&cgwb_lock); 707 spin_lock_irq(&cgwb_lock);
718 radix_tree_for_each_slot(slot, &bdi->cgwb_tree, &iter, 0) 708 radix_tree_for_each_slot(slot, &bdi->cgwb_tree, &iter, 0)
719 cgwb_kill(*slot); 709 cgwb_kill(*slot);
710 spin_unlock_irq(&cgwb_lock);
720 711
712 mutex_lock(&bdi->cgwb_release_mutex);
713 spin_lock_irq(&cgwb_lock);
721 while (!list_empty(&bdi->wb_list)) { 714 while (!list_empty(&bdi->wb_list)) {
722 wb = list_first_entry(&bdi->wb_list, struct bdi_writeback, 715 wb = list_first_entry(&bdi->wb_list, struct bdi_writeback,
723 bdi_node); 716 bdi_node);
@@ -726,6 +719,7 @@ static void cgwb_bdi_unregister(struct backing_dev_info *bdi)
726 spin_lock_irq(&cgwb_lock); 719 spin_lock_irq(&cgwb_lock);
727 } 720 }
728 spin_unlock_irq(&cgwb_lock); 721 spin_unlock_irq(&cgwb_lock);
722 mutex_unlock(&bdi->cgwb_release_mutex);
729} 723}
730 724
731/** 725/**