All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: "Philipp Reisner" <philipp.reisner@linbit.com>,
	"Lars Ellenberg" <lars.ellenberg@linbit.com>,
	"Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>,
	"Jens Axboe" <axboe@kernel.dk>
Cc: drbd-dev@lists.linbit.com, linux-block@vger.kernel.org
Subject: [PATCH 3/7] drbd: refactor the backing dev max_segments calculation
Date: Tue,  5 Mar 2024 06:40:37 -0700	[thread overview]
Message-ID: <20240305134041.137006-4-hch@lst.de> (raw)
In-Reply-To: <20240305134041.137006-1-hch@lst.de>

Factor out a drbd_backing_dev_max_segments helper that checks the
backing device limitation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/block/drbd/drbd_nl.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
index 9135001a8e572d..0326b7322ceb48 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
@@ -1295,30 +1295,39 @@ static void fixup_discard_support(struct drbd_device *device, struct request_que
 	}
 }
 
+/* This is the workaround for "bio would need to, but cannot, be split" */
+static unsigned int drbd_backing_dev_max_segments(struct drbd_device *device)
+{
+	unsigned int max_segments;
+
+	rcu_read_lock();
+	max_segments = rcu_dereference(device->ldev->disk_conf)->max_bio_bvecs;
+	rcu_read_unlock();
+
+	if (!max_segments)
+		return BLK_MAX_SEGMENTS;
+	return max_segments;
+}
+
 static void drbd_setup_queue_param(struct drbd_device *device, struct drbd_backing_dev *bdev,
 				   unsigned int max_bio_size, struct o_qlim *o)
 {
 	struct request_queue * const q = device->rq_queue;
 	unsigned int max_hw_sectors = max_bio_size >> 9;
-	unsigned int max_segments = 0;
+	unsigned int max_segments = BLK_MAX_SEGMENTS;
 	struct request_queue *b = NULL;
-	struct disk_conf *dc;
 
 	if (bdev) {
 		b = bdev->backing_bdev->bd_disk->queue;
 
 		max_hw_sectors = min(queue_max_hw_sectors(b), max_bio_size >> 9);
-		rcu_read_lock();
-		dc = rcu_dereference(device->ldev->disk_conf);
-		max_segments = dc->max_bio_bvecs;
-		rcu_read_unlock();
+		max_segments = drbd_backing_dev_max_segments(device);
 
 		blk_set_stacking_limits(&q->limits);
 	}
 
 	blk_queue_max_hw_sectors(q, max_hw_sectors);
-	/* This is the workaround for "bio would need to, but cannot, be split" */
-	blk_queue_max_segments(q, max_segments ? max_segments : BLK_MAX_SEGMENTS);
+	blk_queue_max_segments(q, max_segments);
 	blk_queue_segment_boundary(q, PAGE_SIZE-1);
 	decide_on_discard_support(device, bdev);
 
-- 
2.39.2


  parent reply	other threads:[~2024-03-05 13:40 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-05 13:40 drbd atomic queue limits conversion Christoph Hellwig
2024-03-05 13:40 ` [PATCH 1/7] drbd: pass the max_hw_sectors limit to blk_alloc_disk Christoph Hellwig
2024-03-05 13:40 ` [PATCH 2/7] drbd: refactor drbd_reconsider_queue_parameters Christoph Hellwig
2024-03-05 13:40 ` Christoph Hellwig [this message]
2024-03-05 13:40 ` [PATCH 4/7] drbd: merge drbd_setup_queue_param into drbd_reconsider_queue_parameters Christoph Hellwig
2024-03-05 13:40 ` [PATCH 5/7] drbd: don't set max_write_zeroes_sectors in decide_on_discard_support Christoph Hellwig
2024-03-05 13:40 ` [PATCH 6/7] drbd: split out a drbd_discard_supported helper Christoph Hellwig
2024-03-05 13:40 ` [PATCH 7/7] drbd: atomically update queue limits in drbd_reconsider_queue_parameters Christoph Hellwig
2024-03-06 14:03 ` [PATCH 0/7] drbd atomic queue limits conversion Philipp Reisner
2024-03-06 15:35   ` Jens Axboe
2024-03-06 14:03 ` [PATCH 1/7] drbd: pass the max_hw_sectors limit to blk_alloc_disk Philipp Reisner
2024-03-06 14:03 ` [PATCH 2/7] drbd: refactor drbd_reconsider_queue_parameters Philipp Reisner
2024-03-06 14:03 ` [PATCH 3/7] drbd: refactor the backing dev max_segments calculation Philipp Reisner
2024-03-06 14:03 ` [PATCH 4/7] drbd: merge drbd_setup_queue_param into drbd_reconsider_queue_parameters Philipp Reisner
2024-03-06 14:03 ` [PATCH 5/7] drbd: don't set max_write_zeroes_sectors in decide_on_discard_support Philipp Reisner
2024-03-06 14:03 ` [PATCH 6/7] drbd: split out a drbd_discard_supported helper Philipp Reisner
2024-03-06 14:03 ` [PATCH 7/7] drbd: atomically update queue limits in drbd_reconsider_queue_parameters Philipp Reisner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240305134041.137006-4-hch@lst.de \
    --to=hch@lst.de \
    --cc=axboe@kernel.dk \
    --cc=christoph.boehmwalder@linbit.com \
    --cc=drbd-dev@lists.linbit.com \
    --cc=lars.ellenberg@linbit.com \
    --cc=linux-block@vger.kernel.org \
    --cc=philipp.reisner@linbit.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.