On 04/16, Park Ju Hyung wrote:
> Commit 595fd57a4fd3 ("f2fs-tools: get kernel version via uname(2)")
> introduced support for reading kernel version without /proc/version's
> presence but improperly wrapped an #ifdef macro for Android, causing
> f2fs-tools usage on every Android devices to display
> "Info: No support kernel version!".
> 
> Fix this by properly wrapping the problematic #ifdef macro.
> 
> Also remove 'c.kd = -2' as it will be set to -1 upon open(2) failure
> and the rest of the source code isn't doing anything special with
> 'kd == -2'.
> 
> Additionally, show the message when uname(2) also fails from
> get_kernel_uname_version().
> 
> Signed-off-by: Park Ju Hyung <[email protected]>
> ---
>  lib/libf2fs.c | 28 ++++++++++++----------------
>  1 file changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/lib/libf2fs.c b/lib/libf2fs.c
> index 60b84e0..61fc7ec 100644
> --- a/lib/libf2fs.c
> +++ b/lib/libf2fs.c
> @@ -751,23 +751,23 @@ void get_kernel_version(__u8 *version)
>  
>  void get_kernel_uname_version(__u8 *version)
>  {
> +     memset(version, 0, VERSION_LEN);
> +
>  #ifdef HAVE_SYS_UTSNAME_H
>       struct utsname buf;
>  
> -     memset(version, 0, VERSION_LEN);
> -     if (uname(&buf))
> -             return;
> -
> +     if (uname(&buf) == 0) {
>  #if !defined(WITH_KERNEL_VERSION)
> -     snprintf((char *)version,
> -             VERSION_LEN, "%s %s", buf.release, buf.version);
> +             snprintf((char *)version,
> +                     VERSION_LEN, "%s %s", buf.release, buf.version);
>  #else
> -     snprintf((char *)version,
> -             VERSION_LEN, "%s", buf.release);
> +             snprintf((char *)version,
> +                     VERSION_LEN, "%s", buf.release);
>  #endif
> -#else
> -     memset(version, 0, VERSION_LEN);
> +     }
>  #endif
> +
> +     MSG(0, "\tInfo: Unable to get the kernel version!\n");
>  }
>  
>  #if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
> @@ -845,15 +845,11 @@ int get_device_info(int i)
>               }
>       }
>  
> -     if (c.kd == -1) {
>  #if !defined(WITH_ANDROID) && defined(__linux__)
> +     // If this fails, we'll retry with get_kernel_uname_version()
> +     if (c.kd == -1)
>               c.kd = open("/proc/version", O_RDONLY);
>  #endif
> -             if (c.kd < 0) {
> -                     MSG(0, "\tInfo: No support kernel version!\n");
> -                     c.kd = -2;

If there are multiple devices, we don't need to get the version redundantly.

> -             }
> -     }
>  
>       if (c.sparse_mode) {
>               dev->total_sectors = c.device_size / dev->sector_size;
> -- 
> 2.21.0
> 
> 
> 
> _______________________________________________
> Linux-f2fs-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to