Re: [PATCH] md: skip redundant raid_disks update when value is unchanged
"Yu Kuai" <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.raid |
|---|---|
| Message-ID | <[email protected]> |
Hi, 在 2026/4/25 16:58, Abd-Alrhman Masalkhi 写道: > Calling update_raid_disks() with the same value as the current one > can trigger unnecessary work. For example, RAID1 will reallocate > resources such as the mempool for r1bio. > > Signed-off-by: Abd-Alrhman Masalkhi <[email protected]> > --- > It returns -EINVAL for the same value. If silent success is preferred > instead, please let me know so I adjust its behavior. > --- > drivers/md/md.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 0e55639211f2..cb66c4ebbafa 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -4409,9 +4409,12 @@ raid_disks_store(struct mddev *mddev, const char *buf, size_t len) > err = mddev_suspend_and_lock(mddev); > if (err) > return err; > - if (mddev->pers) > - err = update_raid_disks(mddev, n); > - else if (mddev->reshape_position != MaxSector) { > + if (mddev->pers) { > + if (n != mddev->raid_disks) > + err = update_raid_disks(mddev, n); > + else > + err = -EINVAL; Changing return value in this case is not expected, especially from success to failure. > + } else if (mddev->reshape_position != MaxSector) { > struct md_rdev *rdev; > int olddisks = mddev->raid_disks - mddev->delta_disks; > -- Thansk, Kuai