Re: [RESEND PATCH 2/5] raid5: copy write hint from origin bio to stripe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 14, 2018 at 02:23:31PM +0100, Mariusz Dabrowski wrote:
> Store write hint from original bio in stripe head so it can be assigned to
> bio sent to each RAID device.
> 
> Signed-off-by: Mariusz Dabrowski <mariusz.dabrowski@xxxxxxxxx>
> Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@xxxxxxxxx>
> Reviewed-by: Pawel Baldysiak <pawel.baldysiak@xxxxxxxxx>
> ---
>  drivers/md/raid5.c | 6 ++++++
>  drivers/md/raid5.h | 1 +
>  2 files changed, 7 insertions(+)
> 
> diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
> index 50d01144b805..bd99f1651b66 100644
> --- a/drivers/md/raid5.c
> +++ b/drivers/md/raid5.c
> @@ -1139,6 +1139,9 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
>  			bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
>  			bi->bi_io_vec[0].bv_offset = 0;
>  			bi->bi_iter.bi_size = STRIPE_SIZE;
> +			bi->bi_write_hint = sh->dev[i].write_hint;
> +			if (!rrdev)
> +				sh->dev[i].write_hint = 0;

can we use RWF_WRITE_LIFE_NOT_SET?
>  			/*
>  			 * If this is discard request, set bi_vcnt 0. We don't
>  			 * want to confuse SCSI because SCSI will replace payload
> @@ -1190,6 +1193,8 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
>  			rbi->bi_io_vec[0].bv_len = STRIPE_SIZE;
>  			rbi->bi_io_vec[0].bv_offset = 0;
>  			rbi->bi_iter.bi_size = STRIPE_SIZE;
> +			rbi->bi_write_hint = sh->dev[i].write_hint;
> +			sh->dev[i].write_hint = 0;
>  			/*
>  			 * If this is discard request, set bi_vcnt 0. We don't
>  			 * want to confuse SCSI because SCSI will replace payload
> @@ -3203,6 +3208,7 @@ static int add_stripe_bio(struct stripe_head *sh, struct bio *bi, int dd_idx,
>  		(unsigned long long)sh->sector);
>  
>  	spin_lock_irq(&sh->stripe_lock);
> +	sh->dev[dd_idx].write_hint = bi->bi_write_hint;
>  	/* Don't allow new IO added to stripes in batch list */
>  	if (sh->batch_head)
>  		goto overlap;
> diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
> index 2e6123825095..69686616d2ca 100644
> --- a/drivers/md/raid5.h
> +++ b/drivers/md/raid5.h
> @@ -257,6 +257,7 @@ struct stripe_head {
>  		sector_t	sector;			/* sector of this page */
>  		unsigned long	flags;
>  		u32		log_checksum;
> +		u32		write_hint;

Let's use unsigned short to align bio definition.

>  	} dev[1]; /* allocated with extra space depending of RAID geometry */
>  };
>  
> -- 
> 2.16.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux