提交 ad204488 编写于 作者: M Miklos Szeredi

ovl: rename ufs to ofs

Rename all "struct ovl_fs" pointers to "ofs".  The "ufs" name is historical
and can only be found in overlayfs/super.c.
Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
上级 4155c10a
...@@ -211,30 +211,30 @@ static void ovl_destroy_inode(struct inode *inode) ...@@ -211,30 +211,30 @@ static void ovl_destroy_inode(struct inode *inode)
call_rcu(&inode->i_rcu, ovl_i_callback); call_rcu(&inode->i_rcu, ovl_i_callback);
} }
static void ovl_free_fs(struct ovl_fs *ufs) static void ovl_free_fs(struct ovl_fs *ofs)
{ {
unsigned i; unsigned i;
dput(ufs->indexdir); dput(ofs->indexdir);
dput(ufs->workdir); dput(ofs->workdir);
if (ufs->workdir_locked) if (ofs->workdir_locked)
ovl_inuse_unlock(ufs->workbasedir); ovl_inuse_unlock(ofs->workbasedir);
dput(ufs->workbasedir); dput(ofs->workbasedir);
if (ufs->upperdir_locked) if (ofs->upperdir_locked)
ovl_inuse_unlock(ufs->upper_mnt->mnt_root); ovl_inuse_unlock(ofs->upper_mnt->mnt_root);
mntput(ufs->upper_mnt); mntput(ofs->upper_mnt);
for (i = 0; i < ufs->numlower; i++) { for (i = 0; i < ofs->numlower; i++) {
mntput(ufs->lower_layers[i].mnt); mntput(ofs->lower_layers[i].mnt);
free_anon_bdev(ufs->lower_layers[i].pseudo_dev); free_anon_bdev(ofs->lower_layers[i].pseudo_dev);
} }
kfree(ufs->lower_layers); kfree(ofs->lower_layers);
kfree(ufs->config.lowerdir); kfree(ofs->config.lowerdir);
kfree(ufs->config.upperdir); kfree(ofs->config.upperdir);
kfree(ufs->config.workdir); kfree(ofs->config.workdir);
if (ufs->creator_cred) if (ofs->creator_cred)
put_cred(ufs->creator_cred); put_cred(ofs->creator_cred);
kfree(ufs); kfree(ofs);
} }
static void ovl_put_super(struct super_block *sb) static void ovl_put_super(struct super_block *sb)
...@@ -246,13 +246,13 @@ static void ovl_put_super(struct super_block *sb) ...@@ -246,13 +246,13 @@ static void ovl_put_super(struct super_block *sb)
static int ovl_sync_fs(struct super_block *sb, int wait) static int ovl_sync_fs(struct super_block *sb, int wait)
{ {
struct ovl_fs *ufs = sb->s_fs_info; struct ovl_fs *ofs = sb->s_fs_info;
struct super_block *upper_sb; struct super_block *upper_sb;
int ret; int ret;
if (!ufs->upper_mnt) if (!ofs->upper_mnt)
return 0; return 0;
upper_sb = ufs->upper_mnt->mnt_sb; upper_sb = ofs->upper_mnt->mnt_sb;
if (!upper_sb->s_op->sync_fs) if (!upper_sb->s_op->sync_fs)
return 0; return 0;
...@@ -290,9 +290,9 @@ static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -290,9 +290,9 @@ static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf)
} }
/* Will this overlay be forced to mount/remount ro? */ /* Will this overlay be forced to mount/remount ro? */
static bool ovl_force_readonly(struct ovl_fs *ufs) static bool ovl_force_readonly(struct ovl_fs *ofs)
{ {
return (!ufs->upper_mnt || !ufs->workdir); return (!ofs->upper_mnt || !ofs->workdir);
} }
/** /**
...@@ -304,29 +304,29 @@ static bool ovl_force_readonly(struct ovl_fs *ufs) ...@@ -304,29 +304,29 @@ static bool ovl_force_readonly(struct ovl_fs *ufs)
static int ovl_show_options(struct seq_file *m, struct dentry *dentry) static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
{ {
struct super_block *sb = dentry->d_sb; struct super_block *sb = dentry->d_sb;
struct ovl_fs *ufs = sb->s_fs_info; struct ovl_fs *ofs = sb->s_fs_info;
seq_show_option(m, "lowerdir", ufs->config.lowerdir); seq_show_option(m, "lowerdir", ofs->config.lowerdir);
if (ufs->config.upperdir) { if (ofs->config.upperdir) {
seq_show_option(m, "upperdir", ufs->config.upperdir); seq_show_option(m, "upperdir", ofs->config.upperdir);
seq_show_option(m, "workdir", ufs->config.workdir); seq_show_option(m, "workdir", ofs->config.workdir);
} }
if (ufs->config.default_permissions) if (ofs->config.default_permissions)
seq_puts(m, ",default_permissions"); seq_puts(m, ",default_permissions");
if (ufs->config.redirect_dir != ovl_redirect_dir_def) if (ofs->config.redirect_dir != ovl_redirect_dir_def)
seq_printf(m, ",redirect_dir=%s", seq_printf(m, ",redirect_dir=%s",
ufs->config.redirect_dir ? "on" : "off"); ofs->config.redirect_dir ? "on" : "off");
if (ufs->config.index != ovl_index_def) if (ofs->config.index != ovl_index_def)
seq_printf(m, ",index=%s", seq_printf(m, ",index=%s",
ufs->config.index ? "on" : "off"); ofs->config.index ? "on" : "off");
return 0; return 0;
} }
static int ovl_remount(struct super_block *sb, int *flags, char *data) static int ovl_remount(struct super_block *sb, int *flags, char *data)
{ {
struct ovl_fs *ufs = sb->s_fs_info; struct ovl_fs *ofs = sb->s_fs_info;
if (!(*flags & MS_RDONLY) && ovl_force_readonly(ufs)) if (!(*flags & MS_RDONLY) && ovl_force_readonly(ofs))
return -EROFS; return -EROFS;
return 0; return 0;
...@@ -464,11 +464,11 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config) ...@@ -464,11 +464,11 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config)
#define OVL_WORKDIR_NAME "work" #define OVL_WORKDIR_NAME "work"
#define OVL_INDEXDIR_NAME "index" #define OVL_INDEXDIR_NAME "index"
static struct dentry *ovl_workdir_create(struct ovl_fs *ufs, static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
const char *name, bool persist) const char *name, bool persist)
{ {
struct inode *dir = ufs->workbasedir->d_inode; struct inode *dir = ofs->workbasedir->d_inode;
struct vfsmount *mnt = ufs->upper_mnt; struct vfsmount *mnt = ofs->upper_mnt;
struct dentry *work; struct dentry *work;
int err; int err;
bool retried = false; bool retried = false;
...@@ -482,7 +482,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ufs, ...@@ -482,7 +482,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ufs,
locked = true; locked = true;
retry: retry:
work = lookup_one_len(name, ufs->workbasedir, strlen(name)); work = lookup_one_len(name, ofs->workbasedir, strlen(name));
if (!IS_ERR(work)) { if (!IS_ERR(work)) {
struct iattr attr = { struct iattr attr = {
...@@ -552,7 +552,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ufs, ...@@ -552,7 +552,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ufs,
dput(work); dput(work);
out_err: out_err:
pr_warn("overlayfs: failed to create directory %s/%s (errno: %i); mounting read-only\n", pr_warn("overlayfs: failed to create directory %s/%s (errno: %i); mounting read-only\n",
ufs->config.workdir, name, -err); ofs->config.workdir, name, -err);
work = NULL; work = NULL;
goto out_unlock; goto out_unlock;
} }
...@@ -836,12 +836,12 @@ static const struct xattr_handler *ovl_xattr_handlers[] = { ...@@ -836,12 +836,12 @@ static const struct xattr_handler *ovl_xattr_handlers[] = {
NULL NULL
}; };
static int ovl_get_upper(struct ovl_fs *ufs, struct path *upperpath) static int ovl_get_upper(struct ovl_fs *ofs, struct path *upperpath)
{ {
struct vfsmount *upper_mnt; struct vfsmount *upper_mnt;
int err; int err;
err = ovl_mount_dir(ufs->config.upperdir, upperpath); err = ovl_mount_dir(ofs->config.upperdir, upperpath);
if (err) if (err)
goto out; goto out;
...@@ -852,14 +852,14 @@ static int ovl_get_upper(struct ovl_fs *ufs, struct path *upperpath) ...@@ -852,14 +852,14 @@ static int ovl_get_upper(struct ovl_fs *ufs, struct path *upperpath)
goto out; goto out;
} }
err = ovl_check_namelen(upperpath, ufs, ufs->config.upperdir); err = ovl_check_namelen(upperpath, ofs, ofs->config.upperdir);
if (err) if (err)
goto out; goto out;
err = -EBUSY; err = -EBUSY;
if (ovl_inuse_trylock(upperpath->dentry)) { if (ovl_inuse_trylock(upperpath->dentry)) {
ufs->upperdir_locked = true; ofs->upperdir_locked = true;
} else if (ufs->config.index) { } else if (ofs->config.index) {
pr_err("overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection.\n"); pr_err("overlayfs: upperdir is in-use by another mount, mount with '-o index=off' to override exclusive upperdir protection.\n");
goto out; goto out;
} else { } else {
...@@ -875,19 +875,19 @@ static int ovl_get_upper(struct ovl_fs *ufs, struct path *upperpath) ...@@ -875,19 +875,19 @@ static int ovl_get_upper(struct ovl_fs *ufs, struct path *upperpath)
/* Don't inherit atime flags */ /* Don't inherit atime flags */
upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME); upper_mnt->mnt_flags &= ~(MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME);
ufs->upper_mnt = upper_mnt; ofs->upper_mnt = upper_mnt;
err = 0; err = 0;
out: out:
return err; return err;
} }
static int ovl_make_workdir(struct ovl_fs *ufs, struct path *workpath) static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
{ {
struct dentry *temp; struct dentry *temp;
int err; int err;
ufs->workdir = ovl_workdir_create(ufs, OVL_WORKDIR_NAME, false); ofs->workdir = ovl_workdir_create(ofs, OVL_WORKDIR_NAME, false);
if (!ufs->workdir) if (!ofs->workdir)
return 0; return 0;
/* /*
...@@ -908,9 +908,9 @@ static int ovl_make_workdir(struct ovl_fs *ufs, struct path *workpath) ...@@ -908,9 +908,9 @@ static int ovl_make_workdir(struct ovl_fs *ufs, struct path *workpath)
pr_warn("overlayfs: upper fs needs to support d_type.\n"); pr_warn("overlayfs: upper fs needs to support d_type.\n");
/* Check if upper/work fs supports O_TMPFILE */ /* Check if upper/work fs supports O_TMPFILE */
temp = ovl_do_tmpfile(ufs->workdir, S_IFREG | 0); temp = ovl_do_tmpfile(ofs->workdir, S_IFREG | 0);
ufs->tmpfile = !IS_ERR(temp); ofs->tmpfile = !IS_ERR(temp);
if (ufs->tmpfile) if (ofs->tmpfile)
dput(temp); dput(temp);
else else
pr_warn("overlayfs: upper fs does not support tmpfile.\n"); pr_warn("overlayfs: upper fs does not support tmpfile.\n");
...@@ -918,30 +918,30 @@ static int ovl_make_workdir(struct ovl_fs *ufs, struct path *workpath) ...@@ -918,30 +918,30 @@ static int ovl_make_workdir(struct ovl_fs *ufs, struct path *workpath)
/* /*
* Check if upper/work fs supports trusted.overlay.* xattr * Check if upper/work fs supports trusted.overlay.* xattr
*/ */
err = ovl_do_setxattr(ufs->workdir, OVL_XATTR_OPAQUE, "0", 1, 0); err = ovl_do_setxattr(ofs->workdir, OVL_XATTR_OPAQUE, "0", 1, 0);
if (err) { if (err) {
ufs->noxattr = true; ofs->noxattr = true;
pr_warn("overlayfs: upper fs does not support xattr.\n"); pr_warn("overlayfs: upper fs does not support xattr.\n");
} else { } else {
vfs_removexattr(ufs->workdir, OVL_XATTR_OPAQUE); vfs_removexattr(ofs->workdir, OVL_XATTR_OPAQUE);
} }
/* Check if upper/work fs supports file handles */ /* Check if upper/work fs supports file handles */
if (ufs->config.index && if (ofs->config.index &&
!ovl_can_decode_fh(ufs->workdir->d_sb)) { !ovl_can_decode_fh(ofs->workdir->d_sb)) {
ufs->config.index = false; ofs->config.index = false;
pr_warn("overlayfs: upper fs does not support file handles, falling back to index=off.\n"); pr_warn("overlayfs: upper fs does not support file handles, falling back to index=off.\n");
} }
return 0; return 0;
} }
static int ovl_get_workdir(struct ovl_fs *ufs, struct path *upperpath) static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
{ {
int err; int err;
struct path workpath = { }; struct path workpath = { };
err = ovl_mount_dir(ufs->config.workdir, &workpath); err = ovl_mount_dir(ofs->config.workdir, &workpath);
if (err) if (err)
goto out; goto out;
...@@ -957,16 +957,16 @@ static int ovl_get_workdir(struct ovl_fs *ufs, struct path *upperpath) ...@@ -957,16 +957,16 @@ static int ovl_get_workdir(struct ovl_fs *ufs, struct path *upperpath)
err = -EBUSY; err = -EBUSY;
if (ovl_inuse_trylock(workpath.dentry)) { if (ovl_inuse_trylock(workpath.dentry)) {
ufs->workdir_locked = true; ofs->workdir_locked = true;
} else if (ufs->config.index) { } else if (ofs->config.index) {
pr_err("overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.\n"); pr_err("overlayfs: workdir is in-use by another mount, mount with '-o index=off' to override exclusive workdir protection.\n");
goto out; goto out;
} else { } else {
pr_warn("overlayfs: workdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n"); pr_warn("overlayfs: workdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
} }
ufs->workbasedir = dget(workpath.dentry); ofs->workbasedir = dget(workpath.dentry);
err = ovl_make_workdir(ufs, &workpath); err = ovl_make_workdir(ofs, &workpath);
if (err) if (err)
goto out; goto out;
...@@ -977,7 +977,7 @@ static int ovl_get_workdir(struct ovl_fs *ufs, struct path *upperpath) ...@@ -977,7 +977,7 @@ static int ovl_get_workdir(struct ovl_fs *ufs, struct path *upperpath)
return err; return err;
} }
static int ovl_get_indexdir(struct ovl_fs *ufs, struct ovl_entry *oe, static int ovl_get_indexdir(struct ovl_fs *ofs, struct ovl_entry *oe,
struct path *upperpath) struct path *upperpath)
{ {
int err; int err;
...@@ -992,38 +992,38 @@ static int ovl_get_indexdir(struct ovl_fs *ufs, struct ovl_entry *oe, ...@@ -992,38 +992,38 @@ static int ovl_get_indexdir(struct ovl_fs *ufs, struct ovl_entry *oe,
goto out; goto out;
} }
ufs->indexdir = ovl_workdir_create(ufs, OVL_INDEXDIR_NAME, true); ofs->indexdir = ovl_workdir_create(ofs, OVL_INDEXDIR_NAME, true);
if (ufs->indexdir) { if (ofs->indexdir) {
/* Verify upper root is index dir origin */ /* Verify upper root is index dir origin */
err = ovl_verify_origin(ufs->indexdir, ufs->upper_mnt, err = ovl_verify_origin(ofs->indexdir, ofs->upper_mnt,
upperpath->dentry, true, true); upperpath->dentry, true, true);
if (err) if (err)
pr_err("overlayfs: failed to verify index dir origin\n"); pr_err("overlayfs: failed to verify index dir origin\n");
/* Cleanup bad/stale/orphan index entries */ /* Cleanup bad/stale/orphan index entries */
if (!err) if (!err)
err = ovl_indexdir_cleanup(ufs->indexdir, err = ovl_indexdir_cleanup(ofs->indexdir,
ufs->upper_mnt, ofs->upper_mnt,
oe->lowerstack, oe->lowerstack,
oe->numlower); oe->numlower);
} }
if (err || !ufs->indexdir) if (err || !ofs->indexdir)
pr_warn("overlayfs: try deleting index dir or mounting with '-o index=off' to disable inodes index.\n"); pr_warn("overlayfs: try deleting index dir or mounting with '-o index=off' to disable inodes index.\n");
out: out:
return err; return err;
} }
static int ovl_get_lower_layers(struct ovl_fs *ufs, struct path *stack, static int ovl_get_lower_layers(struct ovl_fs *ofs, struct path *stack,
unsigned int numlower) unsigned int numlower)
{ {
int err; int err;
unsigned int i; unsigned int i;
err = -ENOMEM; err = -ENOMEM;
ufs->lower_layers = kcalloc(numlower, sizeof(struct ovl_layer), ofs->lower_layers = kcalloc(numlower, sizeof(struct ovl_layer),
GFP_KERNEL); GFP_KERNEL);
if (ufs->lower_layers == NULL) if (ofs->lower_layers == NULL)
goto out; goto out;
for (i = 0; i < numlower; i++) { for (i = 0; i < numlower; i++) {
struct vfsmount *mnt; struct vfsmount *mnt;
...@@ -1048,15 +1048,15 @@ static int ovl_get_lower_layers(struct ovl_fs *ufs, struct path *stack, ...@@ -1048,15 +1048,15 @@ static int ovl_get_lower_layers(struct ovl_fs *ufs, struct path *stack,
*/ */
mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME; mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME;
ufs->lower_layers[ufs->numlower].mnt = mnt; ofs->lower_layers[ofs->numlower].mnt = mnt;
ufs->lower_layers[ufs->numlower].pseudo_dev = dev; ofs->lower_layers[ofs->numlower].pseudo_dev = dev;
ufs->numlower++; ofs->numlower++;
/* Check if all lower layers are on same sb */ /* Check if all lower layers are on same sb */
if (i == 0) if (i == 0)
ufs->same_sb = mnt->mnt_sb; ofs->same_sb = mnt->mnt_sb;
else if (ufs->same_sb != mnt->mnt_sb) else if (ofs->same_sb != mnt->mnt_sb)
ufs->same_sb = NULL; ofs->same_sb = NULL;
} }
err = 0; err = 0;
out: out:
...@@ -1064,7 +1064,7 @@ static int ovl_get_lower_layers(struct ovl_fs *ufs, struct path *stack, ...@@ -1064,7 +1064,7 @@ static int ovl_get_lower_layers(struct ovl_fs *ufs, struct path *stack,
} }
static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
struct ovl_fs *ufs) struct ovl_fs *ofs)
{ {
int err; int err;
char *lowertmp, *lower; char *lowertmp, *lower;
...@@ -1074,7 +1074,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, ...@@ -1074,7 +1074,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
struct ovl_entry *oe; struct ovl_entry *oe;
err = -ENOMEM; err = -ENOMEM;
lowertmp = kstrdup(ufs->config.lowerdir, GFP_KERNEL); lowertmp = kstrdup(ofs->config.lowerdir, GFP_KERNEL);
if (!lowertmp) if (!lowertmp)
goto out_err; goto out_err;
...@@ -1084,7 +1084,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, ...@@ -1084,7 +1084,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
pr_err("overlayfs: too many lower directories, limit is %d\n", pr_err("overlayfs: too many lower directories, limit is %d\n",
OVL_MAX_STACK); OVL_MAX_STACK);
goto out_err; goto out_err;
} else if (!ufs->config.upperdir && stacklen == 1) { } else if (!ofs->config.upperdir && stacklen == 1) {
pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n"); pr_err("overlayfs: at least 2 lowerdir are needed while upperdir nonexistent\n");
goto out_err; goto out_err;
} }
...@@ -1097,7 +1097,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, ...@@ -1097,7 +1097,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
err = -EINVAL; err = -EINVAL;
lower = lowertmp; lower = lowertmp;
for (numlower = 0; numlower < stacklen; numlower++) { for (numlower = 0; numlower < stacklen; numlower++) {
err = ovl_lower_dir(lower, &stack[numlower], ufs, err = ovl_lower_dir(lower, &stack[numlower], ofs,
&sb->s_stack_depth, &remote); &sb->s_stack_depth, &remote);
if (err) if (err)
goto out_err; goto out_err;
...@@ -1112,7 +1112,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, ...@@ -1112,7 +1112,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
goto out_err; goto out_err;
} }
err = ovl_get_lower_layers(ufs, stack, numlower); err = ovl_get_lower_layers(ofs, stack, numlower);
if (err) if (err)
goto out_err; goto out_err;
...@@ -1123,7 +1123,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb, ...@@ -1123,7 +1123,7 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
for (i = 0; i < numlower; i++) { for (i = 0; i < numlower; i++) {
oe->lowerstack[i].dentry = dget(stack[i].dentry); oe->lowerstack[i].dentry = dget(stack[i].dentry);
oe->lowerstack[i].layer = &ufs->lower_layers[i]; oe->lowerstack[i].layer = &ofs->lower_layers[i];
} }
if (remote) if (remote)
...@@ -1149,27 +1149,27 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1149,27 +1149,27 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
struct path upperpath = { }; struct path upperpath = { };
struct dentry *root_dentry; struct dentry *root_dentry;
struct ovl_entry *oe; struct ovl_entry *oe;
struct ovl_fs *ufs; struct ovl_fs *ofs;
struct cred *cred; struct cred *cred;
int err; int err;
err = -ENOMEM; err = -ENOMEM;
ufs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL); ofs = kzalloc(sizeof(struct ovl_fs), GFP_KERNEL);
if (!ufs) if (!ofs)
goto out; goto out;
ufs->creator_cred = cred = prepare_creds(); ofs->creator_cred = cred = prepare_creds();
if (!cred) if (!cred)
goto out_err; goto out_err;
ufs->config.redirect_dir = ovl_redirect_dir_def; ofs->config.redirect_dir = ovl_redirect_dir_def;
ufs->config.index = ovl_index_def; ofs->config.index = ovl_index_def;
err = ovl_parse_opt((char *) data, &ufs->config); err = ovl_parse_opt((char *) data, &ofs->config);
if (err) if (err)
goto out_err; goto out_err;
err = -EINVAL; err = -EINVAL;
if (!ufs->config.lowerdir) { if (!ofs->config.lowerdir) {
if (!silent) if (!silent)
pr_err("overlayfs: missing 'lowerdir'\n"); pr_err("overlayfs: missing 'lowerdir'\n");
goto out_err; goto out_err;
...@@ -1177,50 +1177,50 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1177,50 +1177,50 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
sb->s_stack_depth = 0; sb->s_stack_depth = 0;
sb->s_maxbytes = MAX_LFS_FILESIZE; sb->s_maxbytes = MAX_LFS_FILESIZE;
if (ufs->config.upperdir) { if (ofs->config.upperdir) {
if (!ufs->config.workdir) { if (!ofs->config.workdir) {
pr_err("overlayfs: missing 'workdir'\n"); pr_err("overlayfs: missing 'workdir'\n");
goto out_err; goto out_err;
} }
err = ovl_get_upper(ufs, &upperpath); err = ovl_get_upper(ofs, &upperpath);
if (err) if (err)
goto out_err; goto out_err;
err = ovl_get_workdir(ufs, &upperpath); err = ovl_get_workdir(ofs, &upperpath);
if (err) if (err)
goto out_err; goto out_err;
if (!ufs->workdir) if (!ofs->workdir)
sb->s_flags |= MS_RDONLY; sb->s_flags |= MS_RDONLY;
sb->s_stack_depth = ufs->upper_mnt->mnt_sb->s_stack_depth; sb->s_stack_depth = ofs->upper_mnt->mnt_sb->s_stack_depth;
sb->s_time_gran = ufs->upper_mnt->mnt_sb->s_time_gran; sb->s_time_gran = ofs->upper_mnt->mnt_sb->s_time_gran;
} }
oe = ovl_get_lowerstack(sb, ufs); oe = ovl_get_lowerstack(sb, ofs);
err = PTR_ERR(oe); err = PTR_ERR(oe);
if (IS_ERR(oe)) if (IS_ERR(oe))
goto out_err; goto out_err;
/* If the upper fs is nonexistent, we mark overlayfs r/o too */ /* If the upper fs is nonexistent, we mark overlayfs r/o too */
if (!ufs->upper_mnt) if (!ofs->upper_mnt)
sb->s_flags |= MS_RDONLY; sb->s_flags |= MS_RDONLY;
else if (ufs->upper_mnt->mnt_sb != ufs->same_sb) else if (ofs->upper_mnt->mnt_sb != ofs->same_sb)
ufs->same_sb = NULL; ofs->same_sb = NULL;
if (!(ovl_force_readonly(ufs)) && ufs->config.index) { if (!(ovl_force_readonly(ofs)) && ofs->config.index) {
err = ovl_get_indexdir(ufs, oe, &upperpath); err = ovl_get_indexdir(ofs, oe, &upperpath);
if (err) if (err)
goto out_free_oe; goto out_free_oe;
if (!ufs->indexdir) if (!ofs->indexdir)
sb->s_flags |= MS_RDONLY; sb->s_flags |= MS_RDONLY;
} }
/* Show index=off/on in /proc/mounts for any of the reasons above */ /* Show index=off/on in /proc/mounts for any of the reasons above */
if (!ufs->indexdir) if (!ofs->indexdir)
ufs->config.index = false; ofs->config.index = false;
/* Never override disk quota limits or use reserved space */ /* Never override disk quota limits or use reserved space */
cap_lower(cred->cap_effective, CAP_SYS_RESOURCE); cap_lower(cred->cap_effective, CAP_SYS_RESOURCE);
...@@ -1228,7 +1228,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1228,7 +1228,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
sb->s_magic = OVERLAYFS_SUPER_MAGIC; sb->s_magic = OVERLAYFS_SUPER_MAGIC;
sb->s_op = &ovl_super_operations; sb->s_op = &ovl_super_operations;
sb->s_xattr = ovl_xattr_handlers; sb->s_xattr = ovl_xattr_handlers;
sb->s_fs_info = ufs; sb->s_fs_info = ofs;
sb->s_flags |= MS_POSIXACL | MS_NOREMOTELOCK; sb->s_flags |= MS_POSIXACL | MS_NOREMOTELOCK;
err = -ENOMEM; err = -ENOMEM;
...@@ -1259,7 +1259,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1259,7 +1259,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
kfree(oe); kfree(oe);
out_err: out_err:
path_put(&upperpath); path_put(&upperpath);
ovl_free_fs(ufs); ovl_free_fs(ofs);
out: out:
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册