On Tue, Nov 21, 2023 at 11:28:56PM -0800, Christoph Hellwig wrote: > > + if (partno && bdev_flagged(disk->part0, BD_FLAG_HAS_SUBMIT_BIO)) > > + bdev_set_flag(bdev, BD_FLAG_HAS_SUBMIT_BIO); > > else > > + bdev_clear_flag(bdev, BD_FLAG_HAS_SUBMIT_BIO); > > While the block layer has a bit of history of using wrappers for > testing, setting and clearing flags, I have to say I always find them > rather confusing when reading the code. > > > +#define BD_FLAG_READ_ONLY 0 /* read-only-policy */ > > I know this is copied from the existing field, but can you expand > it a bit? > > > +#define BD_FLAG_WRITE_HOLDER 1 > > +#define BD_FLAG_HAS_SUBMIT_BIO 2 > > +#define BD_FLAG_MAKE_IT_FAIL 3 > > And also write comments for these. > > > + > > struct block_device { > > sector_t bd_start_sect; > > sector_t bd_nr_sectors; > > @@ -44,10 +49,8 @@ struct block_device { > > struct request_queue * bd_queue; > > struct disk_stats __percpu *bd_stats; > > unsigned long bd_stamp; > > - bool bd_read_only; /* read-only policy */ > > + unsigned short bd_flags; > > I suspect you really need an unsigned long and atomic bit ops here. > Even a lock would probably not work on alpha as it could affect > the other fields in the same 32-bit alignment. All the existed 'bool' flags are not atomic RW, so I think it isn't necessary to define 'bd_flags' as 'unsigned long' for replacing them. Thanks, Ming