Commit bf21549a authored by J. R. Okajima's avatar J. R. Okajima
Browse files

Merge branch 'aufs5.6/00base' into aufs5.x-rcN/00base

parents fbd30171 08fe3ac6
...@@ -1167,15 +1167,14 @@ static void au_refresh_iattr(struct inode *inode, struct kstat *st, ...@@ -1167,15 +1167,14 @@ static void au_refresh_iattr(struct inode *inode, struct kstat *st,
* returns zero or negative (an error). * returns zero or negative (an error).
* @dentry will be read-locked in success. * @dentry will be read-locked in success.
*/ */
int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path, int au_h_path_getattr(struct dentry *dentry, struct inode *inode, int force,
int locked) struct path *h_path, int locked)
{ {
int err; int err;
unsigned int mnt_flags, sigen; unsigned int mnt_flags, sigen;
unsigned char udba_none; unsigned char udba_none;
aufs_bindex_t bindex; aufs_bindex_t bindex;
struct super_block *sb, *h_sb; struct super_block *sb, *h_sb;
struct inode *inode;
h_path->mnt = NULL; h_path->mnt = NULL;
h_path->dentry = NULL; h_path->dentry = NULL;
...@@ -1216,7 +1215,11 @@ int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path, ...@@ -1216,7 +1215,11 @@ int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path,
di_read_lock_child(dentry, AuLock_IR); di_read_lock_child(dentry, AuLock_IR);
body: body:
inode = d_inode(dentry); if (!inode) {
inode = d_inode(dentry);
if (unlikely(!inode))
goto out;
}
bindex = au_ibtop(inode); bindex = au_ibtop(inode);
h_path->mnt = au_sbr_mnt(sb, bindex); h_path->mnt = au_sbr_mnt(sb, bindex);
h_sb = h_path->mnt->mnt_sb; h_sb = h_path->mnt->mnt_sb;
...@@ -1256,7 +1259,8 @@ static int aufs_getattr(const struct path *path, struct kstat *st, ...@@ -1256,7 +1259,8 @@ static int aufs_getattr(const struct path *path, struct kstat *st,
err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM);
if (unlikely(err)) if (unlikely(err))
goto out; goto out;
err = au_h_path_getattr(dentry, /*force*/0, &h_path, /*locked*/0); err = au_h_path_getattr(dentry, /*inode*/NULL, /*force*/0, &h_path,
/*locked*/0);
if (unlikely(err)) if (unlikely(err))
goto out_si; goto out_si;
if (unlikely(!h_path.dentry)) if (unlikely(!h_path.dentry))
......
...@@ -194,8 +194,8 @@ struct au_icpup_args { ...@@ -194,8 +194,8 @@ struct au_icpup_args {
int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia, int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia,
struct au_icpup_args *a); struct au_icpup_args *a);
int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path, int au_h_path_getattr(struct dentry *dentry, struct inode *inode, int force,
int locked); struct path *h_path, int locked);
/* i_op_add.c */ /* i_op_add.c */
int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, int au_may_add(struct dentry *dentry, aufs_bindex_t bindex,
......
...@@ -181,7 +181,7 @@ out: ...@@ -181,7 +181,7 @@ out:
static int au_smack_reentering(struct super_block *sb) static int au_smack_reentering(struct super_block *sb)
{ {
#if IS_ENABLED(CONFIG_SECURITY_SMACK) #if IS_ENABLED(CONFIG_SECURITY_SMACK) || IS_ENABLED(CONFIG_SECURITY_SELINUX)
/* /*
* as a part of lookup, smack_d_instantiate() is called, and it calls * as a part of lookup, smack_d_instantiate() is called, and it calls
* i_op->getxattr(). ouch. * i_op->getxattr(). ouch.
...@@ -212,7 +212,8 @@ struct au_lgxattr { ...@@ -212,7 +212,8 @@ struct au_lgxattr {
} u; } u;
}; };
static ssize_t au_lgxattr(struct dentry *dentry, struct au_lgxattr *arg) static ssize_t au_lgxattr(struct dentry *dentry, struct inode *inode,
struct au_lgxattr *arg)
{ {
ssize_t err; ssize_t err;
int reenter; int reenter;
...@@ -226,7 +227,7 @@ static ssize_t au_lgxattr(struct dentry *dentry, struct au_lgxattr *arg) ...@@ -226,7 +227,7 @@ static ssize_t au_lgxattr(struct dentry *dentry, struct au_lgxattr *arg)
if (unlikely(err)) if (unlikely(err))
goto out; goto out;
} }
err = au_h_path_getattr(dentry, /*force*/1, &h_path, reenter); err = au_h_path_getattr(dentry, inode, /*force*/1, &h_path, reenter);
if (unlikely(err)) if (unlikely(err))
goto out_si; goto out_si;
if (unlikely(!h_path.dentry)) if (unlikely(!h_path.dentry))
...@@ -268,11 +269,10 @@ ssize_t aufs_listxattr(struct dentry *dentry, char *list, size_t size) ...@@ -268,11 +269,10 @@ ssize_t aufs_listxattr(struct dentry *dentry, char *list, size_t size)
}, },
}; };
return au_lgxattr(dentry, &arg); return au_lgxattr(dentry, /*inode*/NULL, &arg);
} }
static ssize_t au_getxattr(struct dentry *dentry, static ssize_t au_getxattr(struct dentry *dentry, struct inode *inode,
struct inode *inode __maybe_unused,
const char *name, void *value, size_t size) const char *name, void *value, size_t size)
{ {
struct au_lgxattr arg = { struct au_lgxattr arg = {
...@@ -284,7 +284,7 @@ static ssize_t au_getxattr(struct dentry *dentry, ...@@ -284,7 +284,7 @@ static ssize_t au_getxattr(struct dentry *dentry,
}, },
}; };
return au_lgxattr(dentry, &arg); return au_lgxattr(dentry, inode, &arg);
} }
static int au_setxattr(struct dentry *dentry, struct inode *inode, static int au_setxattr(struct dentry *dentry, struct inode *inode,
......
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