diff --git a/drivers/block/zram/zram_group/group_writeback.c b/drivers/block/zram/zram_group/group_writeback.c index 34f7ca6165870ff52b03a58ab533868398ca8a71..0956a2eb939a2b312fcc00a7a8325e99eedb24c7 100644 --- a/drivers/block/zram/zram_group/group_writeback.c +++ b/drivers/block/zram/zram_group/group_writeback.c @@ -410,6 +410,10 @@ static int read_one_obj_sync(struct zram *zram, u32 index) goto out; hyperhold_io_wait(hpio); + + /* if not reset to zero, will return err sometimes and cause SIG_BUS error */ + ret = 0; + /* get a write io, data is ready, copy the pages even write failed */ if (op_is_write(hyperhold_io_operate(hpio))) goto move; @@ -424,6 +428,7 @@ static int read_one_obj_sync(struct zram *zram, u32 index) zgrp_ext_delete(zram->zgrp, eid, gid); hyperhold_should_free_extent(eid); } + move_obj_from_hpio(zram, index, hpio); out: hyperhold_io_put(hpio); zram_slot_lock(zram, index);