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

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
...@@ -1139,6 +1139,9 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s) ...@@ -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) ...@@ -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, ...@@ -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;
......
...@@ -257,6 +257,7 @@ struct stripe_head { ...@@ -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 */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment