[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-raid
Subject:    Re: [RESEND PATCH 2/5] raid5: copy write hint from origin bio to stripe
From:       Shaohua Li <shli () kernel ! org>
Date:       2018-02-18 18:00:14
Message-ID: 20180218180014.gip3yjvpplq2xjky () kernel ! org
[Download RAW message or body]

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@intel.com>
> Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
> Reviewed-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
>  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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic