Commit 1e92e307 authored by Amir Goldstein's avatar Amir Goldstein Committed by Miklos Szeredi

ovl: abstract ovl_inode lock with a helper

The abstraction improves code readabilty (to some).
Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 0e32992f
...@@ -290,6 +290,16 @@ static inline unsigned int ovl_xino_bits(struct super_block *sb) ...@@ -290,6 +290,16 @@ static inline unsigned int ovl_xino_bits(struct super_block *sb)
return ofs->xino_bits; return ofs->xino_bits;
} }
static inline int ovl_inode_lock(struct inode *inode)
{
return mutex_lock_interruptible(&OVL_I(inode)->lock);
}
static inline void ovl_inode_unlock(struct inode *inode)
{
mutex_unlock(&OVL_I(inode)->lock);
}
/* namei.c */ /* namei.c */
int ovl_check_fh_len(struct ovl_fh *fh, int fh_len); int ovl_check_fh_len(struct ovl_fh *fh, int fh_len);
......
...@@ -521,13 +521,13 @@ bool ovl_already_copied_up(struct dentry *dentry, int flags) ...@@ -521,13 +521,13 @@ bool ovl_already_copied_up(struct dentry *dentry, int flags)
int ovl_copy_up_start(struct dentry *dentry, int flags) int ovl_copy_up_start(struct dentry *dentry, int flags)
{ {
struct ovl_inode *oi = OVL_I(d_inode(dentry)); struct inode *inode = d_inode(dentry);
int err; int err;
err = mutex_lock_interruptible(&oi->lock); err = ovl_inode_lock(inode);
if (!err && ovl_already_copied_up_locked(dentry, flags)) { if (!err && ovl_already_copied_up_locked(dentry, flags)) {
err = 1; /* Already copied up */ err = 1; /* Already copied up */
mutex_unlock(&oi->lock); ovl_inode_unlock(inode);
} }
return err; return err;
...@@ -535,7 +535,7 @@ int ovl_copy_up_start(struct dentry *dentry, int flags) ...@@ -535,7 +535,7 @@ int ovl_copy_up_start(struct dentry *dentry, int flags)
void ovl_copy_up_end(struct dentry *dentry) void ovl_copy_up_end(struct dentry *dentry)
{ {
mutex_unlock(&OVL_I(d_inode(dentry))->lock); ovl_inode_unlock(d_inode(dentry));
} }
bool ovl_check_origin_xattr(struct dentry *dentry) bool ovl_check_origin_xattr(struct dentry *dentry)
...@@ -740,11 +740,11 @@ static void ovl_cleanup_index(struct dentry *dentry) ...@@ -740,11 +740,11 @@ static void ovl_cleanup_index(struct dentry *dentry)
*/ */
int ovl_nlink_start(struct dentry *dentry) int ovl_nlink_start(struct dentry *dentry)
{ {
struct ovl_inode *oi = OVL_I(d_inode(dentry)); struct inode *inode = d_inode(dentry);
const struct cred *old_cred; const struct cred *old_cred;
int err; int err;
if (WARN_ON(!d_inode(dentry))) if (WARN_ON(!inode))
return -ENOENT; return -ENOENT;
/* /*
...@@ -767,11 +767,11 @@ int ovl_nlink_start(struct dentry *dentry) ...@@ -767,11 +767,11 @@ int ovl_nlink_start(struct dentry *dentry)
return err; return err;
} }
err = mutex_lock_interruptible(&oi->lock); err = ovl_inode_lock(inode);
if (err) if (err)
return err; return err;
if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, d_inode(dentry))) if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, inode))
goto out; goto out;
old_cred = ovl_override_creds(dentry->d_sb); old_cred = ovl_override_creds(dentry->d_sb);
...@@ -786,15 +786,16 @@ int ovl_nlink_start(struct dentry *dentry) ...@@ -786,15 +786,16 @@ int ovl_nlink_start(struct dentry *dentry)
out: out:
if (err) if (err)
mutex_unlock(&oi->lock); ovl_inode_unlock(inode);
return err; return err;
} }
void ovl_nlink_end(struct dentry *dentry) void ovl_nlink_end(struct dentry *dentry)
{ {
if (ovl_test_flag(OVL_INDEX, d_inode(dentry)) && struct inode *inode = d_inode(dentry);
d_inode(dentry)->i_nlink == 0) {
if (ovl_test_flag(OVL_INDEX, inode) && inode->i_nlink == 0) {
const struct cred *old_cred; const struct cred *old_cred;
old_cred = ovl_override_creds(dentry->d_sb); old_cred = ovl_override_creds(dentry->d_sb);
...@@ -802,7 +803,7 @@ void ovl_nlink_end(struct dentry *dentry) ...@@ -802,7 +803,7 @@ void ovl_nlink_end(struct dentry *dentry)
revert_creds(old_cred); revert_creds(old_cred);
} }
mutex_unlock(&OVL_I(d_inode(dentry))->lock); ovl_inode_unlock(inode);
} }
int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir) int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir)
......
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