diff options
Diffstat (limited to 'fs/exofs/ore.c')
-rw-r--r-- | fs/exofs/ore.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c index d271ad837202..49cf230554a2 100644 --- a/fs/exofs/ore.c +++ b/fs/exofs/ore.c | |||
@@ -266,7 +266,7 @@ int ore_get_rw_state(struct ore_layout *layout, struct ore_components *oc, | |||
266 | 266 | ||
267 | /* first/last seg is split */ | 267 | /* first/last seg is split */ |
268 | num_raid_units += layout->group_width; | 268 | num_raid_units += layout->group_width; |
269 | sgs_per_dev = div_u64(num_raid_units, data_devs); | 269 | sgs_per_dev = div_u64(num_raid_units, data_devs) + 2; |
270 | } else { | 270 | } else { |
271 | /* For Writes add parity pages array. */ | 271 | /* For Writes add parity pages array. */ |
272 | max_par_pages = num_raid_units * pages_in_unit * | 272 | max_par_pages = num_raid_units * pages_in_unit * |
@@ -445,10 +445,10 @@ int ore_check_io(struct ore_io_state *ios, ore_on_dev_error on_dev_error) | |||
445 | u64 residual = ios->reading ? | 445 | u64 residual = ios->reading ? |
446 | or->in.residual : or->out.residual; | 446 | or->in.residual : or->out.residual; |
447 | u64 offset = (ios->offset + ios->length) - residual; | 447 | u64 offset = (ios->offset + ios->length) - residual; |
448 | struct ore_dev *od = ios->oc->ods[ | 448 | unsigned dev = per_dev->dev - ios->oc->first_dev; |
449 | per_dev->dev - ios->oc->first_dev]; | 449 | struct ore_dev *od = ios->oc->ods[dev]; |
450 | 450 | ||
451 | on_dev_error(ios, od, per_dev->dev, osi.osd_err_pri, | 451 | on_dev_error(ios, od, dev, osi.osd_err_pri, |
452 | offset, residual); | 452 | offset, residual); |
453 | } | 453 | } |
454 | if (osi.osd_err_pri >= acumulated_osd_err) { | 454 | if (osi.osd_err_pri >= acumulated_osd_err) { |