diff mbox

[1/2] lightnvm: use rrpc->nr_luns to calculate the rrpc area size

Message ID 1459348115-6072-1-git-send-email-ww.tao0320@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wenwei Tao March 30, 2016, 2:28 p.m. UTC
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(-)

Comments

Wenwei Tao March 31, 2016, 8:31 a.m. UTC | #1
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
Matias Bjorling March 31, 2016, 8:57 a.m. UTC | #2
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
Wenwei Tao March 31, 2016, 9:51 a.m. UTC | #3
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 mbox

Patch

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;