Commit 08f4c7c8 authored by Miklos Szeredi's avatar Miklos Szeredi

ovl: add accessor for ofs->upper_mnt

Next patch will remove ofs->upper_mnt, so add an accessor function for this
field.
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 520da69d
...@@ -204,7 +204,7 @@ static int ovl_check_encode_origin(struct dentry *dentry) ...@@ -204,7 +204,7 @@ static int ovl_check_encode_origin(struct dentry *dentry)
* ovl_connect_layer() will try to make origin's layer "connected" by * ovl_connect_layer() will try to make origin's layer "connected" by
* copying up a "connectable" ancestor. * copying up a "connectable" ancestor.
*/ */
if (d_is_dir(dentry) && ofs->upper_mnt) if (d_is_dir(dentry) && ovl_upper_mnt(ofs))
return ovl_connect_layer(dentry); return ovl_connect_layer(dentry);
/* Lower file handle for indexed and non-upper dir/non-dir */ /* Lower file handle for indexed and non-upper dir/non-dir */
...@@ -677,10 +677,10 @@ static struct dentry *ovl_upper_fh_to_d(struct super_block *sb, ...@@ -677,10 +677,10 @@ static struct dentry *ovl_upper_fh_to_d(struct super_block *sb,
struct dentry *dentry; struct dentry *dentry;
struct dentry *upper; struct dentry *upper;
if (!ofs->upper_mnt) if (!ovl_upper_mnt(ofs))
return ERR_PTR(-EACCES); return ERR_PTR(-EACCES);
upper = ovl_decode_real_fh(fh, ofs->upper_mnt, true); upper = ovl_decode_real_fh(fh, ovl_upper_mnt(ofs), true);
if (IS_ERR_OR_NULL(upper)) if (IS_ERR_OR_NULL(upper))
return upper; return upper;
......
...@@ -456,7 +456,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags) ...@@ -456,7 +456,7 @@ int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
if (flags & S_ATIME) { if (flags & S_ATIME) {
struct ovl_fs *ofs = inode->i_sb->s_fs_info; struct ovl_fs *ofs = inode->i_sb->s_fs_info;
struct path upperpath = { struct path upperpath = {
.mnt = ofs->upper_mnt, .mnt = ovl_upper_mnt(ofs),
.dentry = ovl_upperdentry_dereference(OVL_I(inode)), .dentry = ovl_upperdentry_dereference(OVL_I(inode)),
}; };
...@@ -921,7 +921,7 @@ static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper, ...@@ -921,7 +921,7 @@ static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper,
return true; return true;
/* Yes, if won't be copied up */ /* Yes, if won't be copied up */
if (!ofs->upper_mnt) if (!ovl_upper_mnt(ofs))
return true; return true;
/* No, if lower hardlink is or will be broken on copy up */ /* No, if lower hardlink is or will be broken on copy up */
......
...@@ -489,7 +489,7 @@ struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index) ...@@ -489,7 +489,7 @@ struct dentry *ovl_index_upper(struct ovl_fs *ofs, struct dentry *index)
if (IS_ERR_OR_NULL(fh)) if (IS_ERR_OR_NULL(fh))
return ERR_CAST(fh); return ERR_CAST(fh);
upper = ovl_decode_real_fh(fh, ofs->upper_mnt, true); upper = ovl_decode_real_fh(fh, ovl_upper_mnt(ofs), true);
kfree(fh); kfree(fh);
if (IS_ERR_OR_NULL(upper)) if (IS_ERR_OR_NULL(upper))
......
...@@ -82,6 +82,11 @@ struct ovl_fs { ...@@ -82,6 +82,11 @@ struct ovl_fs {
struct dentry *whiteout; struct dentry *whiteout;
}; };
static inline struct vfsmount *ovl_upper_mnt(struct ovl_fs *ofs)
{
return ofs->upper_mnt;
}
static inline struct ovl_fs *OVL_FS(struct super_block *sb) static inline struct ovl_fs *OVL_FS(struct super_block *sb)
{ {
return (struct ovl_fs *)sb->s_fs_info; return (struct ovl_fs *)sb->s_fs_info;
......
...@@ -1120,7 +1120,7 @@ int ovl_indexdir_cleanup(struct ovl_fs *ofs) ...@@ -1120,7 +1120,7 @@ int ovl_indexdir_cleanup(struct ovl_fs *ofs)
struct dentry *indexdir = ofs->indexdir; struct dentry *indexdir = ofs->indexdir;
struct dentry *index = NULL; struct dentry *index = NULL;
struct inode *dir = indexdir->d_inode; struct inode *dir = indexdir->d_inode;
struct path path = { .mnt = ofs->upper_mnt, .dentry = indexdir }; struct path path = { .mnt = ovl_upper_mnt(ofs), .dentry = indexdir };
LIST_HEAD(list); LIST_HEAD(list);
struct rb_root root = RB_ROOT; struct rb_root root = RB_ROOT;
struct ovl_cache_entry *p; struct ovl_cache_entry *p;
......
...@@ -224,7 +224,7 @@ static void ovl_free_fs(struct ovl_fs *ofs) ...@@ -224,7 +224,7 @@ static void ovl_free_fs(struct ovl_fs *ofs)
ovl_inuse_unlock(ofs->workbasedir); ovl_inuse_unlock(ofs->workbasedir);
dput(ofs->workbasedir); dput(ofs->workbasedir);
if (ofs->upperdir_locked) if (ofs->upperdir_locked)
ovl_inuse_unlock(ofs->upper_mnt->mnt_root); ovl_inuse_unlock(ovl_upper_mnt(ofs)->mnt_root);
mntput(ofs->upper_mnt); mntput(ofs->upper_mnt);
for (i = 1; i < ofs->numlayer; i++) { for (i = 1; i < ofs->numlayer; i++) {
iput(ofs->layers[i].trap); iput(ofs->layers[i].trap);
...@@ -258,7 +258,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait) ...@@ -258,7 +258,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait)
struct super_block *upper_sb; struct super_block *upper_sb;
int ret; int ret;
if (!ofs->upper_mnt) if (!ovl_upper_mnt(ofs))
return 0; return 0;
/* /*
...@@ -272,7 +272,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait) ...@@ -272,7 +272,7 @@ static int ovl_sync_fs(struct super_block *sb, int wait)
if (!wait) if (!wait)
return 0; return 0;
upper_sb = ofs->upper_mnt->mnt_sb; upper_sb = ovl_upper_mnt(ofs)->mnt_sb;
down_read(&upper_sb->s_umount); down_read(&upper_sb->s_umount);
ret = sync_filesystem(upper_sb); ret = sync_filesystem(upper_sb);
...@@ -310,7 +310,7 @@ static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -310,7 +310,7 @@ 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 *ofs) static bool ovl_force_readonly(struct ovl_fs *ofs)
{ {
return (!ofs->upper_mnt || !ofs->workdir); return (!ovl_upper_mnt(ofs) || !ofs->workdir);
} }
static const char *ovl_redirect_mode_def(void) static const char *ovl_redirect_mode_def(void)
...@@ -372,7 +372,7 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data) ...@@ -372,7 +372,7 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data)
return -EROFS; return -EROFS;
if (*flags & SB_RDONLY && !sb_rdonly(sb)) { if (*flags & SB_RDONLY && !sb_rdonly(sb)) {
upper_sb = ofs->upper_mnt->mnt_sb; upper_sb = ovl_upper_mnt(ofs)->mnt_sb;
down_read(&upper_sb->s_umount); down_read(&upper_sb->s_umount);
ret = sync_filesystem(upper_sb); ret = sync_filesystem(upper_sb);
up_read(&upper_sb->s_umount); up_read(&upper_sb->s_umount);
...@@ -669,7 +669,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs, ...@@ -669,7 +669,7 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
const char *name, bool persist) const char *name, bool persist)
{ {
struct inode *dir = ofs->workbasedir->d_inode; struct inode *dir = ofs->workbasedir->d_inode;
struct vfsmount *mnt = ofs->upper_mnt; struct vfsmount *mnt = ovl_upper_mnt(ofs);
struct dentry *work; struct dentry *work;
int err; int err;
bool retried = false; bool retried = false;
...@@ -1122,7 +1122,7 @@ static int ovl_get_upper(struct super_block *sb, struct ovl_fs *ofs, ...@@ -1122,7 +1122,7 @@ static int ovl_get_upper(struct super_block *sb, struct ovl_fs *ofs,
if (upper_mnt->mnt_sb->s_flags & SB_NOSEC) if (upper_mnt->mnt_sb->s_flags & SB_NOSEC)
sb->s_flags |= SB_NOSEC; sb->s_flags |= SB_NOSEC;
if (ovl_inuse_trylock(ofs->upper_mnt->mnt_root)) { if (ovl_inuse_trylock(ovl_upper_mnt(ofs)->mnt_root)) {
ofs->upperdir_locked = true; ofs->upperdir_locked = true;
} else { } else {
err = ovl_report_in_use(ofs, "upperdir"); err = ovl_report_in_use(ofs, "upperdir");
...@@ -1198,7 +1198,7 @@ static int ovl_check_rename_whiteout(struct dentry *workdir) ...@@ -1198,7 +1198,7 @@ static int ovl_check_rename_whiteout(struct dentry *workdir)
static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs, static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
struct path *workpath) struct path *workpath)
{ {
struct vfsmount *mnt = ofs->upper_mnt; struct vfsmount *mnt = ovl_upper_mnt(ofs);
struct dentry *temp; struct dentry *temp;
bool rename_whiteout; bool rename_whiteout;
bool d_type; bool d_type;
...@@ -1342,7 +1342,7 @@ static int ovl_get_workdir(struct super_block *sb, struct ovl_fs *ofs, ...@@ -1342,7 +1342,7 @@ static int ovl_get_workdir(struct super_block *sb, struct ovl_fs *ofs,
static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs, static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ofs,
struct ovl_entry *oe, struct path *upperpath) struct ovl_entry *oe, struct path *upperpath)
{ {
struct vfsmount *mnt = ofs->upper_mnt; struct vfsmount *mnt = ovl_upper_mnt(ofs);
int err; int err;
err = mnt_want_write(mnt); err = mnt_want_write(mnt);
...@@ -1398,7 +1398,7 @@ static bool ovl_lower_uuid_ok(struct ovl_fs *ofs, const uuid_t *uuid) ...@@ -1398,7 +1398,7 @@ static bool ovl_lower_uuid_ok(struct ovl_fs *ofs, const uuid_t *uuid)
{ {
unsigned int i; unsigned int i;
if (!ofs->config.nfs_export && !ofs->upper_mnt) if (!ofs->config.nfs_export && !ovl_upper_mnt(ofs))
return true; return true;
for (i = 0; i < ofs->numfs; i++) { for (i = 0; i < ofs->numfs; i++) {
...@@ -1477,7 +1477,7 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, ...@@ -1477,7 +1477,7 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
/* idx/fsid 0 are reserved for upper fs even with lower only overlay */ /* idx/fsid 0 are reserved for upper fs even with lower only overlay */
ofs->numfs++; ofs->numfs++;
layers[0].mnt = ofs->upper_mnt; layers[0].mnt = ovl_upper_mnt(ofs);
layers[0].idx = 0; layers[0].idx = 0;
layers[0].fsid = 0; layers[0].fsid = 0;
ofs->numlayer = 1; ofs->numlayer = 1;
...@@ -1494,8 +1494,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, ...@@ -1494,8 +1494,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
goto out; goto out;
} }
if (ofs->upper_mnt) { if (ovl_upper_mnt(ofs)) {
ofs->fs[0].sb = ofs->upper_mnt->mnt_sb; ofs->fs[0].sb = ovl_upper_mnt(ofs)->mnt_sb;
ofs->fs[0].is_lower = false; ofs->fs[0].is_lower = false;
} }
...@@ -1550,7 +1550,7 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, ...@@ -1550,7 +1550,7 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
* inode number or a non persistent inode number allocated from a * inode number or a non persistent inode number allocated from a
* dedicated range. * dedicated range.
*/ */
if (ofs->numfs - !ofs->upper_mnt == 1) { if (ofs->numfs - !ovl_upper_mnt(ofs) == 1) {
if (ofs->config.xino == OVL_XINO_ON) if (ofs->config.xino == OVL_XINO_ON)
pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n"); pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
ofs->xino_mode = 0; ofs->xino_mode = 0;
...@@ -1699,8 +1699,8 @@ static int ovl_check_overlapping_layers(struct super_block *sb, ...@@ -1699,8 +1699,8 @@ static int ovl_check_overlapping_layers(struct super_block *sb,
{ {
int i, err; int i, err;
if (ofs->upper_mnt) { if (ovl_upper_mnt(ofs)) {
err = ovl_check_layer(sb, ofs, ofs->upper_mnt->mnt_root, err = ovl_check_layer(sb, ofs, ovl_upper_mnt(ofs)->mnt_root,
"upperdir"); "upperdir");
if (err) if (err)
return err; return err;
...@@ -1836,8 +1836,8 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1836,8 +1836,8 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
if (!ofs->workdir) if (!ofs->workdir)
sb->s_flags |= SB_RDONLY; sb->s_flags |= SB_RDONLY;
sb->s_stack_depth = ofs->upper_mnt->mnt_sb->s_stack_depth; sb->s_stack_depth = ovl_upper_mnt(ofs)->mnt_sb->s_stack_depth;
sb->s_time_gran = ofs->upper_mnt->mnt_sb->s_time_gran; sb->s_time_gran = ovl_upper_mnt(ofs)->mnt_sb->s_time_gran;
} }
oe = ovl_get_lowerstack(sb, ofs); oe = ovl_get_lowerstack(sb, ofs);
...@@ -1846,7 +1846,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1846,7 +1846,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
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 (!ofs->upper_mnt) if (!ovl_upper_mnt(ofs))
sb->s_flags |= SB_RDONLY; sb->s_flags |= SB_RDONLY;
if (!(ovl_force_readonly(ofs)) && ofs->config.index) { if (!(ovl_force_readonly(ofs)) && ofs->config.index) {
...@@ -1874,7 +1874,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1874,7 +1874,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
/* Show index=off in /proc/mounts for forced r/o mount */ /* Show index=off in /proc/mounts for forced r/o mount */
if (!ofs->indexdir) { if (!ofs->indexdir) {
ofs->config.index = false; ofs->config.index = false;
if (ofs->upper_mnt && ofs->config.nfs_export) { if (ovl_upper_mnt(ofs) && ofs->config.nfs_export) {
pr_warn("NFS export requires an index dir, falling back to nfs_export=off.\n"); pr_warn("NFS export requires an index dir, falling back to nfs_export=off.\n");
ofs->config.nfs_export = false; ofs->config.nfs_export = false;
} }
......
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
int ovl_want_write(struct dentry *dentry) int ovl_want_write(struct dentry *dentry)
{ {
struct ovl_fs *ofs = dentry->d_sb->s_fs_info; struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
return mnt_want_write(ofs->upper_mnt); return mnt_want_write(ovl_upper_mnt(ofs));
} }
void ovl_drop_write(struct dentry *dentry) void ovl_drop_write(struct dentry *dentry)
{ {
struct ovl_fs *ofs = dentry->d_sb->s_fs_info; struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
mnt_drop_write(ofs->upper_mnt); mnt_drop_write(ovl_upper_mnt(ofs));
} }
struct dentry *ovl_workdir(struct dentry *dentry) struct dentry *ovl_workdir(struct dentry *dentry)
...@@ -150,7 +150,7 @@ void ovl_path_upper(struct dentry *dentry, struct path *path) ...@@ -150,7 +150,7 @@ void ovl_path_upper(struct dentry *dentry, struct path *path)
{ {
struct ovl_fs *ofs = dentry->d_sb->s_fs_info; struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
path->mnt = ofs->upper_mnt; path->mnt = ovl_upper_mnt(ofs);
path->dentry = ovl_dentry_upper(dentry); path->dentry = ovl_dentry_upper(dentry);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment