summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2025-01-27 17:30:44 +0300
committerJens Axboe <axboe@kernel.dk>2025-01-27 19:06:26 +0300
commit5aa21b0495df1fac6d39f45011c1572bb431c44c (patch)
treec60908e767e38bc724c9430b14742ea1cc489429
parente9d8c873964e6fcec85657dde5406eafa596751a (diff)
downloadlinux-5aa21b0495df1fac6d39f45011c1572bb431c44c.tar.xz
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 <oliver.sang@intel.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20250127143045.538279-1-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/block/loop.c3
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) {