This could be work, but it needs more steps when rrpc_area_init fails. If rrpc_area_init fail we may come to rrpc_free and call rrpc_area_free, we find and put the area by the rrpc->soffset value, this value is zero when we fail to get an area, we may put an exist area that really start from zero by mistake. If we move rrpc_area_init call under the rrpc_luns_init call instead, we need a way to avoid it. 2016-03-31 16:57 GMT+08:00 Matias Bjørling <mb@xxxxxxxxxxx>: > > > On 03/31/2016 10:31 AM, Wenwei Tao wrote: >> >> 2016-03-30 22:28 GMT+08:00 Wenwei Tao <ww.tao0320@xxxxxxxxx>: >>> >>> rrpc->nr_sects is calculated after rrpc init luns succeeds, >>> before that the value of rrpc->nr_sects is zero, so we cannot >>> use it to calcuate rrpc area size, we use rrpc->nr_luns instead. >>> >>> Signed-off-by: Wenwei Tao <ww.tao0320@xxxxxxxxx> >>> --- >>> drivers/lightnvm/rrpc.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c >>> index 3ab6495..516a045 100644 >>> --- a/drivers/lightnvm/rrpc.c >>> +++ b/drivers/lightnvm/rrpc.c >>> @@ -1223,7 +1223,7 @@ static int rrpc_area_init(struct rrpc *rrpc, >>> sector_t *begin) >>> { >>> struct nvm_dev *dev = rrpc->dev; >>> struct nvmm_type *mt = dev->mt; >>> - sector_t size = rrpc->nr_sects * dev->sec_size; >>> + sector_t size = dev->sec_size * dev->sec_per_lun * rrpc->nr_luns; >> >> >> dev->sec_size * dev->sec_per_lun * rrpc->nr_luns could be oveflow, >> should use (sector_t)dev->sec_size * dev->sec_per_lun * rrpc->nr_luns >> instead. Will submit another patch to fix it. > > > Hi Wenwei, > > How about moving rrpc_area_init call under the rrpc_luns_init call instead. > Then nr_sects will have been initialized? > > >>> >>> size >>= 9; >>> >>> -- >>> 2.7.2.333.g70bd996 >>> > -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html