Commit 5eaee6e9 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

drbd: split out a drbd_discard_supported helper



Add a helper to check if discard is supported for a given connection /
backing device combination.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Reviewed-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
Tested-by: default avatarChristoph Böhmwalder <christoph.boehmwalder@linbit.com>
Link: https://lore.kernel.org/r/20240306140332.623759-7-philipp.reisner@linbit.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e3992e02
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -1231,24 +1231,33 @@ static unsigned int drbd_max_discard_sectors(struct drbd_connection *connection)
	return AL_EXTENT_SIZE >> 9;
}

static void decide_on_discard_support(struct drbd_device *device,
static bool drbd_discard_supported(struct drbd_connection *connection,
		struct drbd_backing_dev *bdev)
{
	struct drbd_connection *connection =
		first_peer_device(device)->connection;
	struct request_queue *q = device->rq_queue;
	unsigned int max_discard_sectors;

	if (bdev && !bdev_max_discard_sectors(bdev->backing_bdev))
		goto not_supported;
		return false;

	if (connection->cstate >= C_CONNECTED &&
	    !(connection->agreed_features & DRBD_FF_TRIM)) {
		drbd_info(connection,
			"peer DRBD too old, does not support TRIM: disabling discards\n");
		goto not_supported;
		return false;
	}

	return true;
}

static void decide_on_discard_support(struct drbd_device *device,
		struct drbd_backing_dev *bdev)
{
	struct drbd_connection *connection =
		first_peer_device(device)->connection;
	struct request_queue *q = device->rq_queue;
	unsigned int max_discard_sectors;

	if (!drbd_discard_supported(connection, bdev))
		goto not_supported;

	/*
	 * We don't care for the granularity, really.
	 *