Skip to content

Commit bd31396

Browse files
committed
Merge tag 'block-5.13-2021-05-07' of git://git.kernel.dk/linux-block
Pull block fixes from Jens Axboe: - dasd spelling fixes (Bhaskar) - Limit bio max size on multi-page bvecs to the hardware limit, to avoid overly large bio's (and hence latencies). Originally queued for the merge window, but needed a fix and was dropped from the initial pull (Changheun) - NVMe pull request (Christoph): - reset the bdev to ns head when failover (Daniel Wagner) - remove unsupported command noise (Keith Busch) - misc passthrough improvements (Kanchan Joshi) - fix controller ioctl through ns_head (Minwoo Im) - fix controller timeouts during reset (Tao Chiu) - rnbd fixes/cleanups (Gioh, Md, Dima) - Fix iov_iter re-expansion (yangerkun) * tag 'block-5.13-2021-05-07' of git://git.kernel.dk/linux-block: block: reexpand iov_iter after read/write nvmet: remove unsupported command noise nvme-multipath: reset bdev to ns head when failover nvme-pci: fix controller reset hang when racing with nvme_timeout nvme: move the fabrics queue ready check routines to core nvme: avoid memset for passthrough requests nvme: add nvme_get_ns helper nvme: fix controller ioctl through ns_head bio: limit bio max size RDMA/rtrs: fix uninitialized symbol 'cnt' s390: dasd: Mundane spelling fixes block/rnbd: Remove all likely and unlikely block/rnbd-clt: Check the return value of the function rtrs_clt_query block/rnbd: Fix style issues block/rnbd-clt: Change queue_depth type in rnbd_clt_session to size_t
2 parents 28b4afe + cf7b39a commit bd31396

File tree

22 files changed

+216
-166
lines changed

22 files changed

+216
-166
lines changed

block/bio.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,13 @@ void bio_init(struct bio *bio, struct bio_vec *table,
255255
}
256256
EXPORT_SYMBOL(bio_init);
257257

258+
unsigned int bio_max_size(struct bio *bio)
259+
{
260+
struct block_device *bdev = bio->bi_bdev;
261+
262+
return bdev ? bdev->bd_disk->queue->limits.bio_max_bytes : UINT_MAX;
263+
}
264+
258265
/**
259266
* bio_reset - reinitialize a bio
260267
* @bio: bio to reset
@@ -866,7 +873,7 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,
866873
struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1];
867874

868875
if (page_is_mergeable(bv, page, len, off, same_page)) {
869-
if (bio->bi_iter.bi_size > UINT_MAX - len) {
876+
if (bio->bi_iter.bi_size > bio_max_size(bio) - len) {
870877
*same_page = false;
871878
return false;
872879
}
@@ -995,6 +1002,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
9951002
{
9961003
unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt;
9971004
unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt;
1005+
unsigned int bytes_left = bio_max_size(bio) - bio->bi_iter.bi_size;
9981006
struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt;
9991007
struct page **pages = (struct page **)bv;
10001008
bool same_page = false;
@@ -1010,7 +1018,8 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
10101018
BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2);
10111019
pages += entries_left * (PAGE_PTRS_PER_BVEC - 1);
10121020

1013-
size = iov_iter_get_pages(iter, pages, LONG_MAX, nr_pages, &offset);
1021+
size = iov_iter_get_pages(iter, pages, bytes_left, nr_pages,
1022+
&offset);
10141023
if (unlikely(size <= 0))
10151024
return size ? size : -EFAULT;
10161025

block/blk-settings.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ EXPORT_SYMBOL_GPL(blk_queue_rq_timeout);
3232
*/
3333
void blk_set_default_limits(struct queue_limits *lim)
3434
{
35+
lim->bio_max_bytes = UINT_MAX;
3536
lim->max_segments = BLK_MAX_SEGMENTS;
3637
lim->max_discard_segments = 1;
3738
lim->max_integrity_segments = 0;
@@ -140,6 +141,10 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto
140141
limits->logical_block_size >> SECTOR_SHIFT);
141142
limits->max_sectors = max_sectors;
142143

144+
if (check_shl_overflow(max_sectors, SECTOR_SHIFT,
145+
&limits->bio_max_bytes))
146+
limits->bio_max_bytes = UINT_MAX;
147+
143148
q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9);
144149
}
145150
EXPORT_SYMBOL(blk_queue_max_hw_sectors);

drivers/block/rnbd/rnbd-clt.c

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static int rnbd_clt_set_dev_attr(struct rnbd_clt_dev *dev,
8888
dev->discard_alignment = le32_to_cpu(rsp->discard_alignment);
8989
dev->secure_discard = le16_to_cpu(rsp->secure_discard);
9090
dev->rotational = rsp->rotational;
91-
dev->wc = !!(rsp->cache_policy & RNBD_WRITEBACK);
91+
dev->wc = !!(rsp->cache_policy & RNBD_WRITEBACK);
9292
dev->fua = !!(rsp->cache_policy & RNBD_FUA);
9393

9494
dev->max_hw_sectors = sess->max_io_size / SECTOR_SIZE;
@@ -241,7 +241,7 @@ static bool rnbd_rerun_if_needed(struct rnbd_clt_session *sess)
241241
cpu_q = rnbd_get_cpu_qlist(sess, nxt_cpu(cpu_q->cpu))) {
242242
if (!spin_trylock_irqsave(&cpu_q->requeue_lock, flags))
243243
continue;
244-
if (unlikely(!test_bit(cpu_q->cpu, sess->cpu_queues_bm)))
244+
if (!test_bit(cpu_q->cpu, sess->cpu_queues_bm))
245245
goto unlock;
246246
q = list_first_entry_or_null(&cpu_q->requeue_list,
247247
typeof(*q), requeue_list);
@@ -320,7 +320,7 @@ static struct rtrs_permit *rnbd_get_permit(struct rnbd_clt_session *sess,
320320
struct rtrs_permit *permit;
321321

322322
permit = rtrs_clt_get_permit(sess->rtrs, con_type, wait);
323-
if (likely(permit))
323+
if (permit)
324324
/* We have a subtle rare case here, when all permits can be
325325
* consumed before busy counter increased. This is safe,
326326
* because loser will get NULL as a permit, observe 0 busy
@@ -351,12 +351,11 @@ static struct rnbd_iu *rnbd_get_iu(struct rnbd_clt_session *sess,
351351
struct rtrs_permit *permit;
352352

353353
iu = kzalloc(sizeof(*iu), GFP_KERNEL);
354-
if (!iu) {
354+
if (!iu)
355355
return NULL;
356-
}
357356

358357
permit = rnbd_get_permit(sess, con_type, wait);
359-
if (unlikely(!permit)) {
358+
if (!permit) {
360359
kfree(iu);
361360
return NULL;
362361
}
@@ -692,7 +691,11 @@ static void remap_devs(struct rnbd_clt_session *sess)
692691
return;
693692
}
694693

695-
rtrs_clt_query(sess->rtrs, &attrs);
694+
err = rtrs_clt_query(sess->rtrs, &attrs);
695+
if (err) {
696+
pr_err("rtrs_clt_query(\"%s\"): %d\n", sess->sessname, err);
697+
return;
698+
}
696699
mutex_lock(&sess->lock);
697700
sess->max_io_size = attrs.max_io_size;
698701

@@ -805,7 +808,7 @@ static struct rnbd_clt_session *alloc_sess(const char *sessname)
805808
mutex_init(&sess->lock);
806809
INIT_LIST_HEAD(&sess->devs_list);
807810
INIT_LIST_HEAD(&sess->list);
808-
bitmap_zero(sess->cpu_queues_bm, NR_CPUS);
811+
bitmap_zero(sess->cpu_queues_bm, num_possible_cpus());
809812
init_waitqueue_head(&sess->rtrs_waitq);
810813
refcount_set(&sess->refcount, 1);
811814

@@ -1047,7 +1050,7 @@ static int rnbd_client_xfer_request(struct rnbd_clt_dev *dev,
10471050
};
10481051
err = rtrs_clt_request(rq_data_dir(rq), &req_ops, rtrs, permit,
10491052
&vec, 1, size, iu->sgt.sgl, sg_cnt);
1050-
if (unlikely(err)) {
1053+
if (err) {
10511054
rnbd_clt_err_rl(dev, "RTRS failed to transfer IO, err: %d\n",
10521055
err);
10531056
return err;
@@ -1078,7 +1081,7 @@ static bool rnbd_clt_dev_add_to_requeue(struct rnbd_clt_dev *dev,
10781081
cpu_q = get_cpu_ptr(sess->cpu_queues);
10791082
spin_lock_irqsave(&cpu_q->requeue_lock, flags);
10801083

1081-
if (likely(!test_and_set_bit_lock(0, &q->in_list))) {
1084+
if (!test_and_set_bit_lock(0, &q->in_list)) {
10821085
if (WARN_ON(!list_empty(&q->requeue_list)))
10831086
goto unlock;
10841087

@@ -1090,7 +1093,7 @@ static bool rnbd_clt_dev_add_to_requeue(struct rnbd_clt_dev *dev,
10901093
*/
10911094
smp_mb__before_atomic();
10921095
}
1093-
if (likely(atomic_read(&sess->busy))) {
1096+
if (atomic_read(&sess->busy)) {
10941097
list_add_tail(&q->requeue_list, &cpu_q->requeue_list);
10951098
} else {
10961099
/* Very unlikely, but possible: busy counter was
@@ -1118,7 +1121,7 @@ static void rnbd_clt_dev_kick_mq_queue(struct rnbd_clt_dev *dev,
11181121

11191122
if (delay != RNBD_DELAY_IFBUSY)
11201123
blk_mq_delay_run_hw_queue(hctx, delay);
1121-
else if (unlikely(!rnbd_clt_dev_add_to_requeue(dev, q)))
1124+
else if (!rnbd_clt_dev_add_to_requeue(dev, q))
11221125
/*
11231126
* If session is not busy we have to restart
11241127
* the queue ourselves.
@@ -1135,20 +1138,21 @@ static blk_status_t rnbd_queue_rq(struct blk_mq_hw_ctx *hctx,
11351138
int err;
11361139
blk_status_t ret = BLK_STS_IOERR;
11371140

1138-
if (unlikely(dev->dev_state != DEV_STATE_MAPPED))
1141+
if (dev->dev_state != DEV_STATE_MAPPED)
11391142
return BLK_STS_IOERR;
11401143

11411144
iu->permit = rnbd_get_permit(dev->sess, RTRS_IO_CON,
11421145
RTRS_PERMIT_NOWAIT);
1143-
if (unlikely(!iu->permit)) {
1146+
if (!iu->permit) {
11441147
rnbd_clt_dev_kick_mq_queue(dev, hctx, RNBD_DELAY_IFBUSY);
11451148
return BLK_STS_RESOURCE;
11461149
}
11471150

11481151
iu->sgt.sgl = iu->first_sgl;
11491152
err = sg_alloc_table_chained(&iu->sgt,
11501153
/* Even-if the request has no segment,
1151-
* sglist must have one entry at least */
1154+
* sglist must have one entry at least.
1155+
*/
11521156
blk_rq_nr_phys_segments(rq) ? : 1,
11531157
iu->sgt.sgl,
11541158
RNBD_INLINE_SG_CNT);
@@ -1161,9 +1165,9 @@ static blk_status_t rnbd_queue_rq(struct blk_mq_hw_ctx *hctx,
11611165

11621166
blk_mq_start_request(rq);
11631167
err = rnbd_client_xfer_request(dev, rq, iu);
1164-
if (likely(err == 0))
1168+
if (err == 0)
11651169
return BLK_STS_OK;
1166-
if (unlikely(err == -EAGAIN || err == -ENOMEM)) {
1170+
if (err == -EAGAIN || err == -ENOMEM) {
11671171
rnbd_clt_dev_kick_mq_queue(dev, hctx, 10/*ms*/);
11681172
ret = BLK_STS_RESOURCE;
11691173
}
@@ -1294,7 +1298,11 @@ find_and_get_or_create_sess(const char *sessname,
12941298
err = PTR_ERR(sess->rtrs);
12951299
goto wake_up_and_put;
12961300
}
1297-
rtrs_clt_query(sess->rtrs, &attrs);
1301+
1302+
err = rtrs_clt_query(sess->rtrs, &attrs);
1303+
if (err)
1304+
goto close_rtrs;
1305+
12981306
sess->max_io_size = attrs.max_io_size;
12991307
sess->queue_depth = attrs.queue_depth;
13001308
sess->nr_poll_queues = nr_poll_queues;
@@ -1576,7 +1584,7 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
15761584
struct rnbd_clt_dev *dev;
15771585
int ret;
15781586

1579-
if (unlikely(exists_devpath(pathname, sessname)))
1587+
if (exists_devpath(pathname, sessname))
15801588
return ERR_PTR(-EEXIST);
15811589

15821590
sess = find_and_get_or_create_sess(sessname, paths, path_cnt, port_nr, nr_poll_queues);

drivers/block/rnbd/rnbd-clt.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ struct rnbd_clt_session {
8787
DECLARE_BITMAP(cpu_queues_bm, NR_CPUS);
8888
int __percpu *cpu_rr; /* per-cpu var for CPU round-robin */
8989
atomic_t busy;
90-
int queue_depth;
90+
size_t queue_depth;
9191
u32 max_io_size;
9292
struct blk_mq_tag_set tag_set;
9393
u32 nr_poll_queues;

drivers/block/rnbd/rnbd-srv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ rnbd_get_sess_dev(int dev_id, struct rnbd_srv_session *srv_sess)
104104

105105
rcu_read_lock();
106106
sess_dev = xa_load(&srv_sess->index_idr, dev_id);
107-
if (likely(sess_dev))
107+
if (sess_dev)
108108
ret = kref_get_unless_zero(&sess_dev->kref);
109109
rcu_read_unlock();
110110

drivers/infiniband/ulp/rtrs/rtrs-clt.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2976,7 +2976,8 @@ EXPORT_SYMBOL(rtrs_clt_request);
29762976

29772977
int rtrs_clt_rdma_cq_direct(struct rtrs_clt *clt, unsigned int index)
29782978
{
2979-
int cnt;
2979+
/* If no path, return -1 for block layer not to try again */
2980+
int cnt = -1;
29802981
struct rtrs_con *con;
29812982
struct rtrs_clt_sess *sess;
29822983
struct path_it it;

drivers/nvme/host/core.c

Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,11 @@ static void nvme_free_ns(struct kref *kref)
576576
kfree(ns);
577577
}
578578

579+
static inline bool nvme_get_ns(struct nvme_ns *ns)
580+
{
581+
return kref_get_unless_zero(&ns->kref);
582+
}
583+
579584
void nvme_put_ns(struct nvme_ns *ns)
580585
{
581586
kref_put(&ns->kref, nvme_free_ns);
@@ -584,9 +589,6 @@ EXPORT_SYMBOL_NS_GPL(nvme_put_ns, NVME_TARGET_PASSTHRU);
584589

585590
static inline void nvme_clear_nvme_request(struct request *req)
586591
{
587-
struct nvme_command *cmd = nvme_req(req)->cmd;
588-
589-
memset(cmd, 0, sizeof(*cmd));
590592
nvme_req(req)->retries = 0;
591593
nvme_req(req)->flags = 0;
592594
req->rq_flags |= RQF_DONTPREP;
@@ -637,6 +639,66 @@ static struct request *nvme_alloc_request_qid(struct request_queue *q,
637639
return req;
638640
}
639641

642+
/*
643+
* For something we're not in a state to send to the device the default action
644+
* is to busy it and retry it after the controller state is recovered. However,
645+
* if the controller is deleting or if anything is marked for failfast or
646+
* nvme multipath it is immediately failed.
647+
*
648+
* Note: commands used to initialize the controller will be marked for failfast.
649+
* Note: nvme cli/ioctl commands are marked for failfast.
650+
*/
651+
blk_status_t nvme_fail_nonready_command(struct nvme_ctrl *ctrl,
652+
struct request *rq)
653+
{
654+
if (ctrl->state != NVME_CTRL_DELETING_NOIO &&
655+
ctrl->state != NVME_CTRL_DEAD &&
656+
!test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ctrl->flags) &&
657+
!blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH))
658+
return BLK_STS_RESOURCE;
659+
return nvme_host_path_error(rq);
660+
}
661+
EXPORT_SYMBOL_GPL(nvme_fail_nonready_command);
662+
663+
bool __nvme_check_ready(struct nvme_ctrl *ctrl, struct request *rq,
664+
bool queue_live)
665+
{
666+
struct nvme_request *req = nvme_req(rq);
667+
668+
/*
669+
* currently we have a problem sending passthru commands
670+
* on the admin_q if the controller is not LIVE because we can't
671+
* make sure that they are going out after the admin connect,
672+
* controller enable and/or other commands in the initialization
673+
* sequence. until the controller will be LIVE, fail with
674+
* BLK_STS_RESOURCE so that they will be rescheduled.
675+
*/
676+
if (rq->q == ctrl->admin_q && (req->flags & NVME_REQ_USERCMD))
677+
return false;
678+
679+
if (ctrl->ops->flags & NVME_F_FABRICS) {
680+
/*
681+
* Only allow commands on a live queue, except for the connect
682+
* command, which is require to set the queue live in the
683+
* appropinquate states.
684+
*/
685+
switch (ctrl->state) {
686+
case NVME_CTRL_CONNECTING:
687+
if (blk_rq_is_passthrough(rq) && nvme_is_fabrics(req->cmd) &&
688+
req->cmd->fabrics.fctype == nvme_fabrics_type_connect)
689+
return true;
690+
break;
691+
default:
692+
break;
693+
case NVME_CTRL_DEAD:
694+
return false;
695+
}
696+
}
697+
698+
return queue_live;
699+
}
700+
EXPORT_SYMBOL_GPL(__nvme_check_ready);
701+
640702
static int nvme_toggle_streams(struct nvme_ctrl *ctrl, bool enable)
641703
{
642704
struct nvme_command c;
@@ -898,8 +960,10 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req)
898960
struct nvme_command *cmd = nvme_req(req)->cmd;
899961
blk_status_t ret = BLK_STS_OK;
900962

901-
if (!(req->rq_flags & RQF_DONTPREP))
963+
if (!(req->rq_flags & RQF_DONTPREP)) {
902964
nvme_clear_nvme_request(req);
965+
memset(cmd, 0, sizeof(*cmd));
966+
}
903967

904968
switch (req_op(req)) {
905969
case REQ_OP_DRV_IN:
@@ -1494,7 +1558,7 @@ static int nvme_ns_open(struct nvme_ns *ns)
14941558
/* should never be called due to GENHD_FL_HIDDEN */
14951559
if (WARN_ON_ONCE(nvme_ns_head_multipath(ns->head)))
14961560
goto fail;
1497-
if (!kref_get_unless_zero(&ns->kref))
1561+
if (!nvme_get_ns(ns))
14981562
goto fail;
14991563
if (!try_module_get(ns->ctrl->ops->module))
15001564
goto fail_put_ns;
@@ -1999,28 +2063,6 @@ static const struct block_device_operations nvme_bdev_ops = {
19992063
.pr_ops = &nvme_pr_ops,
20002064
};
20012065

2002-
#ifdef CONFIG_NVME_MULTIPATH
2003-
struct nvme_ctrl *nvme_find_get_live_ctrl(struct nvme_subsystem *subsys)
2004-
{
2005-
struct nvme_ctrl *ctrl;
2006-
int ret;
2007-
2008-
ret = mutex_lock_killable(&nvme_subsystems_lock);
2009-
if (ret)
2010-
return ERR_PTR(ret);
2011-
list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry) {
2012-
if (ctrl->state == NVME_CTRL_LIVE)
2013-
goto found;
2014-
}
2015-
mutex_unlock(&nvme_subsystems_lock);
2016-
return ERR_PTR(-EWOULDBLOCK);
2017-
found:
2018-
nvme_get_ctrl(ctrl);
2019-
mutex_unlock(&nvme_subsystems_lock);
2020-
return ctrl;
2021-
}
2022-
#endif /* CONFIG_NVME_MULTIPATH */
2023-
20242066
static int nvme_wait_ready(struct nvme_ctrl *ctrl, u64 cap, bool enabled)
20252067
{
20262068
unsigned long timeout =
@@ -3604,7 +3646,7 @@ struct nvme_ns *nvme_find_get_ns(struct nvme_ctrl *ctrl, unsigned nsid)
36043646
down_read(&ctrl->namespaces_rwsem);
36053647
list_for_each_entry(ns, &ctrl->namespaces, list) {
36063648
if (ns->head->ns_id == nsid) {
3607-
if (!kref_get_unless_zero(&ns->kref))
3649+
if (!nvme_get_ns(ns))
36083650
continue;
36093651
ret = ns;
36103652
break;

0 commit comments

Comments
 (0)