aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/exofs/ore.c2
-rw-r--r--fs/exofs/ore_raid.c6
2 files changed, 6 insertions, 2 deletions
diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c
index 894f3e192e6b..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 *
diff --git a/fs/exofs/ore_raid.c b/fs/exofs/ore_raid.c
index 29c47e5c4a86..414a2dfd9500 100644
--- a/fs/exofs/ore_raid.c
+++ b/fs/exofs/ore_raid.c
@@ -551,7 +551,11 @@ int _ore_add_parity_unit(struct ore_io_state *ios,
551 unsigned cur_len) 551 unsigned cur_len)
552{ 552{
553 if (ios->reading) { 553 if (ios->reading) {
554 BUG_ON(per_dev->cur_sg >= ios->sgs_per_dev); 554 if (per_dev->cur_sg >= ios->sgs_per_dev) {
555 ORE_DBGMSG("cur_sg(%d) >= sgs_per_dev(%d)\n" ,
556 per_dev->cur_sg, ios->sgs_per_dev);
557 return -ENOMEM;
558 }
555 _ore_add_sg_seg(per_dev, cur_len, true); 559 _ore_add_sg_seg(per_dev, cur_len, true);
556 } else { 560 } else {
557 struct __stripe_pages_2d *sp2d = ios->sp2d; 561 struct __stripe_pages_2d *sp2d = ios->sp2d;