btrfs: discard: reschedule work after sysfs param update
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 4 Nov 2020 09:45:54 +0000 (09:45 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 8 Dec 2020 14:54:05 +0000 (15:54 +0100)
After sysfs updates discard's iops_limit or kbps_limit it also needs to
adjust current timer through rescheduling, otherwise the discard work
may wait for a long time for the previous timer to expire or bumped by
someone else.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/sysfs.c

index 620fddf..640d17f 100644 (file)
@@ -458,7 +458,8 @@ static ssize_t btrfs_discard_iops_limit_store(struct kobject *kobj,
                return -EINVAL;
 
        WRITE_ONCE(discard_ctl->iops_limit, iops_limit);
-
+       btrfs_discard_calc_delay(discard_ctl);
+       btrfs_discard_schedule_work(discard_ctl, true);
        return len;
 }
 BTRFS_ATTR_RW(discard, iops_limit, btrfs_discard_iops_limit_show,
@@ -488,7 +489,7 @@ static ssize_t btrfs_discard_kbps_limit_store(struct kobject *kobj,
                return -EINVAL;
 
        WRITE_ONCE(discard_ctl->kbps_limit, kbps_limit);
-
+       btrfs_discard_schedule_work(discard_ctl, true);
        return len;
 }
 BTRFS_ATTR_RW(discard, kbps_limit, btrfs_discard_kbps_limit_show,