Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2cd259a7 authored by Mariusz Dabrowski's avatar Mariusz Dabrowski Committed by Shaohua Li
Browse files

raid5: copy write hint from origin bio to stripe



Store write hint from original bio in stripe head so it can be assigned
to bio sent to each RAID device.

Signed-off-by: default avatarMariusz Dabrowski <mariusz.dabrowski@intel.com>
Reviewed-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-by: default avatarPawel Baldysiak <pawel.baldysiak@intel.com>
Signed-off-by: default avatarShaohua Li <shli@fb.com>
parent 011abdc9
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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_len = STRIPE_SIZE;
			bi->bi_io_vec[0].bv_offset = 0;
			bi->bi_io_vec[0].bv_offset = 0;
			bi->bi_iter.bi_size = STRIPE_SIZE;
			bi->bi_iter.bi_size = STRIPE_SIZE;
			bi->bi_write_hint = sh->dev[i].write_hint;
			if (!rrdev)
				sh->dev[i].write_hint = RWF_WRITE_LIFE_NOT_SET;
			/*
			/*
			 * If this is discard request, set bi_vcnt 0. We don't
			 * If this is discard request, set bi_vcnt 0. We don't
			 * want to confuse SCSI because SCSI will replace payload
			 * 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_len = STRIPE_SIZE;
			rbi->bi_io_vec[0].bv_offset = 0;
			rbi->bi_io_vec[0].bv_offset = 0;
			rbi->bi_iter.bi_size = STRIPE_SIZE;
			rbi->bi_iter.bi_size = STRIPE_SIZE;
			rbi->bi_write_hint = sh->dev[i].write_hint;
			sh->dev[i].write_hint = RWF_WRITE_LIFE_NOT_SET;
			/*
			/*
			 * If this is discard request, set bi_vcnt 0. We don't
			 * If this is discard request, set bi_vcnt 0. We don't
			 * want to confuse SCSI because SCSI will replace payload
			 * want to confuse SCSI because SCSI will replace payload
@@ -3204,6 +3209,7 @@ static int add_stripe_bio(struct stripe_head *sh, struct bio *bi, int dd_idx,
		(unsigned long long)sh->sector);
		(unsigned long long)sh->sector);


	spin_lock_irq(&sh->stripe_lock);
	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 */
	/* Don't allow new IO added to stripes in batch list */
	if (sh->batch_head)
	if (sh->batch_head)
		goto overlap;
		goto overlap;
+1 −0
Original line number Original line Diff line number Diff line
@@ -257,6 +257,7 @@ struct stripe_head {
		sector_t	sector;			/* sector of this page */
		sector_t	sector;			/* sector of this page */
		unsigned long	flags;
		unsigned long	flags;
		u32		log_checksum;
		u32		log_checksum;
		unsigned short	write_hint;
	} dev[1]; /* allocated with extra space depending of RAID geometry */
	} dev[1]; /* allocated with extra space depending of RAID geometry */
};
};