On Feb 13, 2019, at 2:50 AM, Bob Liu <[email protected]> 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 <[email protected]>
> 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
signature.asc
Description: Message signed with OpenPGP
