With this patch the one problem with opening the device in RO mode is fixed.
But as far as I can understand it will still only check the fs, not fix it.


2019-04-21 12:27 GMT+02:00, Jaegeuk Kim <jaeg...@kernel.org>:

>
> New version of the patch is:
>
> From 3221692b060649378f1f69b898ed85a814af3dbf Mon Sep 17 00:00:00 2001
> From: Jaegeuk Kim <jaeg...@kernel.org>
> Date: Tue, 16 Apr 2019 11:46:31 -0700
> Subject: [PATCH] fsck.f2fs: open ro disk if we want to check fs only
>
> This patch fixes the "open failure" issue on ro disk, reported by Hagbard.
>
> "
>  If I boot with kernel option "ro rootfstype=f2fs
>  I get the following halfway trough boot:
>
>   * Checking local filesystems  ...
>  Info: Use default preen mode
>  Info: Mounted device!
>  Info: Check FS only due to RO
>          Error: Failed to open the device!
>   * Filesystems couldn't be fixed
> "
>
> Reported-by: Hagbard Celine <hagbardce...@gmail.com>
> Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org>
> ---
>  lib/libf2fs.c | 25 +++++++++++++++++++++----
>  1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/lib/libf2fs.c b/lib/libf2fs.c
> index d30047f..853e713 100644
> --- a/lib/libf2fs.c
> +++ b/lib/libf2fs.c
> @@ -789,6 +789,15 @@ void get_kernel_uname_version(__u8 *version)
>  #endif /* APPLE_DARWIN */
>
>  #ifndef ANDROID_WINDOWS_HOST
> +static int open_check_fs(char *path, int flag)
> +{
> +     if (c.func != FSCK || c.fix_on || c.auto_fix)
> +             return -1;
> +
> +     /* allow to open ro */
> +     return open(path, O_RDONLY | flag);
> +}
> +
>  int get_device_info(int i)
>  {
>       int32_t fd = 0;
> @@ -810,8 +819,11 @@ int get_device_info(int i)
>       if (c.sparse_mode) {
>               fd = open(dev->path, O_RDWR | O_CREAT | O_BINARY, 0644);
>               if (fd < 0) {
> -                     MSG(0, "\tError: Failed to open a sparse file!\n");
> -                     return -1;
> +                     fd = open_check_fs(dev->path, O_BINARY);
> +                     if (fd < 0) {
> +                             MSG(0, "\tError: Failed to open a sparse 
> file!\n");
> +                             return -1;
> +                     }
>               }
>       }
>
> @@ -825,10 +837,15 @@ int get_device_info(int i)
>                       return -1;
>               }
>
> -             if (S_ISBLK(stat_buf->st_mode) && !c.force)
> +             if (S_ISBLK(stat_buf->st_mode) && !c.force) {
>                       fd = open(dev->path, O_RDWR | O_EXCL);
> -             else
> +                     if (fd < 0)
> +                             fd = open_check_fs(dev->path, O_EXCL);
> +             } else {
>                       fd = open(dev->path, O_RDWR);
> +                     if (fd < 0)
> +                             fd = open_check_fs(dev->path, 0);
> +             }
>       }
>       if (fd < 0) {
>               MSG(0, "\tError: Failed to open the device!\n");
> --
> 2.19.0.605.g01d371f741-goog
>
>


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to