All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gao Xiang <hsiangkao@redhat.com>
To: linux-erofs@lists.ozlabs.org, Yue Hu <zbestahu@gmail.com>,
	Huang Jianan <huangjianan@oppo.com>,
	Li Guifu <bluce.lee@aliyun.com>
Cc: Yue Hu <huyue2@yulong.com>
Subject: [PATCH v2] AOSP: erofs-utils: fix sub-directory prefix for canned fs_config
Date: Mon, 28 Dec 2020 18:51:46 +0800	[thread overview]
Message-ID: <20201228105146.2939914-1-hsiangkao@redhat.com> (raw)
In-Reply-To: <20201226062736.29920-1-hsiangkao@aol.com>

From: Gao Xiang <hsiangkao@aol.com>

"failed to find [%s] in canned fs_config" was observed by using
"--fs-config-file" option as reported by Yue Hu [1].

The root cause was that the mountpoint prefix to subdirectories is
also needed if "--mount-point" presents. However, such prefix cannot
be added by just using erofs_fspath().

One exception is that the root directory itself needs to be handled
specially for canned fs_config. For such case, the prefix of the root
directory has to be dropped instead.

[1] https://lkml.kernel.org/r/20201222020430.12512-1-zbestahu@gmail.com

Link: https://lore.kernel.org/r/20201226062736.29920-1-hsiangkao@aol.com
Fixes: 8a9e8046f170 ("AOSP: erofs-utils: add fs_config support")
Reported-by: Yue Hu <huyue2@yulong.com>
Signed-off-by: Gao Xiang <hsiangkao@aol.com>
---
changes since v2:
 - fix IS_ROOT misuse reported by Jianan, very sorry about this since
   I know little about canned fs_config.

(please kindly test again...)

 lib/inode.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/lib/inode.c b/lib/inode.c
index 0c4839d..e6159c9 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -696,32 +696,43 @@ int erofs_droid_inode_fsconfig(struct erofs_inode *inode,
 	/* filesystem_config does not preserve file type bits */
 	mode_t stat_file_type_mask = st->st_mode & S_IFMT;
 	unsigned int uid = 0, gid = 0, mode = 0;
-	char *fspath;
+	const char *fspath;
+	char *decorated = NULL;
 
 	inode->capabilities = 0;
+	if (!cfg.fs_config_file && !cfg.mount_point)
+		return 0;
+
+	if (!cfg.mount_point ||
+	/* have to drop the mountpoint for rootdir of canned fsconfig */
+	    (cfg.fs_config_file && erofs_fspath(path)[0] == '\0')) {
+		fspath = erofs_fspath(path);
+	} else {
+		if (asprintf(&decorated, "%s/%s", cfg.mount_point,
+			     erofs_fspath(path)) <= 0)
+			return -ENOMEM;
+		fspath = decorated;
+	}
+
 	if (cfg.fs_config_file)
-		canned_fs_config(erofs_fspath(path),
+		canned_fs_config(fspath,
 				 S_ISDIR(st->st_mode),
 				 cfg.target_out_path,
 				 &uid, &gid, &mode, &inode->capabilities);
-	else if (cfg.mount_point) {
-		if (asprintf(&fspath, "%s/%s", cfg.mount_point,
-			     erofs_fspath(path)) <= 0)
-			return -ENOMEM;
-
+	else
 		fs_config(fspath, S_ISDIR(st->st_mode),
 			  cfg.target_out_path,
 			  &uid, &gid, &mode, &inode->capabilities);
-		free(fspath);
-	}
-	st->st_uid = uid;
-	st->st_gid = gid;
-	st->st_mode = mode | stat_file_type_mask;
 
 	erofs_dbg("/%s -> mode = 0x%x, uid = 0x%x, gid = 0x%x, "
 		  "capabilities = 0x%" PRIx64 "\n",
-		  erofs_fspath(path),
-		  mode, uid, gid, inode->capabilities);
+		  fspath, mode, uid, gid, inode->capabilities);
+
+	if (decorated)
+		free(decorated);
+	st->st_uid = uid;
+	st->st_gid = gid;
+	st->st_mode = mode | stat_file_type_mask;
 	return 0;
 }
 #else
-- 
2.27.0


  parent reply	other threads:[~2020-12-28 10:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20201226062736.29920-1-hsiangkao.ref@aol.com>
2020-12-26  6:27 ` [PATCH] AOSP: erofs-utils: fix sub-directory prefix for canned fs_config Gao Xiang via Linux-erofs
2020-12-28  7:05   ` Yue Hu
2020-12-28 10:03   ` Huang Jianan
2020-12-28 10:48     ` Gao Xiang
2020-12-28 10:51   ` Gao Xiang [this message]
2020-12-28 11:14     ` [PATCH v2] " Huang Jianan
2020-12-28 11:20     ` Yue Hu
2020-12-28 11:32       ` Gao Xiang
2020-12-28 11:39         ` Yue Hu
2020-12-28 11:46     ` Yue Hu
2020-12-28 12:43       ` Gao Xiang
2020-12-31 16:31     ` Li GuiFu via Linux-erofs
2020-12-31 16:50       ` Gao Xiang
2020-12-31 16:46     ` Li GuiFu via Linux-erofs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201228105146.2939914-1-hsiangkao@redhat.com \
    --to=hsiangkao@redhat.com \
    --cc=bluce.lee@aliyun.com \
    --cc=huangjianan@oppo.com \
    --cc=huyue2@yulong.com \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=zbestahu@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.