Hi Yang, Thanks for the patch! I think it's correct, but I wonder whether it's confusing to read, especially since the comment says "For flags that can't be cleared, use previous values too" - it might not be obvious to the reader that ~SETTABLE is a subset of ~CLEARABLE, and they might think "well what about the settable flags we just cleared?" To be honest I wouldn't mind leaving the code as-is, since it more clearly describes what happens, and presumably the compiler will be smart enough to optimize this anyway. But if you have other ideas on how to remove this line and make things easier to understand, let me know. Best, Martijn On Sat, Aug 1, 2020 at 5:04 AM Yang Xu <xuyang2018.jy@xxxxxxxxxxxxxx> wrote: > > Hi > Ping. > > > Since ~LOOP_SET_STATUS_SETTABLE_FLAG is always a subset of ~LOOP_SET_STATUS_CLEARABLE_FLAGS > > ,remove this redundant flags operation. > > > > Cc: Martijn Coenen <maco@xxxxxxxxxxx> > > Signed-off-by: Yang Xu <xuyang2018.jy@xxxxxxxxxxxxxx> > > --- > > drivers/block/loop.c | 2 -- > > 1 file changed, 2 deletions(-) > > > > diff --git a/drivers/block/loop.c b/drivers/block/loop.c > > index c33bbbf..2a61079 100644 > > --- a/drivers/block/loop.c > > +++ b/drivers/block/loop.c > > @@ -1391,8 +1391,6 @@ static int loop_clr_fd(struct loop_device *lo) > > > > /* Mask out flags that can't be set using LOOP_SET_STATUS. */ > > lo->lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS; > > - /* For those flags, use the previous values instead */ > > - lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_SETTABLE_FLAGS; > > /* For flags that can't be cleared, use previous values too */ > > lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_CLEARABLE_FLAGS; > > > > > >