diff options
| author | Christoph Hellwig <[email protected]> | 2025-01-27 14:30:44 +0000 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2025-01-27 16:06:26 +0000 |
| commit | 5aa21b0495df1fac6d39f45011c1572bb431c44c (patch) | |
| tree | c60908e767e38bc724c9430b14742ea1cc489429 | |
| parent | Merge tag 'md-6.14-20250124' of https://git.kernel.org/pub/scm/linux/kernel/g... (diff) | |
| download | kernel-5aa21b0495df1fac6d39f45011c1572bb431c44c.tar.gz kernel-5aa21b0495df1fac6d39f45011c1572bb431c44c.zip | |
loop: don't clear LO_FLAGS_PARTSCAN on LOOP_SET_STATUS{,64}
LOOP_SET_STATUS{,64} can set a lot more flags than it is supposed to
clear (the LOOP_SET_STATUS_CLEARABLE_FLAGS vs
LOOP_SET_STATUS_SETTABLE_FLAGS defines should have been a hint..).
Fix this by only clearing the bits in LOOP_SET_STATUS_CLEARABLE_FLAGS.
Fixes: ae074d07a0e5 ("loop: move updating lo_flag s out of loop_set_status_from_info")
Reported-by: kernel test robot <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
| -rw-r--r-- | drivers/block/loop.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 1ec7417c7f00..d1f1d6bef2e6 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1281,8 +1281,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info) partscan = !(lo->lo_flags & LO_FLAGS_PARTSCAN) && (info->lo_flags & LO_FLAGS_PARTSCAN); - lo->lo_flags &= ~(LOOP_SET_STATUS_SETTABLE_FLAGS | - LOOP_SET_STATUS_CLEARABLE_FLAGS); + lo->lo_flags &= ~LOOP_SET_STATUS_CLEARABLE_FLAGS; lo->lo_flags |= (info->lo_flags & LOOP_SET_STATUS_SETTABLE_FLAGS); if (size_changed) { |
