2021-07-08 13:15:57

by Miaohe Lin

[permalink] [raw]
Subject: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

From: Feilong Lin <[email protected]>

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 <[email protected]>
---
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) */
--
2.23.0


2021-07-15 23:04:32

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

Hi Miaohe,

Miaohe Lin <[email protected]> wrote on Thu, 8 Jul 2021 21:13:59
+0800:

> From: Feilong Lin <[email protected]>
>
> 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 <[email protected]>
> ---
> 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

2021-07-16 01:43:59

by Miaohe Lin

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

On 2021/7/16 7:02, Miquel Raynal wrote:
> Hi Miaohe,
>
> Miaohe Lin <[email protected]> wrote on Thu, 8 Jul 2021 21:13:59
> +0800:
>
>> From: Feilong Lin <[email protected]>
>>
>> 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 <[email protected]>
>> ---
>> 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
> .
>

2021-07-16 09:51:46

by Miquel Raynal

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

Hi Miaohe,

Miaohe Lin <[email protected]> wrote on Fri, 16 Jul 2021 09:42:19
+0800:

> On 2021/7/16 7:02, Miquel Raynal wrote:
> > Hi Miaohe,
> >
> > Miaohe Lin <[email protected]> wrote on Thu, 8 Jul 2021 21:13:59
> > +0800:
> >
> >> From: Feilong Lin <[email protected]>
> >>
> >> 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

2021-07-16 13:18:43

by Rob Landley

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

On 7/16/21 4:48 AM, Miquel Raynal wrote:
> Hi Miaohe,
>
> Miaohe Lin <[email protected]> wrote on Fri, 16 Jul 2021 09:42:19
> +0800:
>
>> On 2021/7/16 7:02, Miquel Raynal wrote:
>> > Hi Miaohe,
>> >
>> > Miaohe Lin <[email protected]> wrote on Thu, 8 Jul 2021 21:13:59
>> > +0800:
>> >
>> >> From: Feilong Lin <[email protected]>
>> >>
>> >> 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

2021-07-17 01:57:34

by Miaohe Lin

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

On 2021/7/16 21:34, Rob Landley wrote:
> On 7/16/21 4:48 AM, Miquel Raynal wrote:
>> Hi Miaohe,
>>
>> Miaohe Lin <[email protected]> wrote on Fri, 16 Jul 2021 09:42:19
>> +0800:
>>
>>> On 2021/7/16 7:02, Miquel Raynal wrote:
>>>> Hi Miaohe,
>>>>
>>>> Miaohe Lin <[email protected]> wrote on Thu, 8 Jul 2021 21:13:59
>>>> +0800:
>>>>
>>>>> From: Feilong Lin <[email protected]>
>>>>>
>>>>> 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! :)

2021-07-22 08:31:45

by Rob Landley

[permalink] [raw]
Subject: Re: [PATCH] mtd: fix size in mtd_info_user to support 64-bit

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