diff mbox series

mtd: fix size in mtd_info_user to support 64-bit

Message ID 20210708131359.21591-1-linmiaohe@huawei.com
State Changes Requested
Headers show
Series mtd: fix size in mtd_info_user to support 64-bit | expand

Commit Message

Miaohe Lin July 8, 2021, 1:13 p.m. UTC
From: Feilong Lin <linfeilong@huawei.com>

The size in struct mtd_info_user is 32-bit, which will cause errors
when obtaining the size of large-capacity MTD devices, such as TLC
NAND FLASH-2048Gb.

Fixes: 69423d99fc18 ("[MTD] update internal API to support 64-bit device size")
Signed-off-by: Feilong Lin <linfeilong@huawei.com>
---
 include/uapi/mtd/mtd-abi.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Miquel Raynal July 15, 2021, 11:02 p.m. UTC | #1
Hi Miaohe,

Miaohe Lin <linmiaohe@huawei.com> wrote on Thu, 8 Jul 2021 21:13:59
+0800:

> From: Feilong Lin <linfeilong@huawei.com>
> 
> The size in struct mtd_info_user is 32-bit, which will cause errors
> when obtaining the size of large-capacity MTD devices, such as TLC
> NAND FLASH-2048Gb.

Besides the fact that such devices are far from being supported by the
Linux kernel, this change would basically break userspace, it cannot
enter as-is...

> Fixes: 69423d99fc18 ("[MTD] update internal API to support 64-bit device size")
> Signed-off-by: Feilong Lin <linfeilong@huawei.com>
> ---
>  include/uapi/mtd/mtd-abi.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/uapi/mtd/mtd-abi.h b/include/uapi/mtd/mtd-abi.h
> index b869990c2db2..efe0b53b10c1 100644
> --- a/include/uapi/mtd/mtd-abi.h
> +++ b/include/uapi/mtd/mtd-abi.h
> @@ -128,7 +128,7 @@ struct mtd_write_req {
>  struct mtd_info_user {
>  	__u8 type;
>  	__u32 flags;
> -	__u32 size;	/* Total size of the MTD */
> +	__u64 size;	/* Total size of the MTD */
>  	__u32 erasesize;
>  	__u32 writesize;
>  	__u32 oobsize;	/* Amount of OOB data per block (e.g. 16) */

Thanks,
Miquèl
Miaohe Lin July 16, 2021, 1:42 a.m. UTC | #2
On 2021/7/16 7:02, Miquel Raynal wrote:
> Hi Miaohe,
> 
> Miaohe Lin <linmiaohe@huawei.com> wrote on Thu, 8 Jul 2021 21:13:59
> +0800:
> 
>> From: Feilong Lin <linfeilong@huawei.com>
>>
>> The size in struct mtd_info_user is 32-bit, which will cause errors
>> when obtaining the size of large-capacity MTD devices, such as TLC
>> NAND FLASH-2048Gb.
> 
> Besides the fact that such devices are far from being supported by the
> Linux kernel, this change would basically break userspace, it cannot
> enter as-is...
> 

I see. Many thanks for your reply! We're working with these large-capacity
MTD devices now, any suggestion to work around this?

Thanks again!

>> Fixes: 69423d99fc18 ("[MTD] update internal API to support 64-bit device size")
>> Signed-off-by: Feilong Lin <linfeilong@huawei.com>
>> ---
>>  include/uapi/mtd/mtd-abi.h | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/uapi/mtd/mtd-abi.h b/include/uapi/mtd/mtd-abi.h
>> index b869990c2db2..efe0b53b10c1 100644
>> --- a/include/uapi/mtd/mtd-abi.h
>> +++ b/include/uapi/mtd/mtd-abi.h
>> @@ -128,7 +128,7 @@ struct mtd_write_req {
>>  struct mtd_info_user {
>>  	__u8 type;
>>  	__u32 flags;
>> -	__u32 size;	/* Total size of the MTD */
>> +	__u64 size;	/* Total size of the MTD */
>>  	__u32 erasesize;
>>  	__u32 writesize;
>>  	__u32 oobsize;	/* Amount of OOB data per block (e.g. 16) */
> 
> Thanks,
> Miquèl
> .
>
Miquel Raynal July 16, 2021, 9:48 a.m. UTC | #3
Hi Miaohe,

Miaohe Lin <linmiaohe@huawei.com> wrote on Fri, 16 Jul 2021 09:42:19
+0800:

> On 2021/7/16 7:02, Miquel Raynal wrote:
> > Hi Miaohe,
> > 
> > Miaohe Lin <linmiaohe@huawei.com> wrote on Thu, 8 Jul 2021 21:13:59
> > +0800:
> >   
> >> From: Feilong Lin <linfeilong@huawei.com>
> >>
> >> The size in struct mtd_info_user is 32-bit, which will cause errors
> >> when obtaining the size of large-capacity MTD devices, such as TLC
> >> NAND FLASH-2048Gb.  
> > 
> > Besides the fact that such devices are far from being supported by the
> > Linux kernel, this change would basically break userspace, it cannot
> > enter as-is...
> >   
> 
> I see. Many thanks for your reply! We're working with these large-capacity
> MTD devices now, any suggestion to work around this?

The only way is to create a second UAPI.

Thanks,
Miquèl
Rob Landley July 16, 2021, 1:34 p.m. UTC | #4
On 7/16/21 4:48 AM, Miquel Raynal wrote:
> Hi Miaohe,
> 
> Miaohe Lin <linmiaohe@huawei.com> wrote on Fri, 16 Jul 2021 09:42:19
> +0800:
> 
>> On 2021/7/16 7:02, Miquel Raynal wrote:
>> > Hi Miaohe,
>> > 
>> > Miaohe Lin <linmiaohe@huawei.com> wrote on Thu, 8 Jul 2021 21:13:59
>> > +0800:
>> >   
>> >> From: Feilong Lin <linfeilong@huawei.com>
>> >>
>> >> The size in struct mtd_info_user is 32-bit, which will cause errors
>> >> when obtaining the size of large-capacity MTD devices, such as TLC
>> >> NAND FLASH-2048Gb.  
>> > 
>> > Besides the fact that such devices are far from being supported by the
>> > Linux kernel, this change would basically break userspace, it cannot
>> > enter as-is...
>> >   
>> 
>> I see. Many thanks for your reply! We're working with these large-capacity
>> MTD devices now, any suggestion to work around this?
> 
> The only way is to create a second UAPI.

Twelve years ago a patch was submitted to add a 64 bit MTD api:

  https://lwn.net/Articles/326418/

But for some reason they only merged 64 bit erase:

  https://github.com/torvalds/linux/commit/0dc54e9f33e2

But NOT the rest of the 64 bit mtd API in the same patch. I've never understood why.

Rob
Miaohe Lin July 17, 2021, 1:55 a.m. UTC | #5
On 2021/7/16 21:34, Rob Landley wrote:
> On 7/16/21 4:48 AM, Miquel Raynal wrote:
>> Hi Miaohe,
>>
>> Miaohe Lin <linmiaohe@huawei.com> wrote on Fri, 16 Jul 2021 09:42:19
>> +0800:
>>
>>> On 2021/7/16 7:02, Miquel Raynal wrote:
>>>> Hi Miaohe,
>>>>
>>>> Miaohe Lin <linmiaohe@huawei.com> wrote on Thu, 8 Jul 2021 21:13:59
>>>> +0800:
>>>>   
>>>>> From: Feilong Lin <linfeilong@huawei.com>
>>>>>
>>>>> The size in struct mtd_info_user is 32-bit, which will cause errors
>>>>> when obtaining the size of large-capacity MTD devices, such as TLC
>>>>> NAND FLASH-2048Gb.  
>>>>
>>>> Besides the fact that such devices are far from being supported by the
>>>> Linux kernel, this change would basically break userspace, it cannot
>>>> enter as-is...
>>>>   
>>>
>>> I see. Many thanks for your reply! We're working with these large-capacity
>>> MTD devices now, any suggestion to work around this?
>>
>> The only way is to create a second UAPI.
> 
> Twelve years ago a patch was submitted to add a 64 bit MTD api:
> 
>   https://lwn.net/Articles/326418/
> 
> But for some reason they only merged 64 bit erase:
> 
>   https://github.com/torvalds/linux/commit/0dc54e9f33e2
> 
> But NOT the rest of the 64 bit mtd API in the same patch. I've never understood why.
> 
> Rob
> .
> 

Many thanks for both of you! This really helps! :)
Rob Landley July 22, 2021, 8:47 a.m. UTC | #6
On 7/16/21 8:34 AM, Rob Landley wrote:
>> The only way is to create a second UAPI.
> 
> Twelve years ago a patch was submitted to add a 64 bit MTD api:
> 
>   https://lwn.net/Articles/326418/
> 
> But for some reason they only merged 64 bit erase:
> 
>   https://github.com/torvalds/linux/commit/0dc54e9f33e2
> 
> But NOT the rest of the 64 bit mtd API in the same patch. I've never understood why.

That said, the workaround is to use the info api for erase size and use
lseek(SEEK_END) on the device to get the length.

Rob
diff mbox series

Patch

diff --git a/include/uapi/mtd/mtd-abi.h b/include/uapi/mtd/mtd-abi.h
index b869990c2db2..efe0b53b10c1 100644
--- a/include/uapi/mtd/mtd-abi.h
+++ b/include/uapi/mtd/mtd-abi.h
@@ -128,7 +128,7 @@  struct mtd_write_req {
 struct mtd_info_user {
 	__u8 type;
 	__u32 flags;
-	__u32 size;	/* Total size of the MTD */
+	__u64 size;	/* Total size of the MTD */
 	__u32 erasesize;
 	__u32 writesize;
 	__u32 oobsize;	/* Amount of OOB data per block (e.g. 16) */