Thread (19 messages) 19 messages, 2 authors, 2020-07-16

Re: [PATCH v6 11/15] md/raid5: support config stripe_size by sysfs entry

From: Song Liu <song@kernel.org>
Date: 2020-07-16 07:06:57

On Wed, Jul 15, 2020 at 5:42 AM Yufen Yu [off-list ref] wrote:
Adding a new 'stripe_size' sysfs entry to set and show stripe_size.
After that, we can adjust stripe_size by writing value into sysfs
entry, likely, set stripe_size as 16KB:

          echo 16384 > /sys/block/md1/md/stripe_size

Show current stripe_size value:

          cat /sys/block/md1/md/stripe_size

stripe_size should not be bigger than PAGE_SIZE, and it requires to be
multiple of 4096.

Signed-off-by: Yufen Yu <redacted>
For this patch, please consider the following changes:
1) use DEFAULT_STRIPE_SIZE instead of 4096;
2) make the sysfs entry read only for PAGE_SIZE == 4096

diff --git i/drivers/md/raid5.c w/drivers/md/raid5.c
index 735238425c7f3..320fc14bc628c 100644
--- i/drivers/md/raid5.c
+++ w/drivers/md/raid5.c
@@ -6532,6 +6532,8 @@ raid5_show_stripe_size(struct mddev  *mddev, char *page)
        return ret;
 }

+#if PAGE_SIZE != DEFAULT_STRIPE_SIZE
+
 static ssize_t
 raid5_store_stripe_size(struct mddev  *mddev, const char *page, size_t len)
 {
@@ -6544,13 +6546,12 @@ raid5_store_stripe_size(struct mddev  *mddev,
const char *page, size_t len)
                return -EINVAL;
        if (kstrtoul(page, 10, &new))
                return -EINVAL;
+
        /*
-        * When PAGE_SZIE is 4096, we don't need to modify stripe_size.
-        * And the value should not be bigger than PAGE_SIZE.
-        * It requires to be multiple of 4096.
+        * The value should not be bigger than PAGE_SIZE. It requires to
+        * be multiple of DEFAULT_STRIPE_SIZE.
         */
-       if (PAGE_SIZE == 4096 || new % 4096 != 0 ||
-                       new > PAGE_SIZE || new == 0)
+       if (new % DEFAULT_STRIPE_SIZE != 0 || new > PAGE_SIZE || new == 0)
                return -EINVAL;

        err = mddev_lock(mddev);
@@ -6612,6 +6613,15 @@ raid5_stripe_size = __ATTR(stripe_size, 0644,
                         raid5_show_stripe_size,
                         raid5_store_stripe_size);

+#else
+
+static struct md_sysfs_entry
+raid5_stripe_size = __ATTR(stripe_size, 0444,
+                        raid5_show_stripe_size,
+                        NULL);
+
+#endif /* PAGE_SIZE != DEFAULT_STRIPE_SIZE */
+
 static ssize_t
 raid5_show_preread_threshold(struct mddev *mddev, char *page)
 {
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help