Message ID | 1459348115-6072-1-git-send-email-ww.tao0320@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2016-03-30 22:28 GMT+08:00 Wenwei Tao <ww.tao0320@gmail.com>: > 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@gmail.com> > --- > 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. > > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 03/31/2016 10:31 AM, Wenwei Tao wrote: > 2016-03-30 22:28 GMT+08:00 Wenwei Tao <ww.tao0320@gmail.com>: >> 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@gmail.com> >> --- >> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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@lightnvm.io>: > > > On 03/31/2016 10:31 AM, Wenwei Tao wrote: >> >> 2016-03-30 22:28 GMT+08:00 Wenwei Tao <ww.tao0320@gmail.com>: >>> >>> 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@gmail.com> >>> --- >>> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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; size >>= 9;
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@gmail.com> --- drivers/lightnvm/rrpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)