@@ -2290,39 +2290,15 @@ static int ext4_parse_param(struct fs_context *fc, struct fs_parameter *param)
ctx->spec |= EXT4_SPEC_s_resgid;
return 0;
case Opt_journal_dev:
- if (is_remount) {
- ext4_msg(NULL, KERN_ERR,
- "Cannot specify journal on remount");
- return -EINVAL;
- }
- ctx->journal_devnum = result.uint_32;
- ctx->spec |= EXT4_SPEC_JOURNAL_DEV;
- return 0;
case Opt_journal_path:
- {
- struct inode *journal_inode;
- struct path path;
- int error;
-
if (is_remount) {
ext4_msg(NULL, KERN_ERR,
"Cannot specify journal on remount");
return -EINVAL;
}
-
- error = fs_lookup_param(fc, param, 1, LOOKUP_FOLLOW, &path);
- if (error) {
- ext4_msg(NULL, KERN_ERR, "error: could not find "
- "journal device path");
- return -EINVAL;
- }
-
- journal_inode = d_inode(path.dentry);
- ctx->journal_devnum = new_encode_dev(journal_inode->i_rdev);
+ ctx->journal_devnum = result.uint_32;
ctx->spec |= EXT4_SPEC_JOURNAL_DEV;
- path_put(&path);
return 0;
- }
case Opt_journal_ioprio:
if (result.uint_32 > 7) {
ext4_msg(NULL, KERN_ERR, "Invalid journal IO priority"
After `fs_param_is_blockdev` is implemented(in fs: add blockdev parser for filesystem mount option.), `journal_devnum` can be obtained from `result.uint_32` directly. Additionally, the `fs_lookup_param` did not consider the relative path for block device. When we mount ext4 with `journal_path` option using relative path, `param->dirfd` was not set which will cause mounting error. This can be reproduced easily like this: mke2fs -F -O journal_dev $JOURNAL_DEV -b 4096 100M mkfs.ext4 -F -J device=$JOURNAL_DEV -b 4096 $FS_DEV cd /dev; mount -t ext4 -o journal_path=`basename $JOURNAL_DEV` $FS_DEV $MNT Fixes: 461c3af045d3 ("ext4: Change handle_mount_opt() to use fs_parameter") Signed-off-by: Hongbo Li <lihongbo22@huawei.com> --- fs/ext4/super.c | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-)