On Feb 13, 2019, at 2:50 AM, Bob Liu <bob.liu@xxxxxxxxxx> wrote: > > When fs data/metadata checksum mismatch, lower block devices may have other > correct copies. e.g if we did raid1 for protecting fs metadata. > Then fs could try other copies of metadata instead of panic, but fs need be > awared how many mirrors the block devices have. > > This patch add @nr_mirrors to struct request_queue which is similar as > blk_queue_nonrot(), filesystem can grab device request queue and check the > number of mirrors of this block device. > > @nr_mirrors is 1 by default which means only one copy, drivers e.g raid1 are > responsible for setting the right value. The maximum value is > BITS_PER_LONG which is 32 or 64. That should be big enough else retry lantency > may be too high. > > Also added helper functions for get/set the number of mirrors for a specific > device request queue. > > Todo: > * Export nr_mirrors through /sysfs. > > Signed-off-by: Bob Liu <bob.liu@xxxxxxxxxx> > diff --git a/block/blk-settings.c b/block/blk-settings.c > index 3e7038e475ee..38e4d7e675e6 100644 > --- a/block/blk-settings.c > +++ b/block/blk-settings.c > @@ -844,6 +844,30 @@ void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua) > +/* > + * Set the number of read redundant mirrors. > + */ > +bool blk_queue_set_mirrors(struct request_queue *q, unsigned short mirrors) > +{ > + if(q->nr_mirrors >= BLKDEV_MAX_MIRRORS) { > + printk("blk_queue_set_mirrors: %d exceed max mirrors(%d)\n", > + mirrors, BLKDEV_MAX_MIRRORS); Need to supply a KERN_ level here. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP