Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:Factory:ARM
drbd
0014-drbd-split-out-a-drbd_discard_supported-he...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0014-drbd-split-out-a-drbd_discard_supported-helper.patch of Package drbd
From 78d5d462c2bdac350921c114caca588c606d7c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= <christoph.boehmwalder@linbit.com> Date: Mon, 1 Jul 2024 17:56:08 +0200 Subject: [PATCH 14/32] drbd: split out a drbd_discard_supported helper Add a helper to check if discard is supported for a given connection / backing device combination. Similar idea to upstream kernel commit 5eaee6e9c8f9 ("drbd: split out a drbd_discard_supported helper"), but also get rid of the goto. --- drbd/drbd_nl.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/drbd/drbd_nl.c b/drbd/drbd_nl.c index a0c3534d8996..e3f508cd0421 100644 --- a/drbd/drbd_nl.c +++ b/drbd/drbd_nl.c @@ -2044,19 +2044,31 @@ static unsigned int drbd_max_discard_sectors(struct drbd_resource *resource) return s; } -static void decide_on_discard_support(struct drbd_device *device, +static bool drbd_discard_supported(struct drbd_device *device, struct drbd_backing_dev *bdev) { - 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 (!(common_connection_features(device->resource) & DRBD_FF_TRIM)) { drbd_info(device, "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 request_queue *q = device->rq_queue; + unsigned int max_discard_sectors; + + if (!drbd_discard_supported(device, bdev)) { + blk_queue_discard_granularity(q, 0); + blk_queue_max_discard_sectors(q, 0); + return; } /* @@ -2070,11 +2082,6 @@ static void decide_on_discard_support(struct drbd_device *device, blk_queue_discard_granularity(q, 512); max_discard_sectors = drbd_max_discard_sectors(device->resource); blk_queue_max_discard_sectors(q, max_discard_sectors); - return; - -not_supported: - blk_queue_discard_granularity(q, 0); - blk_queue_max_discard_sectors(q, 0); } static void fixup_write_zeroes(struct drbd_device *device, struct request_queue *q) -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor