lustre: switch to use of ->d_init()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1001354ca3
commit
7126bc2e8d
@ -57,9 +57,6 @@ static void ll_release(struct dentry *de)
|
||||
|
||||
LASSERT(de);
|
||||
lld = ll_d2d(de);
|
||||
if (!lld) /* NFS copies the de->d_op methods (bug 4655) */
|
||||
return;
|
||||
|
||||
if (lld->lld_it) {
|
||||
ll_intent_release(lld->lld_it);
|
||||
kfree(lld->lld_it);
|
||||
@ -126,30 +123,13 @@ static int ll_ddelete(const struct dentry *de)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ll_d_init(struct dentry *de)
|
||||
static int ll_d_init(struct dentry *de)
|
||||
{
|
||||
CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n",
|
||||
de, de, de->d_parent, d_inode(de), d_count(de));
|
||||
|
||||
if (!de->d_fsdata) {
|
||||
struct ll_dentry_data *lld;
|
||||
|
||||
lld = kzalloc(sizeof(*lld), GFP_NOFS);
|
||||
if (likely(lld)) {
|
||||
spin_lock(&de->d_lock);
|
||||
if (likely(!de->d_fsdata)) {
|
||||
de->d_fsdata = lld;
|
||||
__d_lustre_invalidate(de);
|
||||
} else {
|
||||
kfree(lld);
|
||||
}
|
||||
spin_unlock(&de->d_lock);
|
||||
} else {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
LASSERT(de->d_op == &ll_d_ops);
|
||||
|
||||
struct ll_dentry_data *lld = kzalloc(sizeof(*lld), GFP_KERNEL);
|
||||
if (unlikely(!lld))
|
||||
return -ENOMEM;
|
||||
lld->lld_invalid = 1;
|
||||
de->d_fsdata = lld;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -300,6 +280,7 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags)
|
||||
}
|
||||
|
||||
const struct dentry_operations ll_d_ops = {
|
||||
.d_init = ll_d_init,
|
||||
.d_revalidate = ll_revalidate_nd,
|
||||
.d_release = ll_release,
|
||||
.d_delete = ll_ddelete,
|
||||
|
@ -801,7 +801,6 @@ int ll_hsm_release(struct inode *inode);
|
||||
|
||||
/* llite/dcache.c */
|
||||
|
||||
int ll_d_init(struct dentry *de);
|
||||
extern const struct dentry_operations ll_d_ops;
|
||||
void ll_intent_drop_lock(struct lookup_intent *);
|
||||
void ll_intent_release(struct lookup_intent *);
|
||||
@ -1189,7 +1188,7 @@ dentry_may_statahead(struct inode *dir, struct dentry *dentry)
|
||||
* 'lld_sa_generation == lli->lli_sa_generation'.
|
||||
*/
|
||||
ldd = ll_d2d(dentry);
|
||||
if (ldd && ldd->lld_sa_generation == lli->lli_sa_generation)
|
||||
if (ldd->lld_sa_generation == lli->lli_sa_generation)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -1317,17 +1316,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode,
|
||||
|
||||
static inline int d_lustre_invalid(const struct dentry *dentry)
|
||||
{
|
||||
struct ll_dentry_data *lld = ll_d2d(dentry);
|
||||
|
||||
return !lld || lld->lld_invalid;
|
||||
}
|
||||
|
||||
static inline void __d_lustre_invalidate(struct dentry *dentry)
|
||||
{
|
||||
struct ll_dentry_data *lld = ll_d2d(dentry);
|
||||
|
||||
if (lld)
|
||||
lld->lld_invalid = 1;
|
||||
return ll_d2d(dentry)->lld_invalid;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1343,7 +1332,7 @@ static inline void d_lustre_invalidate(struct dentry *dentry, int nested)
|
||||
|
||||
spin_lock_nested(&dentry->d_lock,
|
||||
nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
|
||||
__d_lustre_invalidate(dentry);
|
||||
ll_d2d(dentry)->lld_invalid = 1;
|
||||
/*
|
||||
* We should be careful about dentries created by d_obtain_alias().
|
||||
* These dentries are not put in the dentry tree, instead they are
|
||||
|
@ -169,22 +169,12 @@ ll_iget_for_nfs(struct super_block *sb, struct lu_fid *fid, struct lu_fid *paren
|
||||
/* N.B. d_obtain_alias() drops inode ref on error */
|
||||
result = d_obtain_alias(inode);
|
||||
if (!IS_ERR(result)) {
|
||||
int rc;
|
||||
|
||||
rc = ll_d_init(result);
|
||||
if (rc < 0) {
|
||||
dput(result);
|
||||
result = ERR_PTR(rc);
|
||||
} else {
|
||||
struct ll_dentry_data *ldd = ll_d2d(result);
|
||||
|
||||
/*
|
||||
* Need to signal to the ll_intent_file_open that
|
||||
* we came from NFS and so opencache needs to be
|
||||
* enabled for this one
|
||||
*/
|
||||
ldd->lld_nfs_dentry = 1;
|
||||
}
|
||||
/*
|
||||
* Need to signal to the ll_intent_file_open that
|
||||
* we came from NFS and so opencache needs to be
|
||||
* enabled for this one
|
||||
*/
|
||||
ll_d2d(result)->lld_nfs_dentry = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -395,17 +395,9 @@ static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
|
||||
*/
|
||||
struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
|
||||
{
|
||||
struct dentry *new;
|
||||
int rc;
|
||||
|
||||
if (inode) {
|
||||
new = ll_find_alias(inode, de);
|
||||
struct dentry *new = ll_find_alias(inode, de);
|
||||
if (new) {
|
||||
rc = ll_d_init(new);
|
||||
if (rc < 0) {
|
||||
dput(new);
|
||||
return ERR_PTR(rc);
|
||||
}
|
||||
d_move(new, de);
|
||||
iput(inode);
|
||||
CDEBUG(D_DENTRY,
|
||||
@ -414,9 +406,6 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
|
||||
return new;
|
||||
}
|
||||
}
|
||||
rc = ll_d_init(de);
|
||||
if (rc < 0)
|
||||
return ERR_PTR(rc);
|
||||
d_add(de, inode);
|
||||
CDEBUG(D_DENTRY, "Add dentry %p inode %p refc %d flags %#x\n",
|
||||
de, d_inode(de), d_count(de), de->d_flags);
|
||||
|
@ -1513,9 +1513,7 @@ out_unplug:
|
||||
*/
|
||||
ldd = ll_d2d(*dentryp);
|
||||
lli = ll_i2info(dir);
|
||||
/* ldd can be NULL if llite lookup failed. */
|
||||
if (ldd)
|
||||
ldd->lld_sa_generation = lli->lli_sa_generation;
|
||||
ldd->lld_sa_generation = lli->lli_sa_generation;
|
||||
sa_put(sai, entry);
|
||||
return rc;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user