forked from mirrors/linux
		
	VFS: normal filesystems (and lustre): d_inode() annotations
that's the bulk of filesystem drivers dealing with inodes of their own Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									ce0b16ddf1
								
							
						
					
					
						commit
						2b0143b5c9
					
				
					 278 changed files with 1419 additions and 1420 deletions
				
			
		| 
						 | 
				
			
			@ -153,7 +153,7 @@ static int ll_ddelete(const struct dentry *de)
 | 
			
		|||
 | 
			
		||||
	CDEBUG(D_DENTRY, "%s dentry %pd (%p, parent %p, inode %p) %s%s\n",
 | 
			
		||||
	       d_lustre_invalid((struct dentry *)de) ? "deleting" : "keeping",
 | 
			
		||||
	       de, de, de->d_parent, de->d_inode,
 | 
			
		||||
	       de, de, de->d_parent, d_inode(de),
 | 
			
		||||
	       d_unhashed(de) ? "" : "hashed,",
 | 
			
		||||
	       list_empty(&de->d_subdirs) ? "" : "subdirs");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,8 +167,8 @@ static int ll_ddelete(const struct dentry *de)
 | 
			
		|||
#if 0
 | 
			
		||||
	/* if not ldlm lock for this inode, set i_nlink to 0 so that
 | 
			
		||||
	 * this inode can be recycled later b=20433 */
 | 
			
		||||
	if (de->d_inode && !find_cbdata(de->d_inode))
 | 
			
		||||
		clear_nlink(de->d_inode);
 | 
			
		||||
	if (d_really_is_positive(de) && !find_cbdata(d_inode(de)))
 | 
			
		||||
		clear_nlink(d_inode(de));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (d_lustre_invalid((struct dentry *)de))
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ int ll_d_init(struct dentry *de)
 | 
			
		|||
	LASSERT(de != NULL);
 | 
			
		||||
 | 
			
		||||
	CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n",
 | 
			
		||||
		de, de, de->d_parent, de->d_inode,
 | 
			
		||||
		de, de, de->d_parent, d_inode(de),
 | 
			
		||||
		d_count(de));
 | 
			
		||||
 | 
			
		||||
	if (de->d_fsdata == NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -261,7 +261,7 @@ void ll_invalidate_aliases(struct inode *inode)
 | 
			
		|||
	ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) {
 | 
			
		||||
		CDEBUG(D_DENTRY, "dentry in drop %pd (%p) parent %p inode %p flags %d\n",
 | 
			
		||||
		       dentry, dentry, dentry->d_parent,
 | 
			
		||||
		       dentry->d_inode, dentry->d_flags);
 | 
			
		||||
		       d_inode(dentry), dentry->d_flags);
 | 
			
		||||
 | 
			
		||||
		d_lustre_invalidate(dentry, 0);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -309,7 +309,7 @@ void ll_lookup_finish_locks(struct lookup_intent *it, struct inode *inode)
 | 
			
		|||
static int ll_revalidate_dentry(struct dentry *dentry,
 | 
			
		||||
				unsigned int lookup_flags)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * if open&create is set, talk to MDS to make sure file is created if
 | 
			
		||||
| 
						 | 
				
			
			@ -329,7 +329,7 @@ static int ll_revalidate_dentry(struct dentry *dentry,
 | 
			
		|||
	if (lookup_flags & LOOKUP_RCU)
 | 
			
		||||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	do_statahead_enter(dir, &dentry, dentry->d_inode == NULL);
 | 
			
		||||
	do_statahead_enter(dir, &dentry, d_inode(dentry) == NULL);
 | 
			
		||||
	ll_statahead_mark(dir, dentry);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -387,7 +387,7 @@ int ll_file_release(struct inode *inode, struct file *file)
 | 
			
		|||
static int ll_intent_file_open(struct dentry *dentry, void *lmm,
 | 
			
		||||
			       int lmmsize, struct lookup_intent *itp)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ll_sb_info *sbi = ll_i2sbi(inode);
 | 
			
		||||
	struct dentry *parent = dentry->d_parent;
 | 
			
		||||
	const char *name = dentry->d_name.name;
 | 
			
		||||
| 
						 | 
				
			
			@ -412,7 +412,7 @@ static int ll_intent_file_open(struct dentry *dentry, void *lmm,
 | 
			
		|||
			opc = LUSTRE_OPC_CREATE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	op_data  = ll_prep_md_op_data(NULL, parent->d_inode,
 | 
			
		||||
	op_data  = ll_prep_md_op_data(NULL, d_inode(parent),
 | 
			
		||||
				      inode, name, len,
 | 
			
		||||
				      O_RDWR, opc, NULL);
 | 
			
		||||
	if (IS_ERR(op_data))
 | 
			
		||||
| 
						 | 
				
			
			@ -2889,7 +2889,7 @@ static int ll_inode_revalidate_fini(struct inode *inode, int rc)
 | 
			
		|||
 | 
			
		||||
static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ptlrpc_request *req = NULL;
 | 
			
		||||
	struct obd_export *exp;
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -2941,12 +2941,12 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 | 
			
		|||
		   do_lookup() -> ll_revalidate_it(). We cannot use d_drop
 | 
			
		||||
		   here to preserve get_cwd functionality on 2.6.
 | 
			
		||||
		   Bug 10503 */
 | 
			
		||||
		if (!dentry->d_inode->i_nlink)
 | 
			
		||||
		if (!d_inode(dentry)->i_nlink)
 | 
			
		||||
			d_lustre_invalidate(dentry, 0);
 | 
			
		||||
 | 
			
		||||
		ll_lookup_finish_locks(&oit, inode);
 | 
			
		||||
	} else if (!ll_have_md_lock(dentry->d_inode, &ibits, LCK_MINMODE)) {
 | 
			
		||||
		struct ll_sb_info *sbi = ll_i2sbi(dentry->d_inode);
 | 
			
		||||
	} else if (!ll_have_md_lock(d_inode(dentry), &ibits, LCK_MINMODE)) {
 | 
			
		||||
		struct ll_sb_info *sbi = ll_i2sbi(d_inode(dentry));
 | 
			
		||||
		u64 valid = OBD_MD_FLGETATTR;
 | 
			
		||||
		struct md_op_data *op_data;
 | 
			
		||||
		int ealen = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -2984,7 +2984,7 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 | 
			
		|||
 | 
			
		||||
static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	rc = __ll_inode_revalidate(dentry, ibits);
 | 
			
		||||
| 
						 | 
				
			
			@ -3012,7 +3012,7 @@ static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 | 
			
		|||
 | 
			
		||||
int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = de->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(de);
 | 
			
		||||
	struct ll_sb_info *sbi = ll_i2sbi(inode);
 | 
			
		||||
	struct ll_inode_info *lli = ll_i2info(inode);
 | 
			
		||||
	int res = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1488,7 +1488,7 @@ static inline void d_lustre_invalidate(struct dentry *dentry, int nested)
 | 
			
		|||
{
 | 
			
		||||
	CDEBUG(D_DENTRY, "invalidate dentry %pd (%p) parent %p inode %p refc %d\n",
 | 
			
		||||
	       dentry, dentry,
 | 
			
		||||
	       dentry->d_parent, dentry->d_inode, d_count(dentry));
 | 
			
		||||
	       dentry->d_parent, d_inode(dentry), d_count(dentry));
 | 
			
		||||
 | 
			
		||||
	spin_lock_nested(&dentry->d_lock,
 | 
			
		||||
			 nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1169,7 +1169,7 @@ static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data,
 | 
			
		|||
		  struct md_open_data **mod)
 | 
			
		||||
{
 | 
			
		||||
	struct lustre_md md;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ll_sb_info *sbi = ll_i2sbi(inode);
 | 
			
		||||
	struct ptlrpc_request *request = NULL;
 | 
			
		||||
	int rc, ia_valid;
 | 
			
		||||
| 
						 | 
				
			
			@ -1293,7 +1293,7 @@ static int ll_setattr_ost(struct inode *inode, struct iattr *attr)
 | 
			
		|||
 */
 | 
			
		||||
int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ll_inode_info *lli = ll_i2info(inode);
 | 
			
		||||
	struct md_op_data *op_data = NULL;
 | 
			
		||||
	struct md_open_data *mod = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1467,7 +1467,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
 | 
			
		|||
 | 
			
		||||
int ll_setattr(struct dentry *de, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	int mode = de->d_inode->i_mode;
 | 
			
		||||
	int mode = d_inode(de)->i_mode;
 | 
			
		||||
 | 
			
		||||
	if ((attr->ia_valid & (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) ==
 | 
			
		||||
			      (ATTR_CTIME|ATTR_SIZE|ATTR_MODE))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -230,11 +230,11 @@ static int ll_nfs_get_name_filldir(struct dir_context *ctx, const char *name,
 | 
			
		|||
static int ll_get_name(struct dentry *dentry, char *name,
 | 
			
		||||
		       struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry);
 | 
			
		||||
	int rc;
 | 
			
		||||
	struct ll_getname_data lgd = {
 | 
			
		||||
		.lgd_name = name,
 | 
			
		||||
		.lgd_fid = ll_i2info(child->d_inode)->lli_fid,
 | 
			
		||||
		.lgd_fid = ll_i2info(d_inode(child))->lli_fid,
 | 
			
		||||
		.ctx.actor = ll_nfs_get_name_filldir,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +282,7 @@ static struct dentry *ll_fh_to_parent(struct super_block *sb, struct fid *fid,
 | 
			
		|||
static struct dentry *ll_get_parent(struct dentry *dchild)
 | 
			
		||||
{
 | 
			
		||||
	struct ptlrpc_request *req = NULL;
 | 
			
		||||
	struct inode	  *dir = dchild->d_inode;
 | 
			
		||||
	struct inode	  *dir = d_inode(dchild);
 | 
			
		||||
	struct ll_sb_info     *sbi;
 | 
			
		||||
	struct dentry	 *result = NULL;
 | 
			
		||||
	struct mdt_body       *body;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ static void ll_invalidate_negative_children(struct inode *dir)
 | 
			
		|||
			list_for_each_entry_safe(child, tmp_subdir,
 | 
			
		||||
						 &dentry->d_subdirs,
 | 
			
		||||
						 d_child) {
 | 
			
		||||
				if (child->d_inode == NULL)
 | 
			
		||||
				if (d_really_is_negative(child))
 | 
			
		||||
					d_lustre_invalidate(child, 1);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -391,7 +391,7 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
 | 
			
		|||
			iput(inode);
 | 
			
		||||
			CDEBUG(D_DENTRY,
 | 
			
		||||
			       "Reuse dentry %p inode %p refc %d flags %#x\n",
 | 
			
		||||
			      new, new->d_inode, d_count(new), new->d_flags);
 | 
			
		||||
			      new, d_inode(new), d_count(new), new->d_flags);
 | 
			
		||||
			return new;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
 | 
			
		|||
		return ERR_PTR(rc);
 | 
			
		||||
	d_add(de, inode);
 | 
			
		||||
	CDEBUG(D_DENTRY, "Add dentry %p inode %p refc %d flags %#x\n",
 | 
			
		||||
	       de, de->d_inode, d_count(de), de->d_flags);
 | 
			
		||||
	       de, d_inode(de), d_count(de), de->d_flags);
 | 
			
		||||
	return de;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -447,7 +447,7 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request,
 | 
			
		|||
		   !it_disposition(it, DISP_OPEN_CREATE)) {
 | 
			
		||||
		/* With DISP_OPEN_CREATE dentry will
 | 
			
		||||
		   instantiated in ll_create_it. */
 | 
			
		||||
		LASSERT((*de)->d_inode == NULL);
 | 
			
		||||
		LASSERT(d_inode(*de) == NULL);
 | 
			
		||||
		d_instantiate(*de, inode);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -540,7 +540,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
 | 
			
		|||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	if ((it->it_op & IT_OPEN) && inode &&
 | 
			
		||||
	    !S_ISREG(inode->i_mode) &&
 | 
			
		||||
	    !S_ISDIR(inode->i_mode)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -636,9 +636,9 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
			*opened |= FILE_CREATED;
 | 
			
		||||
		}
 | 
			
		||||
		if (dentry->d_inode && it_disposition(it, DISP_OPEN_OPEN)) {
 | 
			
		||||
		if (d_really_is_positive(dentry) && it_disposition(it, DISP_OPEN_OPEN)) {
 | 
			
		||||
			/* Open dentry. */
 | 
			
		||||
			if (S_ISFIFO(dentry->d_inode->i_mode)) {
 | 
			
		||||
			if (S_ISFIFO(d_inode(dentry)->i_mode)) {
 | 
			
		||||
				/* We cannot call open here as it would
 | 
			
		||||
				 * deadlock.
 | 
			
		||||
				 */
 | 
			
		||||
| 
						 | 
				
			
			@ -860,8 +860,8 @@ static int ll_create_nd(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
static inline void ll_get_child_fid(struct dentry *child, struct lu_fid *fid)
 | 
			
		||||
{
 | 
			
		||||
	if (child->d_inode)
 | 
			
		||||
		*fid = *ll_inode2fid(child->d_inode);
 | 
			
		||||
	if (d_really_is_positive(child))
 | 
			
		||||
		*fid = *ll_inode2fid(d_inode(child));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -1073,7 +1073,7 @@ static int ll_symlink(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
static int ll_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		||||
		   struct dentry *new_dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *src = old_dentry->d_inode;
 | 
			
		||||
	struct inode *src = d_inode(old_dentry);
 | 
			
		||||
	struct ll_sb_info *sbi = ll_i2sbi(dir);
 | 
			
		||||
	struct ptlrpc_request *request = NULL;
 | 
			
		||||
	struct md_op_data *op_data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -871,7 +871,7 @@ static int do_sa_lookup(struct inode *dir, struct ll_sa_entry *entry)
 | 
			
		|||
static int do_sa_revalidate(struct inode *dir, struct ll_sa_entry *entry,
 | 
			
		||||
			    struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode	     *inode = dentry->d_inode;
 | 
			
		||||
	struct inode	     *inode = d_inode(dentry);
 | 
			
		||||
	struct lookup_intent      it = { .it_op = IT_GETATTR,
 | 
			
		||||
					 .d.lustre.it_lock_handle = 0 };
 | 
			
		||||
	struct md_enqueue_info   *minfo;
 | 
			
		||||
| 
						 | 
				
			
			@ -917,7 +917,7 @@ static int do_sa_revalidate(struct inode *dir, struct ll_sa_entry *entry,
 | 
			
		|||
static void ll_statahead_one(struct dentry *parent, const char *entry_name,
 | 
			
		||||
			     int entry_name_len)
 | 
			
		||||
{
 | 
			
		||||
	struct inode	     *dir    = parent->d_inode;
 | 
			
		||||
	struct inode	     *dir    = d_inode(parent);
 | 
			
		||||
	struct ll_inode_info     *lli    = ll_i2info(dir);
 | 
			
		||||
	struct ll_statahead_info *sai    = lli->lli_sai;
 | 
			
		||||
	struct dentry	    *dentry = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -935,8 +935,8 @@ static void ll_statahead_one(struct dentry *parent, const char *entry_name,
 | 
			
		|||
		rc = do_sa_lookup(dir, entry);
 | 
			
		||||
	} else {
 | 
			
		||||
		rc = do_sa_revalidate(dir, entry, dentry);
 | 
			
		||||
		if (rc == 1 && agl_should_run(sai, dentry->d_inode))
 | 
			
		||||
			ll_agl_add(sai, dentry->d_inode, entry->se_index);
 | 
			
		||||
		if (rc == 1 && agl_should_run(sai, d_inode(dentry)))
 | 
			
		||||
			ll_agl_add(sai, d_inode(dentry), entry->se_index);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (dentry != NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -959,7 +959,7 @@ static void ll_statahead_one(struct dentry *parent, const char *entry_name,
 | 
			
		|||
static int ll_agl_thread(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	struct dentry	    *parent = (struct dentry *)arg;
 | 
			
		||||
	struct inode	     *dir    = parent->d_inode;
 | 
			
		||||
	struct inode	     *dir    = d_inode(parent);
 | 
			
		||||
	struct ll_inode_info     *plli   = ll_i2info(dir);
 | 
			
		||||
	struct ll_inode_info     *clli;
 | 
			
		||||
	struct ll_sb_info	*sbi    = ll_i2sbi(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -1033,7 +1033,7 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
 | 
			
		|||
	CDEBUG(D_READA, "start agl thread: sai %p, parent %pd\n",
 | 
			
		||||
	       sai, parent);
 | 
			
		||||
 | 
			
		||||
	plli = ll_i2info(parent->d_inode);
 | 
			
		||||
	plli = ll_i2info(d_inode(parent));
 | 
			
		||||
	task = kthread_run(ll_agl_thread, parent,
 | 
			
		||||
			       "ll_agl_%u", plli->lli_opendir_pid);
 | 
			
		||||
	if (IS_ERR(task)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1050,7 +1050,7 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
 | 
			
		|||
static int ll_statahead_thread(void *arg)
 | 
			
		||||
{
 | 
			
		||||
	struct dentry	    *parent = (struct dentry *)arg;
 | 
			
		||||
	struct inode	     *dir    = parent->d_inode;
 | 
			
		||||
	struct inode	     *dir    = d_inode(parent);
 | 
			
		||||
	struct ll_inode_info     *plli   = ll_i2info(dir);
 | 
			
		||||
	struct ll_inode_info     *clli;
 | 
			
		||||
	struct ll_sb_info	*sbi    = ll_i2sbi(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -1595,7 +1595,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
 | 
			
		|||
			rc = md_revalidate_lock(ll_i2mdexp(dir), &it,
 | 
			
		||||
						ll_inode2fid(inode), &bits);
 | 
			
		||||
			if (rc == 1) {
 | 
			
		||||
				if ((*dentryp)->d_inode == NULL) {
 | 
			
		||||
				if (d_inode(*dentryp) == NULL) {
 | 
			
		||||
					struct dentry *alias;
 | 
			
		||||
 | 
			
		||||
					alias = ll_splice_alias(inode,
 | 
			
		||||
| 
						 | 
				
			
			@ -1605,13 +1605,13 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
 | 
			
		|||
						return PTR_ERR(alias);
 | 
			
		||||
					}
 | 
			
		||||
					*dentryp = alias;
 | 
			
		||||
				} else if ((*dentryp)->d_inode != inode) {
 | 
			
		||||
				} else if (d_inode(*dentryp) != inode) {
 | 
			
		||||
					/* revalidate, but inode is recreated */
 | 
			
		||||
					CDEBUG(D_READA,
 | 
			
		||||
					      "stale dentry %pd inode %lu/%u, statahead inode %lu/%u\n",
 | 
			
		||||
					      *dentryp,
 | 
			
		||||
					      (*dentryp)->d_inode->i_ino,
 | 
			
		||||
					      (*dentryp)->d_inode->i_generation,
 | 
			
		||||
					      d_inode(*dentryp)->i_ino,
 | 
			
		||||
					      d_inode(*dentryp)->i_generation,
 | 
			
		||||
					      inode->i_ino,
 | 
			
		||||
					      inode->i_generation);
 | 
			
		||||
					ll_sai_unplug(sai, entry);
 | 
			
		||||
| 
						 | 
				
			
			@ -1657,8 +1657,8 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
 | 
			
		|||
 | 
			
		||||
	/* get parent reference count here, and put it in ll_statahead_thread */
 | 
			
		||||
	parent = dget((*dentryp)->d_parent);
 | 
			
		||||
	if (unlikely(sai->sai_inode != parent->d_inode)) {
 | 
			
		||||
		struct ll_inode_info *nlli = ll_i2info(parent->d_inode);
 | 
			
		||||
	if (unlikely(sai->sai_inode != d_inode(parent))) {
 | 
			
		||||
		struct ll_inode_info *nlli = ll_i2info(d_inode(parent));
 | 
			
		||||
 | 
			
		||||
		CWARN("Race condition, someone changed %pd just now: old parent "DFID", new parent "DFID"\n",
 | 
			
		||||
		      *dentryp,
 | 
			
		||||
| 
						 | 
				
			
			@ -1680,7 +1680,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
 | 
			
		|||
	ll_sai_get(sai);
 | 
			
		||||
	lli->lli_sai = sai;
 | 
			
		||||
 | 
			
		||||
	plli = ll_i2info(parent->d_inode);
 | 
			
		||||
	plli = ll_i2info(d_inode(parent));
 | 
			
		||||
	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
 | 
			
		||||
				 "ll_sa_%u", plli->lli_opendir_pid));
 | 
			
		||||
	thread = &sai->sai_thread;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ static int ll_readlink_internal(struct inode *inode,
 | 
			
		|||
 | 
			
		||||
static void *ll_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ptlrpc_request *request = NULL;
 | 
			
		||||
	int rc;
 | 
			
		||||
	char *symname = NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,7 +214,7 @@ int ll_setxattr_common(struct inode *inode, const char *name,
 | 
			
		|||
int ll_setxattr(struct dentry *dentry, const char *name,
 | 
			
		||||
		const void *value, size_t size, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	LASSERT(inode);
 | 
			
		||||
	LASSERT(name);
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +267,7 @@ int ll_setxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
 | 
			
		||||
int ll_removexattr(struct dentry *dentry, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	LASSERT(inode);
 | 
			
		||||
	LASSERT(name);
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +457,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
 | 
			
		|||
ssize_t ll_getxattr(struct dentry *dentry, const char *name,
 | 
			
		||||
		    void *buffer, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	LASSERT(inode);
 | 
			
		||||
	LASSERT(name);
 | 
			
		||||
| 
						 | 
				
			
			@ -545,7 +545,7 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
 | 
			
		||||
ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int rc = 0, rc2 = 0;
 | 
			
		||||
	struct lov_mds_md *lmm = NULL;
 | 
			
		||||
	struct ptlrpc_request *request = NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -247,7 +247,7 @@ static int v9fs_xattr_get_acl(struct dentry *dentry, const char *name,
 | 
			
		|||
	if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
 | 
			
		||||
		return v9fs_remote_get_acl(dentry, name, buffer, size, type);
 | 
			
		||||
 | 
			
		||||
	acl = v9fs_get_cached_acl(dentry->d_inode, type);
 | 
			
		||||
	acl = v9fs_get_cached_acl(d_inode(dentry), type);
 | 
			
		||||
	if (IS_ERR(acl))
 | 
			
		||||
		return PTR_ERR(acl);
 | 
			
		||||
	if (acl == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +285,7 @@ static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name,
 | 
			
		|||
	int retval;
 | 
			
		||||
	struct posix_acl *acl;
 | 
			
		||||
	struct v9fs_session_info *v9ses;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	if (strcmp(name, "") != 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry)
 | 
			
		|||
		 dentry, dentry);
 | 
			
		||||
 | 
			
		||||
	/* Don't cache negative dentries */
 | 
			
		||||
	if (!dentry->d_inode)
 | 
			
		||||
	if (d_really_is_negative(dentry))
 | 
			
		||||
		return 1;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ static int v9fs_lookup_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
	if (flags & LOOKUP_RCU)
 | 
			
		||||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	if (!inode)
 | 
			
		||||
		goto out_valid;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -595,7 +595,7 @@ static int v9fs_remove(struct inode *dir, struct dentry *dentry, int flags)
 | 
			
		|||
		 dir, dentry, flags);
 | 
			
		||||
 | 
			
		||||
	v9ses = v9fs_inode2v9ses(dir);
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	dfid = v9fs_fid_lookup(dentry->d_parent);
 | 
			
		||||
	if (IS_ERR(dfid)) {
 | 
			
		||||
		retval = PTR_ERR(dfid);
 | 
			
		||||
| 
						 | 
				
			
			@ -864,7 +864,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/* Only creates */
 | 
			
		||||
	if (!(flags & O_CREAT) || dentry->d_inode)
 | 
			
		||||
	if (!(flags & O_CREAT) || d_really_is_positive(dentry))
 | 
			
		||||
		return finish_no_open(file, res);
 | 
			
		||||
 | 
			
		||||
	err = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -881,7 +881,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	v9fs_invalidate_inode_attr(dir);
 | 
			
		||||
	v9inode = V9FS_I(dentry->d_inode);
 | 
			
		||||
	v9inode = V9FS_I(d_inode(dentry));
 | 
			
		||||
	mutex_lock(&v9inode->v_mutex);
 | 
			
		||||
	if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) &&
 | 
			
		||||
	    !v9inode->writeback_fid &&
 | 
			
		||||
| 
						 | 
				
			
			@ -908,7 +908,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
	file->private_data = fid;
 | 
			
		||||
	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
 | 
			
		||||
		v9fs_cache_inode_set_cookie(dentry->d_inode, file);
 | 
			
		||||
		v9fs_cache_inode_set_cookie(d_inode(dentry), file);
 | 
			
		||||
 | 
			
		||||
	*opened |= FILE_CREATED;
 | 
			
		||||
out:
 | 
			
		||||
| 
						 | 
				
			
			@ -969,8 +969,8 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
 | 
			
		||||
	p9_debug(P9_DEBUG_VFS, "\n");
 | 
			
		||||
	retval = 0;
 | 
			
		||||
	old_inode = old_dentry->d_inode;
 | 
			
		||||
	new_inode = new_dentry->d_inode;
 | 
			
		||||
	old_inode = d_inode(old_dentry);
 | 
			
		||||
	new_inode = d_inode(new_dentry);
 | 
			
		||||
	v9ses = v9fs_inode2v9ses(old_inode);
 | 
			
		||||
	oldfid = v9fs_fid_lookup(old_dentry);
 | 
			
		||||
	if (IS_ERR(oldfid))
 | 
			
		||||
| 
						 | 
				
			
			@ -1061,7 +1061,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
	p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
 | 
			
		||||
	v9ses = v9fs_dentry2v9ses(dentry);
 | 
			
		||||
	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
 | 
			
		||||
		generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
		generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	fid = v9fs_fid_lookup(dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -1072,8 +1072,8 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
	if (IS_ERR(st))
 | 
			
		||||
		return PTR_ERR(st);
 | 
			
		||||
 | 
			
		||||
	v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
 | 
			
		||||
	generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
	v9fs_stat2inode(st, d_inode(dentry), d_inode(dentry)->i_sb);
 | 
			
		||||
	generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
 | 
			
		||||
	p9stat_free(st);
 | 
			
		||||
	kfree(st);
 | 
			
		||||
| 
						 | 
				
			
			@ -1095,7 +1095,7 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
 | 
			
		|||
	struct p9_wstat wstat;
 | 
			
		||||
 | 
			
		||||
	p9_debug(P9_DEBUG_VFS, "\n");
 | 
			
		||||
	retval = inode_change_ok(dentry->d_inode, iattr);
 | 
			
		||||
	retval = inode_change_ok(d_inode(dentry), iattr);
 | 
			
		||||
	if (retval)
 | 
			
		||||
		return retval;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1128,20 +1128,20 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
 | 
			
		|||
 | 
			
		||||
	/* Write all dirty data */
 | 
			
		||||
	if (d_is_reg(dentry))
 | 
			
		||||
		filemap_write_and_wait(dentry->d_inode->i_mapping);
 | 
			
		||||
		filemap_write_and_wait(d_inode(dentry)->i_mapping);
 | 
			
		||||
 | 
			
		||||
	retval = p9_client_wstat(fid, &wstat);
 | 
			
		||||
	if (retval < 0)
 | 
			
		||||
		return retval;
 | 
			
		||||
 | 
			
		||||
	if ((iattr->ia_valid & ATTR_SIZE) &&
 | 
			
		||||
	    iattr->ia_size != i_size_read(dentry->d_inode))
 | 
			
		||||
		truncate_setsize(dentry->d_inode, iattr->ia_size);
 | 
			
		||||
	    iattr->ia_size != i_size_read(d_inode(dentry)))
 | 
			
		||||
		truncate_setsize(d_inode(dentry), iattr->ia_size);
 | 
			
		||||
 | 
			
		||||
	v9fs_invalidate_inode_attr(dentry->d_inode);
 | 
			
		||||
	v9fs_invalidate_inode_attr(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	setattr_copy(dentry->d_inode, iattr);
 | 
			
		||||
	mark_inode_dirty(dentry->d_inode);
 | 
			
		||||
	setattr_copy(d_inode(dentry), iattr);
 | 
			
		||||
	mark_inode_dirty(d_inode(dentry));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1403,7 +1403,7 @@ v9fs_vfs_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
	retval = v9fs_vfs_mkspecial(dir, dentry, P9_DMLINK, name);
 | 
			
		||||
	__putname(name);
 | 
			
		||||
	if (!retval) {
 | 
			
		||||
		v9fs_refresh_inode(oldfid, old_dentry->d_inode);
 | 
			
		||||
		v9fs_refresh_inode(oldfid, d_inode(old_dentry));
 | 
			
		||||
		v9fs_invalidate_inode_attr(dir);
 | 
			
		||||
	}
 | 
			
		||||
clunk_fid:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -265,7 +265,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/* Only creates */
 | 
			
		||||
	if (!(flags & O_CREAT) || dentry->d_inode)
 | 
			
		||||
	if (!(flags & O_CREAT) || d_really_is_positive(dentry))
 | 
			
		||||
		return	finish_no_open(file, res);
 | 
			
		||||
 | 
			
		||||
	v9ses = v9fs_inode2v9ses(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -481,7 +481,7 @@ v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
	p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
 | 
			
		||||
	v9ses = v9fs_dentry2v9ses(dentry);
 | 
			
		||||
	if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
 | 
			
		||||
		generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
		generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	fid = v9fs_fid_lookup(dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -496,8 +496,8 @@ v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
	if (IS_ERR(st))
 | 
			
		||||
		return PTR_ERR(st);
 | 
			
		||||
 | 
			
		||||
	v9fs_stat2inode_dotl(st, dentry->d_inode);
 | 
			
		||||
	generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
	v9fs_stat2inode_dotl(st, d_inode(dentry));
 | 
			
		||||
	generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
	/* Change block size to what the server returned */
 | 
			
		||||
	stat->blksize = st->st_blksize;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -557,7 +557,7 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr)
 | 
			
		|||
	int retval;
 | 
			
		||||
	struct p9_fid *fid;
 | 
			
		||||
	struct p9_iattr_dotl p9attr;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	p9_debug(P9_DEBUG_VFS, "\n");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -795,10 +795,10 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
		if (IS_ERR(fid))
 | 
			
		||||
			return PTR_ERR(fid);
 | 
			
		||||
 | 
			
		||||
		v9fs_refresh_inode_dotl(fid, old_dentry->d_inode);
 | 
			
		||||
		v9fs_refresh_inode_dotl(fid, d_inode(old_dentry));
 | 
			
		||||
	}
 | 
			
		||||
	ihold(old_dentry->d_inode);
 | 
			
		||||
	d_instantiate(dentry, old_dentry->d_inode);
 | 
			
		||||
	ihold(d_inode(old_dentry));
 | 
			
		||||
	d_instantiate(dentry, d_inode(old_dentry));
 | 
			
		||||
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -168,8 +168,8 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
 | 
			
		|||
			retval = PTR_ERR(st);
 | 
			
		||||
			goto release_sb;
 | 
			
		||||
		}
 | 
			
		||||
		root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
 | 
			
		||||
		v9fs_stat2inode_dotl(st, root->d_inode);
 | 
			
		||||
		d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
 | 
			
		||||
		v9fs_stat2inode_dotl(st, d_inode(root));
 | 
			
		||||
		kfree(st);
 | 
			
		||||
	} else {
 | 
			
		||||
		struct p9_wstat *st = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,8 +179,8 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
 | 
			
		|||
			goto release_sb;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
 | 
			
		||||
		v9fs_stat2inode(st, root->d_inode, sb);
 | 
			
		||||
		d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
 | 
			
		||||
		v9fs_stat2inode(st, d_inode(root), sb);
 | 
			
		||||
 | 
			
		||||
		p9stat_free(st);
 | 
			
		||||
		kfree(st);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -298,7 +298,7 @@ adfs_iget(struct super_block *sb, struct object_info *obj)
 | 
			
		|||
int
 | 
			
		||||
adfs_notify_change(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct super_block *sb = inode->i_sb;
 | 
			
		||||
	unsigned int ia_valid = attr->ia_valid;
 | 
			
		||||
	int error;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ affs_fix_dcache(struct inode *inode, u32 entry_ino)
 | 
			
		|||
static int
 | 
			
		||||
affs_remove_link(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir, *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *dir, *inode = d_inode(dentry);
 | 
			
		||||
	struct super_block *sb = inode->i_sb;
 | 
			
		||||
	struct buffer_head *bh = NULL, *link_bh = NULL;
 | 
			
		||||
	u32 link_ino, ino;
 | 
			
		||||
| 
						 | 
				
			
			@ -268,11 +268,11 @@ affs_remove_header(struct dentry *dentry)
 | 
			
		|||
	struct buffer_head *bh = NULL;
 | 
			
		||||
	int retval;
 | 
			
		||||
 | 
			
		||||
	dir = dentry->d_parent->d_inode;
 | 
			
		||||
	dir = d_inode(dentry->d_parent);
 | 
			
		||||
	sb = dir->i_sb;
 | 
			
		||||
 | 
			
		||||
	retval = -ENOENT;
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	if (!inode)
 | 
			
		||||
		goto done;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -471,7 +471,7 @@ affs_warning(struct super_block *sb, const char *function, const char *fmt, ...)
 | 
			
		|||
bool
 | 
			
		||||
affs_nofilenametruncate(const struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	return AFFS_SB(inode->i_sb)->s_flags & SF_NO_TRUNCATE;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -212,7 +212,7 @@ affs_write_inode(struct inode *inode, struct writeback_control *wbc)
 | 
			
		|||
int
 | 
			
		||||
affs_notify_change(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
	pr_debug("notify_change(%lu,0x%x)\n", inode->i_ino, attr->ia_valid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -250,7 +250,7 @@ int
 | 
			
		|||
affs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	pr_debug("%s(dir=%lu, %lu \"%pd\")\n", __func__, dir->i_ino,
 | 
			
		||||
		 dentry->d_inode->i_ino, dentry);
 | 
			
		||||
		 d_inode(dentry)->i_ino, dentry);
 | 
			
		||||
 | 
			
		||||
	return affs_remove_header(dentry);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -318,7 +318,7 @@ int
 | 
			
		|||
affs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	pr_debug("%s(dir=%lu, %lu \"%pd\")\n", __func__, dir->i_ino,
 | 
			
		||||
		 dentry->d_inode->i_ino, dentry);
 | 
			
		||||
		 d_inode(dentry)->i_ino, dentry);
 | 
			
		||||
 | 
			
		||||
	return affs_remove_header(dentry);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -401,7 +401,7 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
 | 
			
		|||
int
 | 
			
		||||
affs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old_dentry);
 | 
			
		||||
 | 
			
		||||
	pr_debug("%s(%lu, %lu, \"%pd\")\n", __func__, inode->i_ino, dir->i_ino,
 | 
			
		||||
		 dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -428,13 +428,13 @@ affs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
		return retval;
 | 
			
		||||
 | 
			
		||||
	/* Unlink destination if it already exists */
 | 
			
		||||
	if (new_dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_positive(new_dentry)) {
 | 
			
		||||
		retval = affs_remove_header(new_dentry);
 | 
			
		||||
		if (retval)
 | 
			
		||||
			return retval;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bh = affs_bread(sb, old_dentry->d_inode->i_ino);
 | 
			
		||||
	bh = affs_bread(sb, d_inode(old_dentry)->i_ino);
 | 
			
		||||
	if (!bh)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								fs/afs/dir.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								fs/afs/dir.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -505,7 +505,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	_enter("{%x:%u},%p{%pd},",
 | 
			
		||||
	       vnode->fid.vid, vnode->fid.vnode, dentry, dentry);
 | 
			
		||||
 | 
			
		||||
	ASSERTCMP(dentry->d_inode, ==, NULL);
 | 
			
		||||
	ASSERTCMP(d_inode(dentry), ==, NULL);
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_name.len >= AFSNAMEMAX) {
 | 
			
		||||
		_leave(" = -ENAMETOOLONG");
 | 
			
		||||
| 
						 | 
				
			
			@ -563,8 +563,8 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	_leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%u }",
 | 
			
		||||
	       fid.vnode,
 | 
			
		||||
	       fid.unique,
 | 
			
		||||
	       dentry->d_inode->i_ino,
 | 
			
		||||
	       dentry->d_inode->i_generation);
 | 
			
		||||
	       d_inode(dentry)->i_ino,
 | 
			
		||||
	       d_inode(dentry)->i_generation);
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -586,9 +586,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
	if (flags & LOOKUP_RCU)
 | 
			
		||||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
	vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode)
 | 
			
		||||
	if (d_really_is_positive(dentry))
 | 
			
		||||
		_enter("{v={%x:%u} n=%pd fl=%lx},",
 | 
			
		||||
		       vnode->fid.vid, vnode->fid.vnode, dentry,
 | 
			
		||||
		       vnode->flags);
 | 
			
		||||
| 
						 | 
				
			
			@ -601,7 +601,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
 | 
			
		||||
	/* lock down the parent dentry so we can peer at it */
 | 
			
		||||
	parent = dget_parent(dentry);
 | 
			
		||||
	dir = AFS_FS_I(parent->d_inode);
 | 
			
		||||
	dir = AFS_FS_I(d_inode(parent));
 | 
			
		||||
 | 
			
		||||
	/* validate the parent directory */
 | 
			
		||||
	if (test_bit(AFS_VNODE_MODIFIED, &dir->flags))
 | 
			
		||||
| 
						 | 
				
			
			@ -623,9 +623,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
	switch (ret) {
 | 
			
		||||
	case 0:
 | 
			
		||||
		/* the filename maps to something */
 | 
			
		||||
		if (!dentry->d_inode)
 | 
			
		||||
		if (d_really_is_negative(dentry))
 | 
			
		||||
			goto out_bad;
 | 
			
		||||
		if (is_bad_inode(dentry->d_inode)) {
 | 
			
		||||
		if (is_bad_inode(d_inode(dentry))) {
 | 
			
		||||
			printk("kAFS: afs_d_revalidate: %pd2 has bad inode\n",
 | 
			
		||||
			       dentry);
 | 
			
		||||
			goto out_bad;
 | 
			
		||||
| 
						 | 
				
			
			@ -647,7 +647,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
			_debug("%pd: file deleted (uq %u -> %u I:%u)",
 | 
			
		||||
			       dentry, fid.unique,
 | 
			
		||||
			       vnode->fid.unique,
 | 
			
		||||
			       dentry->d_inode->i_generation);
 | 
			
		||||
			       d_inode(dentry)->i_generation);
 | 
			
		||||
			spin_lock(&vnode->lock);
 | 
			
		||||
			set_bit(AFS_VNODE_DELETED, &vnode->flags);
 | 
			
		||||
			spin_unlock(&vnode->lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -658,7 +658,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
	case -ENOENT:
 | 
			
		||||
		/* the filename is unknown */
 | 
			
		||||
		_debug("%pd: dirent not found", dentry);
 | 
			
		||||
		if (dentry->d_inode)
 | 
			
		||||
		if (d_really_is_positive(dentry))
 | 
			
		||||
			goto not_found;
 | 
			
		||||
		goto out_valid;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -703,9 +703,9 @@ static int afs_d_delete(const struct dentry *dentry)
 | 
			
		|||
	if (dentry->d_flags & DCACHE_NFSFS_RENAMED)
 | 
			
		||||
		goto zap;
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode &&
 | 
			
		||||
	    (test_bit(AFS_VNODE_DELETED,   &AFS_FS_I(dentry->d_inode)->flags) ||
 | 
			
		||||
	     test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(dentry->d_inode)->flags)))
 | 
			
		||||
	if (d_really_is_positive(dentry) &&
 | 
			
		||||
	    (test_bit(AFS_VNODE_DELETED,   &AFS_FS_I(d_inode(dentry))->flags) ||
 | 
			
		||||
	     test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(d_inode(dentry))->flags)))
 | 
			
		||||
		goto zap;
 | 
			
		||||
 | 
			
		||||
	_leave(" = 0 [keep]");
 | 
			
		||||
| 
						 | 
				
			
			@ -814,8 +814,8 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
	if (ret < 0)
 | 
			
		||||
		goto rmdir_error;
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode) {
 | 
			
		||||
		vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
	if (d_really_is_positive(dentry)) {
 | 
			
		||||
		vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
		clear_nlink(&vnode->vfs_inode);
 | 
			
		||||
		set_bit(AFS_VNODE_DELETED, &vnode->flags);
 | 
			
		||||
		afs_discard_callback_on_delete(vnode);
 | 
			
		||||
| 
						 | 
				
			
			@ -856,8 +856,8 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode) {
 | 
			
		||||
		vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
	if (d_really_is_positive(dentry)) {
 | 
			
		||||
		vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
		/* make sure we have a callback promise on the victim */
 | 
			
		||||
		ret = afs_validate(vnode, key);
 | 
			
		||||
| 
						 | 
				
			
			@ -869,7 +869,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
	if (ret < 0)
 | 
			
		||||
		goto remove_error;
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_positive(dentry)) {
 | 
			
		||||
		/* if the file wasn't deleted due to excess hard links, the
 | 
			
		||||
		 * fileserver will break the callback promise on the file - if
 | 
			
		||||
		 * it had one - before it returns to us, and if it was deleted,
 | 
			
		||||
| 
						 | 
				
			
			@ -879,7 +879,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
		 * or it was outstanding on a different server, then it won't
 | 
			
		||||
		 * break it either...
 | 
			
		||||
		 */
 | 
			
		||||
		vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
		vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
		if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
 | 
			
		||||
			_debug("AFS_VNODE_DELETED");
 | 
			
		||||
		if (test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags))
 | 
			
		||||
| 
						 | 
				
			
			@ -977,7 +977,7 @@ static int afs_link(struct dentry *from, struct inode *dir,
 | 
			
		|||
	struct key *key;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	vnode = AFS_FS_I(from->d_inode);
 | 
			
		||||
	vnode = AFS_FS_I(d_inode(from));
 | 
			
		||||
	dvnode = AFS_FS_I(dir);
 | 
			
		||||
 | 
			
		||||
	_enter("{%x:%u},{%x:%u},{%pd}",
 | 
			
		||||
| 
						 | 
				
			
			@ -1089,7 +1089,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	struct key *key;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	vnode = AFS_FS_I(old_dentry->d_inode);
 | 
			
		||||
	vnode = AFS_FS_I(d_inode(old_dentry));
 | 
			
		||||
	orig_dvnode = AFS_FS_I(old_dir);
 | 
			
		||||
	new_dvnode = AFS_FS_I(new_dir);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -379,7 +379,7 @@ int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
{
 | 
			
		||||
	struct inode *inode;
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	_enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -458,7 +458,7 @@ void afs_evict_inode(struct inode *inode)
 | 
			
		|||
 */
 | 
			
		||||
int afs_setattr(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
	struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
	struct key *key;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
 | 
			
		|||
 | 
			
		||||
	_enter("{%pd}", mntpt);
 | 
			
		||||
 | 
			
		||||
	BUG_ON(!mntpt->d_inode);
 | 
			
		||||
	BUG_ON(!d_inode(mntpt));
 | 
			
		||||
 | 
			
		||||
	ret = -ENOMEM;
 | 
			
		||||
	devname = (char *) get_zeroed_page(GFP_KERNEL);
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
 | 
			
		|||
	if (!options)
 | 
			
		||||
		goto error_no_options;
 | 
			
		||||
 | 
			
		||||
	vnode = AFS_FS_I(mntpt->d_inode);
 | 
			
		||||
	vnode = AFS_FS_I(d_inode(mntpt));
 | 
			
		||||
	if (test_bit(AFS_VNODE_PSEUDODIR, &vnode->flags)) {
 | 
			
		||||
		/* if the directory is a pseudo directory, use the d_name */
 | 
			
		||||
		static const char afs_root_cell[] = ":root.cell.";
 | 
			
		||||
| 
						 | 
				
			
			@ -169,14 +169,14 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
 | 
			
		|||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		/* read the contents of the AFS special symlink */
 | 
			
		||||
		loff_t size = i_size_read(mntpt->d_inode);
 | 
			
		||||
		loff_t size = i_size_read(d_inode(mntpt));
 | 
			
		||||
		char *buf;
 | 
			
		||||
 | 
			
		||||
		ret = -EINVAL;
 | 
			
		||||
		if (size > PAGE_SIZE - 1)
 | 
			
		||||
			goto error_no_page;
 | 
			
		||||
 | 
			
		||||
		page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL);
 | 
			
		||||
		page = read_mapping_page(d_inode(mntpt)->i_mapping, 0, NULL);
 | 
			
		||||
		if (IS_ERR(page)) {
 | 
			
		||||
			ret = PTR_ERR(page);
 | 
			
		||||
			goto error_no_page;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -529,7 +529,7 @@ static void afs_destroy_inode(struct inode *inode)
 | 
			
		|||
static int afs_statfs(struct dentry *dentry, struct kstatfs *buf)
 | 
			
		||||
{
 | 
			
		||||
	struct afs_volume_status vs;
 | 
			
		||||
	struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
 | 
			
		||||
	struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
 | 
			
		||||
	struct key *key;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -235,12 +235,12 @@ static inline u32 autofs4_get_dev(struct autofs_sb_info *sbi)
 | 
			
		|||
 | 
			
		||||
static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
 | 
			
		||||
{
 | 
			
		||||
	return sbi->sb->s_root->d_inode->i_ino;
 | 
			
		||||
	return d_inode(sbi->sb->s_root)->i_ino;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int simple_positive(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	return dentry->d_inode && !d_unhashed(dentry);
 | 
			
		||||
	return d_really_is_positive(dentry) && !d_unhashed(dentry);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void __autofs4_add_expiring(struct dentry *dentry)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -374,7 +374,7 @@ static struct dentry *should_expire(struct dentry *dentry,
 | 
			
		|||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode && d_is_symlink(dentry)) {
 | 
			
		||||
	if (d_really_is_positive(dentry) && d_is_symlink(dentry)) {
 | 
			
		||||
		DPRINTK("checking symlink %p %pd", dentry, dentry);
 | 
			
		||||
		/*
 | 
			
		||||
		 * A symlink can't be "busy" in the usual sense so
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ void autofs4_kill_sb(struct super_block *sb)
 | 
			
		|||
static int autofs4_show_options(struct seq_file *m, struct dentry *root)
 | 
			
		||||
{
 | 
			
		||||
	struct autofs_sb_info *sbi = autofs4_sbi(root->d_sb);
 | 
			
		||||
	struct inode *root_inode = root->d_sb->s_root->d_inode;
 | 
			
		||||
	struct inode *root_inode = d_inode(root->d_sb->s_root);
 | 
			
		||||
 | 
			
		||||
	if (!sbi)
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -352,8 +352,8 @@ struct inode *autofs4_get_inode(struct super_block *sb, umode_t mode)
 | 
			
		|||
 | 
			
		||||
	inode->i_mode = mode;
 | 
			
		||||
	if (sb->s_root) {
 | 
			
		||||
		inode->i_uid = sb->s_root->d_inode->i_uid;
 | 
			
		||||
		inode->i_gid = sb->s_root->d_inode->i_gid;
 | 
			
		||||
		inode->i_uid = d_inode(sb->s_root)->i_uid;
 | 
			
		||||
		inode->i_gid = d_inode(sb->s_root)->i_gid;
 | 
			
		||||
	}
 | 
			
		||||
	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
 | 
			
		||||
	inode->i_ino = get_next_ino();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -240,7 +240,7 @@ static struct dentry *autofs4_lookup_expiring(struct dentry *dentry,
 | 
			
		|||
		spin_lock(&expiring->d_lock);
 | 
			
		||||
 | 
			
		||||
		/* We've already been dentry_iput or unlinked */
 | 
			
		||||
		if (!expiring->d_inode)
 | 
			
		||||
		if (d_really_is_negative(expiring))
 | 
			
		||||
			goto next;
 | 
			
		||||
 | 
			
		||||
		qstr = &expiring->d_name;
 | 
			
		||||
| 
						 | 
				
			
			@ -371,7 +371,7 @@ static struct vfsmount *autofs4_d_automount(struct path *path)
 | 
			
		|||
	 * having d_mountpoint() true, so there's no need to call back
 | 
			
		||||
	 * to the daemon.
 | 
			
		||||
	 */
 | 
			
		||||
	if (dentry->d_inode && d_is_symlink(dentry)) {
 | 
			
		||||
	if (d_really_is_positive(dentry) && d_is_symlink(dentry)) {
 | 
			
		||||
		spin_unlock(&sbi->fs_lock);
 | 
			
		||||
		goto done;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -459,7 +459,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
 | 
			
		|||
			return 0;
 | 
			
		||||
		if (d_mountpoint(dentry))
 | 
			
		||||
			return 0;
 | 
			
		||||
		inode = ACCESS_ONCE(dentry->d_inode);
 | 
			
		||||
		inode = d_inode_rcu(dentry);
 | 
			
		||||
		if (inode && S_ISLNK(inode->i_mode))
 | 
			
		||||
			return -EISDIR;
 | 
			
		||||
		if (list_empty(&dentry->d_subdirs))
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +485,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
 | 
			
		|||
		 * an incorrect ELOOP error return.
 | 
			
		||||
		 */
 | 
			
		||||
		if ((!d_mountpoint(dentry) && !simple_empty(dentry)) ||
 | 
			
		||||
		    (dentry->d_inode && d_is_symlink(dentry)))
 | 
			
		||||
		    (d_really_is_positive(dentry) && d_is_symlink(dentry)))
 | 
			
		||||
			status = -EISDIR;
 | 
			
		||||
	}
 | 
			
		||||
	spin_unlock(&sbi->fs_lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -625,8 +625,8 @@ static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
	}
 | 
			
		||||
	dput(ino->dentry);
 | 
			
		||||
 | 
			
		||||
	dentry->d_inode->i_size = 0;
 | 
			
		||||
	clear_nlink(dentry->d_inode);
 | 
			
		||||
	d_inode(dentry)->i_size = 0;
 | 
			
		||||
	clear_nlink(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	dir->i_mtime = CURRENT_TIME;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -719,8 +719,8 @@ static int autofs4_dir_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
			atomic_dec(&p_ino->count);
 | 
			
		||||
	}
 | 
			
		||||
	dput(ino->dentry);
 | 
			
		||||
	dentry->d_inode->i_size = 0;
 | 
			
		||||
	clear_nlink(dentry->d_inode);
 | 
			
		||||
	d_inode(dentry)->i_size = 0;
 | 
			
		||||
	clear_nlink(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	if (dir->i_nlink)
 | 
			
		||||
		drop_nlink(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -839,7 +839,7 @@ static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
 | 
			
		|||
*/
 | 
			
		||||
int is_autofs4_dentry(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	return dentry && dentry->d_inode &&
 | 
			
		||||
	return dentry && d_really_is_positive(dentry) &&
 | 
			
		||||
		dentry->d_op == &autofs4_dentry_operations &&
 | 
			
		||||
		dentry->d_fsdata != NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		|||
	struct autofs_info *ino = autofs4_dentry_ino(dentry);
 | 
			
		||||
	if (ino && !autofs4_oz_mode(sbi))
 | 
			
		||||
		ino->last_used = jiffies;
 | 
			
		||||
	nd_set_link(nd, dentry->d_inode->i_private);
 | 
			
		||||
	nd_set_link(nd, d_inode(dentry)->i_private);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -322,7 +322,7 @@ static int validate_request(struct autofs_wait_queue **wait,
 | 
			
		|||
		 * continue on and create a new request.
 | 
			
		||||
		 */
 | 
			
		||||
		if (!IS_ROOT(dentry)) {
 | 
			
		||||
			if (dentry->d_inode && d_unhashed(dentry)) {
 | 
			
		||||
			if (d_really_is_positive(dentry) && d_unhashed(dentry)) {
 | 
			
		||||
				struct dentry *parent = dentry->d_parent;
 | 
			
		||||
				new = d_lookup(parent, &dentry->d_name);
 | 
			
		||||
				if (new)
 | 
			
		||||
| 
						 | 
				
			
			@ -364,7 +364,7 @@ int autofs4_wait(struct autofs_sb_info *sbi, struct dentry *dentry,
 | 
			
		|||
	if (pid == 0 || tgid == 0)
 | 
			
		||||
		return -ENOENT;
 | 
			
		||||
 | 
			
		||||
	if (!dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_negative(dentry)) {
 | 
			
		||||
		/*
 | 
			
		||||
		 * A wait for a negative dentry is invalid for certain
 | 
			
		||||
		 * cases. A direct or offset mount "always" has its mount
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -472,7 +472,7 @@ static void *
 | 
			
		|||
befs_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct super_block *sb = dentry->d_sb;
 | 
			
		||||
	befs_inode_info *befs_ino = BEFS_I(dentry->d_inode);
 | 
			
		||||
	befs_inode_info *befs_ino = BEFS_I(d_inode(dentry));
 | 
			
		||||
	befs_data_stream *data = &befs_ino->i_data.ds;
 | 
			
		||||
	befs_off_t len = data->size;
 | 
			
		||||
	char *link;
 | 
			
		||||
| 
						 | 
				
			
			@ -502,7 +502,7 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		|||
static void *
 | 
			
		||||
befs_fast_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	befs_inode_info *befs_ino = BEFS_I(dentry->d_inode);
 | 
			
		||||
	befs_inode_info *befs_ino = BEFS_I(d_inode(dentry));
 | 
			
		||||
	nd_set_link(nd, befs_ino->i_data.symlink);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -153,7 +153,7 @@ static struct dentry *bfs_lookup(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
static int bfs_link(struct dentry *old, struct inode *dir,
 | 
			
		||||
						struct dentry *new)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = old->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old);
 | 
			
		||||
	struct bfs_sb_info *info = BFS_SB(inode->i_sb);
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -176,7 +176,7 @@ static int bfs_link(struct dentry *old, struct inode *dir,
 | 
			
		|||
static int bfs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	int error = -ENOENT;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct buffer_head *bh;
 | 
			
		||||
	struct bfs_dirent *de;
 | 
			
		||||
	struct bfs_sb_info *info = BFS_SB(inode->i_sb);
 | 
			
		||||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	int error = -ENOENT;
 | 
			
		||||
 | 
			
		||||
	old_bh = new_bh = NULL;
 | 
			
		||||
	old_inode = old_dentry->d_inode;
 | 
			
		||||
	old_inode = d_inode(old_dentry);
 | 
			
		||||
	if (S_ISDIR(old_inode->i_mode))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
		goto end_rename;
 | 
			
		||||
 | 
			
		||||
	error = -EPERM;
 | 
			
		||||
	new_inode = new_dentry->d_inode;
 | 
			
		||||
	new_inode = d_inode(new_dentry);
 | 
			
		||||
	new_bh = bfs_find_entry(new_dir, 
 | 
			
		||||
				new_dentry->d_name.name, 
 | 
			
		||||
				new_dentry->d_name.len, &new_de);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,7 +152,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,
 | 
			
		|||
 | 
			
		||||
static struct dentry *btrfs_get_parent(struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = child->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(child);
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct btrfs_path *path;
 | 
			
		||||
	struct extent_buffer *leaf;
 | 
			
		||||
| 
						 | 
				
			
			@ -220,8 +220,8 @@ static struct dentry *btrfs_get_parent(struct dentry *child)
 | 
			
		|||
static int btrfs_get_name(struct dentry *parent, char *name,
 | 
			
		||||
			  struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = child->d_inode;
 | 
			
		||||
	struct inode *dir = parent->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(child);
 | 
			
		||||
	struct inode *dir = d_inode(parent);
 | 
			
		||||
	struct btrfs_path *path;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct btrfs_inode_ref *iref;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1864,7 +1864,7 @@ static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
 | 
			
		|||
int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
 | 
			
		||||
{
 | 
			
		||||
	struct dentry *dentry = file->f_path.dentry;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
			
		||||
	struct btrfs_trans_handle *trans;
 | 
			
		||||
	struct btrfs_log_ctx ctx;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4016,16 +4016,16 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
{
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct btrfs_trans_handle *trans;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	trans = __unlink_start_trans(dir);
 | 
			
		||||
	if (IS_ERR(trans))
 | 
			
		||||
		return PTR_ERR(trans);
 | 
			
		||||
 | 
			
		||||
	btrfs_record_unlink_dir(trans, dir, dentry->d_inode, 0);
 | 
			
		||||
	btrfs_record_unlink_dir(trans, dir, d_inode(dentry), 0);
 | 
			
		||||
 | 
			
		||||
	ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
 | 
			
		||||
	ret = btrfs_unlink_inode(trans, root, dir, d_inode(dentry),
 | 
			
		||||
				 dentry->d_name.name, dentry->d_name.len);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		goto out;
 | 
			
		||||
| 
						 | 
				
			
			@ -4124,7 +4124,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
 | 
			
		|||
 | 
			
		||||
static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int err = 0;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct btrfs_trans_handle *trans;
 | 
			
		||||
| 
						 | 
				
			
			@ -4151,7 +4151,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
		goto out;
 | 
			
		||||
 | 
			
		||||
	/* now the directory is empty */
 | 
			
		||||
	err = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
 | 
			
		||||
	err = btrfs_unlink_inode(trans, root, dir, d_inode(dentry),
 | 
			
		||||
				 dentry->d_name.name, dentry->d_name.len);
 | 
			
		||||
	if (!err)
 | 
			
		||||
		btrfs_i_size_write(inode, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -4826,7 +4826,7 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
 | 
			
		|||
 | 
			
		||||
static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5416,10 +5416,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
static int btrfs_dentry_delete(const struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct btrfs_root *root;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	if (!inode && !IS_ROOT(dentry))
 | 
			
		||||
		inode = dentry->d_parent->d_inode;
 | 
			
		||||
		inode = d_inode(dentry->d_parent);
 | 
			
		||||
 | 
			
		||||
	if (inode) {
 | 
			
		||||
		root = BTRFS_I(inode)->root;
 | 
			
		||||
| 
						 | 
				
			
			@ -6226,7 +6226,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
{
 | 
			
		||||
	struct btrfs_trans_handle *trans;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct inode *inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old_dentry);
 | 
			
		||||
	u64 index;
 | 
			
		||||
	int err;
 | 
			
		||||
	int drop_inode = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -8875,7 +8875,7 @@ static int btrfs_getattr(struct vfsmount *mnt,
 | 
			
		|||
			 struct dentry *dentry, struct kstat *stat)
 | 
			
		||||
{
 | 
			
		||||
	u64 delalloc_bytes;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	u32 blocksize = inode->i_sb->s_blocksize;
 | 
			
		||||
 | 
			
		||||
	generic_fillattr(inode, stat);
 | 
			
		||||
| 
						 | 
				
			
			@ -8896,8 +8896,8 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	struct btrfs_trans_handle *trans;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(old_dir)->root;
 | 
			
		||||
	struct btrfs_root *dest = BTRFS_I(new_dir)->root;
 | 
			
		||||
	struct inode *new_inode = new_dentry->d_inode;
 | 
			
		||||
	struct inode *old_inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *new_inode = d_inode(new_dentry);
 | 
			
		||||
	struct inode *old_inode = d_inode(old_dentry);
 | 
			
		||||
	struct timespec ctime = CURRENT_TIME;
 | 
			
		||||
	u64 index = 0;
 | 
			
		||||
	u64 root_objectid;
 | 
			
		||||
| 
						 | 
				
			
			@ -9009,7 +9009,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
					old_dentry->d_name.len);
 | 
			
		||||
	} else {
 | 
			
		||||
		ret = __btrfs_unlink_inode(trans, root, old_dir,
 | 
			
		||||
					old_dentry->d_inode,
 | 
			
		||||
					d_inode(old_dentry),
 | 
			
		||||
					old_dentry->d_name.name,
 | 
			
		||||
					old_dentry->d_name.len);
 | 
			
		||||
		if (!ret)
 | 
			
		||||
| 
						 | 
				
			
			@ -9033,12 +9033,12 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
			BUG_ON(new_inode->i_nlink == 0);
 | 
			
		||||
		} else {
 | 
			
		||||
			ret = btrfs_unlink_inode(trans, dest, new_dir,
 | 
			
		||||
						 new_dentry->d_inode,
 | 
			
		||||
						 d_inode(new_dentry),
 | 
			
		||||
						 new_dentry->d_name.name,
 | 
			
		||||
						 new_dentry->d_name.len);
 | 
			
		||||
		}
 | 
			
		||||
		if (!ret && new_inode->i_nlink == 0)
 | 
			
		||||
			ret = btrfs_orphan_add(trans, new_dentry->d_inode);
 | 
			
		||||
			ret = btrfs_orphan_add(trans, d_inode(new_dentry));
 | 
			
		||||
		if (ret) {
 | 
			
		||||
			btrfs_abort_transaction(trans, root, ret);
 | 
			
		||||
			goto out_fail;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -717,7 +717,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
 | 
			
		|||
	if (ret)
 | 
			
		||||
		goto fail;
 | 
			
		||||
 | 
			
		||||
	inode = btrfs_lookup_dentry(dentry->d_parent->d_inode, dentry);
 | 
			
		||||
	inode = btrfs_lookup_dentry(d_inode(dentry->d_parent), dentry);
 | 
			
		||||
	if (IS_ERR(inode)) {
 | 
			
		||||
		ret = PTR_ERR(inode);
 | 
			
		||||
		goto fail;
 | 
			
		||||
| 
						 | 
				
			
			@ -761,10 +761,10 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
 | 
			
		|||
{
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
	if (!victim->d_inode)
 | 
			
		||||
	if (d_really_is_negative(victim))
 | 
			
		||||
		return -ENOENT;
 | 
			
		||||
 | 
			
		||||
	BUG_ON(victim->d_parent->d_inode != dir);
 | 
			
		||||
	BUG_ON(d_inode(victim->d_parent) != dir);
 | 
			
		||||
	audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
 | 
			
		||||
 | 
			
		||||
	error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
 | 
			
		||||
| 
						 | 
				
			
			@ -772,8 +772,8 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
 | 
			
		|||
		return error;
 | 
			
		||||
	if (IS_APPEND(dir))
 | 
			
		||||
		return -EPERM;
 | 
			
		||||
	if (check_sticky(dir, victim->d_inode) || IS_APPEND(victim->d_inode) ||
 | 
			
		||||
	    IS_IMMUTABLE(victim->d_inode) || IS_SWAPFILE(victim->d_inode))
 | 
			
		||||
	if (check_sticky(dir, d_inode(victim)) || IS_APPEND(d_inode(victim)) ||
 | 
			
		||||
	    IS_IMMUTABLE(d_inode(victim)) || IS_SWAPFILE(d_inode(victim)))
 | 
			
		||||
		return -EPERM;
 | 
			
		||||
	if (isdir) {
 | 
			
		||||
		if (!d_is_dir(victim))
 | 
			
		||||
| 
						 | 
				
			
			@ -792,7 +792,7 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
 | 
			
		|||
/* copy of may_create in fs/namei.c() */
 | 
			
		||||
static inline int btrfs_may_create(struct inode *dir, struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	if (child->d_inode)
 | 
			
		||||
	if (d_really_is_positive(child))
 | 
			
		||||
		return -EEXIST;
 | 
			
		||||
	if (IS_DEADDIR(dir))
 | 
			
		||||
		return -ENOENT;
 | 
			
		||||
| 
						 | 
				
			
			@ -810,7 +810,7 @@ static noinline int btrfs_mksubvol(struct path *parent,
 | 
			
		|||
				   u64 *async_transid, bool readonly,
 | 
			
		||||
				   struct btrfs_qgroup_inherit *inherit)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir  = parent->dentry->d_inode;
 | 
			
		||||
	struct inode *dir  = d_inode(parent->dentry);
 | 
			
		||||
	struct dentry *dentry;
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -824,7 +824,7 @@ static noinline int btrfs_mksubvol(struct path *parent,
 | 
			
		|||
		goto out_unlock;
 | 
			
		||||
 | 
			
		||||
	error = -EEXIST;
 | 
			
		||||
	if (dentry->d_inode)
 | 
			
		||||
	if (d_really_is_positive(dentry))
 | 
			
		||||
		goto out_dput;
 | 
			
		||||
 | 
			
		||||
	error = btrfs_may_create(dir, dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -2294,7 +2294,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
 | 
			
		|||
{
 | 
			
		||||
	struct dentry *parent = file->f_path.dentry;
 | 
			
		||||
	struct dentry *dentry;
 | 
			
		||||
	struct inode *dir = parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(parent);
 | 
			
		||||
	struct inode *inode;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dir)->root;
 | 
			
		||||
	struct btrfs_root *dest = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -2333,12 +2333,12 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
 | 
			
		|||
		goto out_unlock_dir;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_negative(dentry)) {
 | 
			
		||||
		err = -ENOENT;
 | 
			
		||||
		goto out_dput;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	dest = BTRFS_I(inode)->root;
 | 
			
		||||
	if (!capable(CAP_SYS_ADMIN)) {
 | 
			
		||||
		/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -916,7 +916,7 @@ static struct dentry *get_default_root(struct super_block *sb,
 | 
			
		|||
	 * a reference to the dentry.  We will have already gotten a reference
 | 
			
		||||
	 * to the inode in btrfs_fill_super so we're good to go.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!new && sb->s_root->d_inode == inode) {
 | 
			
		||||
	if (!new && d_inode(sb->s_root) == inode) {
 | 
			
		||||
		iput(inode);
 | 
			
		||||
		return dget(sb->s_root);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1221,7 +1221,7 @@ static struct dentry *mount_subvol(const char *subvol_name, int flags,
 | 
			
		|||
 | 
			
		||||
	root = mount_subtree(mnt, subvol_name);
 | 
			
		||||
 | 
			
		||||
	if (!IS_ERR(root) && !is_subvolume_inode(root->d_inode)) {
 | 
			
		||||
	if (!IS_ERR(root) && !is_subvolume_inode(d_inode(root))) {
 | 
			
		||||
		struct super_block *s = root->d_sb;
 | 
			
		||||
		dput(root);
 | 
			
		||||
		root = ERR_PTR(-EINVAL);
 | 
			
		||||
| 
						 | 
				
			
			@ -1886,8 +1886,8 @@ static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)
 | 
			
		|||
	buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
 | 
			
		||||
	buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
 | 
			
		||||
	/* Mask in the root object ID too, to disambiguate subvols */
 | 
			
		||||
	buf->f_fsid.val[0] ^= BTRFS_I(dentry->d_inode)->root->objectid >> 32;
 | 
			
		||||
	buf->f_fsid.val[1] ^= BTRFS_I(dentry->d_inode)->root->objectid;
 | 
			
		||||
	buf->f_fsid.val[0] ^= BTRFS_I(d_inode(dentry))->root->objectid >> 32;
 | 
			
		||||
	buf->f_fsid.val[1] ^= BTRFS_I(d_inode(dentry))->root->objectid;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4327,9 +4327,9 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
 | 
			
		|||
			goto out;
 | 
			
		||||
 | 
			
		||||
	if (!S_ISDIR(inode->i_mode)) {
 | 
			
		||||
		if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
 | 
			
		||||
		if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
 | 
			
		||||
			goto out;
 | 
			
		||||
		inode = parent->d_inode;
 | 
			
		||||
		inode = d_inode(parent);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (1) {
 | 
			
		||||
| 
						 | 
				
			
			@ -4355,7 +4355,7 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
 | 
			
		|||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
 | 
			
		||||
		if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		if (IS_ROOT(parent))
 | 
			
		||||
| 
						 | 
				
			
			@ -4364,7 +4364,7 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
 | 
			
		|||
		parent = dget_parent(parent);
 | 
			
		||||
		dput(old_parent);
 | 
			
		||||
		old_parent = parent;
 | 
			
		||||
		inode = parent->d_inode;
 | 
			
		||||
		inode = d_inode(parent);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	dput(old_parent);
 | 
			
		||||
| 
						 | 
				
			
			@ -4450,10 +4450,10 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	while (1) {
 | 
			
		||||
		if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
 | 
			
		||||
		if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		inode = parent->d_inode;
 | 
			
		||||
		inode = d_inode(parent);
 | 
			
		||||
		if (root != BTRFS_I(inode)->root)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4515,7 +4515,7 @@ int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
 | 
			
		|||
	struct dentry *parent = dget_parent(dentry);
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	ret = btrfs_log_inode_parent(trans, root, dentry->d_inode, parent,
 | 
			
		||||
	ret = btrfs_log_inode_parent(trans, root, d_inode(dentry), parent,
 | 
			
		||||
				     start, end, 0, ctx);
 | 
			
		||||
	dput(parent);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -261,7 +261,7 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans,
 | 
			
		|||
ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct btrfs_key key, found_key;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
			
		||||
	struct btrfs_path *path;
 | 
			
		||||
	struct extent_buffer *leaf;
 | 
			
		||||
| 
						 | 
				
			
			@ -390,13 +390,13 @@ ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
 | 
			
		||||
	if (!btrfs_is_valid_xattr(name))
 | 
			
		||||
		return -EOPNOTSUPP;
 | 
			
		||||
	return __btrfs_getxattr(dentry->d_inode, name, buffer, size);
 | 
			
		||||
	return __btrfs_getxattr(d_inode(dentry), name, buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
 | 
			
		||||
		   size_t size, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * The permission on security.* and system.* is not checked
 | 
			
		||||
| 
						 | 
				
			
			@ -417,19 +417,19 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
 | 
			
		|||
		return -EOPNOTSUPP;
 | 
			
		||||
 | 
			
		||||
	if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
 | 
			
		||||
		return btrfs_set_prop(dentry->d_inode, name,
 | 
			
		||||
		return btrfs_set_prop(d_inode(dentry), name,
 | 
			
		||||
				      value, size, flags);
 | 
			
		||||
 | 
			
		||||
	if (size == 0)
 | 
			
		||||
		value = "";  /* empty EA, do not remove */
 | 
			
		||||
 | 
			
		||||
	return __btrfs_setxattr(NULL, dentry->d_inode, name, value, size,
 | 
			
		||||
	return __btrfs_setxattr(NULL, d_inode(dentry), name, value, size,
 | 
			
		||||
				flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int btrfs_removexattr(struct dentry *dentry, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
 | 
			
		||||
	struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * The permission on security.* and system.* is not checked
 | 
			
		||||
| 
						 | 
				
			
			@ -450,10 +450,10 @@ int btrfs_removexattr(struct dentry *dentry, const char *name)
 | 
			
		|||
		return -EOPNOTSUPP;
 | 
			
		||||
 | 
			
		||||
	if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
 | 
			
		||||
		return btrfs_set_prop(dentry->d_inode, name,
 | 
			
		||||
		return btrfs_set_prop(d_inode(dentry), name,
 | 
			
		||||
				      NULL, 0, XATTR_REPLACE);
 | 
			
		||||
 | 
			
		||||
	return __btrfs_setxattr(NULL, dentry->d_inode, name, NULL, 0,
 | 
			
		||||
	return __btrfs_setxattr(NULL, d_inode(dentry), name, NULL, 0,
 | 
			
		||||
				XATTR_REPLACE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3391,7 +3391,7 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
 | 
			
		|||
int ceph_encode_dentry_release(void **p, struct dentry *dentry,
 | 
			
		||||
			       int mds, int drop, int unless)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
	struct ceph_mds_request_release *rel = *p;
 | 
			
		||||
	struct ceph_dentry_info *di = ceph_dentry(dentry);
 | 
			
		||||
	int force = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ static int mdsc_show(struct seq_file *s, void *p)
 | 
			
		|||
				path = NULL;
 | 
			
		||||
			spin_lock(&req->r_dentry->d_lock);
 | 
			
		||||
			seq_printf(s, " #%llx/%pd (%s)",
 | 
			
		||||
				   ceph_ino(req->r_dentry->d_parent->d_inode),
 | 
			
		||||
				   ceph_ino(d_inode(req->r_dentry->d_parent)),
 | 
			
		||||
				   req->r_dentry,
 | 
			
		||||
				   path ? path : "");
 | 
			
		||||
			spin_unlock(&req->r_dentry->d_lock);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,9 +49,9 @@ int ceph_init_dentry(struct dentry *dentry)
 | 
			
		|||
		goto out_unlock;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP)
 | 
			
		||||
	if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP)
 | 
			
		||||
		d_set_d_op(dentry, &ceph_dentry_ops);
 | 
			
		||||
	else if (ceph_snap(dentry->d_parent->d_inode) == CEPH_SNAPDIR)
 | 
			
		||||
	else if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_SNAPDIR)
 | 
			
		||||
		d_set_d_op(dentry, &ceph_snapdir_dentry_ops);
 | 
			
		||||
	else
 | 
			
		||||
		d_set_d_op(dentry, &ceph_snap_dentry_ops);
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ struct inode *ceph_get_dentry_parent_inode(struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
	spin_lock(&dentry->d_lock);
 | 
			
		||||
	if (!IS_ROOT(dentry)) {
 | 
			
		||||
		inode = dentry->d_parent->d_inode;
 | 
			
		||||
		inode = d_inode(dentry->d_parent);
 | 
			
		||||
		ihold(inode);
 | 
			
		||||
	}
 | 
			
		||||
	spin_unlock(&dentry->d_lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +122,7 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
 | 
			
		|||
{
 | 
			
		||||
	struct ceph_file_info *fi = file->private_data;
 | 
			
		||||
	struct dentry *parent = file->f_path.dentry;
 | 
			
		||||
	struct inode *dir = parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(parent);
 | 
			
		||||
	struct list_head *p;
 | 
			
		||||
	struct dentry *dentry, *last;
 | 
			
		||||
	struct ceph_dentry_info *di;
 | 
			
		||||
| 
						 | 
				
			
			@ -161,15 +161,15 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
 | 
			
		|||
		}
 | 
			
		||||
		spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
 | 
			
		||||
		if (di->lease_shared_gen == shared_gen &&
 | 
			
		||||
		    !d_unhashed(dentry) && dentry->d_inode &&
 | 
			
		||||
		    ceph_snap(dentry->d_inode) != CEPH_SNAPDIR &&
 | 
			
		||||
		    ceph_ino(dentry->d_inode) != CEPH_INO_CEPH &&
 | 
			
		||||
		    !d_unhashed(dentry) && d_really_is_positive(dentry) &&
 | 
			
		||||
		    ceph_snap(d_inode(dentry)) != CEPH_SNAPDIR &&
 | 
			
		||||
		    ceph_ino(d_inode(dentry)) != CEPH_INO_CEPH &&
 | 
			
		||||
		    fpos_cmp(ctx->pos, di->offset) <= 0)
 | 
			
		||||
			break;
 | 
			
		||||
		dout(" skipping %p %pd at %llu (%llu)%s%s\n", dentry,
 | 
			
		||||
		     dentry, di->offset,
 | 
			
		||||
		     ctx->pos, d_unhashed(dentry) ? " unhashed" : "",
 | 
			
		||||
		     !dentry->d_inode ? " null" : "");
 | 
			
		||||
		     !d_inode(dentry) ? " null" : "");
 | 
			
		||||
		spin_unlock(&dentry->d_lock);
 | 
			
		||||
		p = p->prev;
 | 
			
		||||
		dentry = list_entry(p, struct dentry, d_child);
 | 
			
		||||
| 
						 | 
				
			
			@ -189,11 +189,11 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos,
 | 
			
		||||
	     dentry, dentry, dentry->d_inode);
 | 
			
		||||
	     dentry, dentry, d_inode(dentry));
 | 
			
		||||
	if (!dir_emit(ctx, dentry->d_name.name,
 | 
			
		||||
		      dentry->d_name.len,
 | 
			
		||||
		      ceph_translate_ino(dentry->d_sb, dentry->d_inode->i_ino),
 | 
			
		||||
		      dentry->d_inode->i_mode >> 12)) {
 | 
			
		||||
		      ceph_translate_ino(dentry->d_sb, d_inode(dentry)->i_ino),
 | 
			
		||||
		      d_inode(dentry)->i_mode >> 12)) {
 | 
			
		||||
		if (last) {
 | 
			
		||||
			/* remember our position */
 | 
			
		||||
			fi->dentry = last;
 | 
			
		||||
| 
						 | 
				
			
			@ -535,7 +535,7 @@ int ceph_handle_snapdir(struct ceph_mds_request *req,
 | 
			
		|||
			struct dentry *dentry, int err)
 | 
			
		||||
{
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
 | 
			
		||||
	struct inode *parent = dentry->d_parent->d_inode; /* we hold i_mutex */
 | 
			
		||||
	struct inode *parent = d_inode(dentry->d_parent); /* we hold i_mutex */
 | 
			
		||||
 | 
			
		||||
	/* .snap dir? */
 | 
			
		||||
	if (err == -ENOENT &&
 | 
			
		||||
| 
						 | 
				
			
			@ -571,8 +571,8 @@ struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
 | 
			
		|||
		err = 0;
 | 
			
		||||
		if (!req->r_reply_info.head->is_dentry) {
 | 
			
		||||
			dout("ENOENT and no trace, dentry %p inode %p\n",
 | 
			
		||||
			     dentry, dentry->d_inode);
 | 
			
		||||
			if (dentry->d_inode) {
 | 
			
		||||
			     dentry, d_inode(dentry));
 | 
			
		||||
			if (d_really_is_positive(dentry)) {
 | 
			
		||||
				d_drop(dentry);
 | 
			
		||||
				err = -ENOENT;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -619,7 +619,7 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
		return ERR_PTR(err);
 | 
			
		||||
 | 
			
		||||
	/* can we conclude ENOENT locally? */
 | 
			
		||||
	if (dentry->d_inode == NULL) {
 | 
			
		||||
	if (d_really_is_negative(dentry)) {
 | 
			
		||||
		struct ceph_inode_info *ci = ceph_inode(dir);
 | 
			
		||||
		struct ceph_dentry_info *di = ceph_dentry(dentry);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -725,7 +725,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	ceph_mdsc_put_request(req);
 | 
			
		||||
out:
 | 
			
		||||
	if (!err)
 | 
			
		||||
		ceph_init_inode_acls(dentry->d_inode, &acls);
 | 
			
		||||
		ceph_init_inode_acls(d_inode(dentry), &acls);
 | 
			
		||||
	else
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	ceph_release_acls_info(&acls);
 | 
			
		||||
| 
						 | 
				
			
			@ -821,7 +821,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 | 
			
		|||
	ceph_mdsc_put_request(req);
 | 
			
		||||
out:
 | 
			
		||||
	if (!err)
 | 
			
		||||
		ceph_init_inode_acls(dentry->d_inode, &acls);
 | 
			
		||||
		ceph_init_inode_acls(d_inode(dentry), &acls);
 | 
			
		||||
	else
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	ceph_release_acls_info(&acls);
 | 
			
		||||
| 
						 | 
				
			
			@ -858,8 +858,8 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
	if (err) {
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	} else if (!req->r_reply_info.head->is_dentry) {
 | 
			
		||||
		ihold(old_dentry->d_inode);
 | 
			
		||||
		d_instantiate(dentry, old_dentry->d_inode);
 | 
			
		||||
		ihold(d_inode(old_dentry));
 | 
			
		||||
		d_instantiate(dentry, d_inode(old_dentry));
 | 
			
		||||
	}
 | 
			
		||||
	ceph_mdsc_put_request(req);
 | 
			
		||||
	return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -892,7 +892,7 @@ static int ceph_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
{
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);
 | 
			
		||||
	struct ceph_mds_client *mdsc = fsc->mdsc;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_mds_request *req;
 | 
			
		||||
	int err = -EROFS;
 | 
			
		||||
	int op;
 | 
			
		||||
| 
						 | 
				
			
			@ -957,8 +957,8 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
 | 
			
		||||
	/* release LINK_RDCACHE on source inode (mds will lock it) */
 | 
			
		||||
	req->r_old_inode_drop = CEPH_CAP_LINK_SHARED;
 | 
			
		||||
	if (new_dentry->d_inode)
 | 
			
		||||
		req->r_inode_drop = drop_caps_for_unlink(new_dentry->d_inode);
 | 
			
		||||
	if (d_really_is_positive(new_dentry))
 | 
			
		||||
		req->r_inode_drop = drop_caps_for_unlink(d_inode(new_dentry));
 | 
			
		||||
	err = ceph_mdsc_do_request(mdsc, old_dir, req);
 | 
			
		||||
	if (!err && !req->r_reply_info.head->is_dentry) {
 | 
			
		||||
		/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1024,7 +1024,7 @@ static int dentry_lease_is_valid(struct dentry *dentry)
 | 
			
		|||
			if (di->lease_renew_after &&
 | 
			
		||||
			    time_after(jiffies, di->lease_renew_after)) {
 | 
			
		||||
				/* we should renew */
 | 
			
		||||
				dir = dentry->d_parent->d_inode;
 | 
			
		||||
				dir = d_inode(dentry->d_parent);
 | 
			
		||||
				session = ceph_get_mds_session(s);
 | 
			
		||||
				seq = di->lease_seq;
 | 
			
		||||
				di->lease_renew_after = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1074,22 +1074,22 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	dout("d_revalidate %p '%pd' inode %p offset %lld\n", dentry,
 | 
			
		||||
	     dentry, dentry->d_inode, ceph_dentry(dentry)->offset);
 | 
			
		||||
	     dentry, d_inode(dentry), ceph_dentry(dentry)->offset);
 | 
			
		||||
 | 
			
		||||
	dir = ceph_get_dentry_parent_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	/* always trust cached snapped dentries, snapdir dentry */
 | 
			
		||||
	if (ceph_snap(dir) != CEPH_NOSNAP) {
 | 
			
		||||
		dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry,
 | 
			
		||||
		     dentry, dentry->d_inode);
 | 
			
		||||
		     dentry, d_inode(dentry));
 | 
			
		||||
		valid = 1;
 | 
			
		||||
	} else if (dentry->d_inode &&
 | 
			
		||||
		   ceph_snap(dentry->d_inode) == CEPH_SNAPDIR) {
 | 
			
		||||
	} else if (d_really_is_positive(dentry) &&
 | 
			
		||||
		   ceph_snap(d_inode(dentry)) == CEPH_SNAPDIR) {
 | 
			
		||||
		valid = 1;
 | 
			
		||||
	} else if (dentry_lease_is_valid(dentry) ||
 | 
			
		||||
		   dir_lease_is_valid(dir, dentry)) {
 | 
			
		||||
		if (dentry->d_inode)
 | 
			
		||||
			valid = ceph_is_any_caps(dentry->d_inode);
 | 
			
		||||
		if (d_really_is_positive(dentry))
 | 
			
		||||
			valid = ceph_is_any_caps(d_inode(dentry));
 | 
			
		||||
		else
 | 
			
		||||
			valid = 1;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1151,7 +1151,7 @@ static void ceph_d_prune(struct dentry *dentry)
 | 
			
		|||
	 * we hold d_lock, so d_parent is stable, and d_fsdata is never
 | 
			
		||||
	 * cleared until d_release
 | 
			
		||||
	 */
 | 
			
		||||
	ceph_dir_clear_complete(dentry->d_parent->d_inode);
 | 
			
		||||
	ceph_dir_clear_complete(d_inode(dentry->d_parent));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,8 +136,8 @@ static struct dentry *__get_parent(struct super_block *sb,
 | 
			
		|||
		return ERR_CAST(req);
 | 
			
		||||
 | 
			
		||||
	if (child) {
 | 
			
		||||
		req->r_inode = child->d_inode;
 | 
			
		||||
		ihold(child->d_inode);
 | 
			
		||||
		req->r_inode = d_inode(child);
 | 
			
		||||
		ihold(d_inode(child));
 | 
			
		||||
	} else {
 | 
			
		||||
		req->r_ino1 = (struct ceph_vino) {
 | 
			
		||||
			.ino = ino,
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ static struct dentry *__get_parent(struct super_block *sb,
 | 
			
		|||
		return ERR_PTR(err);
 | 
			
		||||
	}
 | 
			
		||||
	dout("__get_parent ino %llx parent %p ino %llx.%llx\n",
 | 
			
		||||
	     child ? ceph_ino(child->d_inode) : ino,
 | 
			
		||||
	     child ? ceph_ino(d_inode(child)) : ino,
 | 
			
		||||
	     dentry, ceph_vinop(inode));
 | 
			
		||||
	return dentry;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -172,11 +172,11 @@ static struct dentry *__get_parent(struct super_block *sb,
 | 
			
		|||
static struct dentry *ceph_get_parent(struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	/* don't re-export snaps */
 | 
			
		||||
	if (ceph_snap(child->d_inode) != CEPH_NOSNAP)
 | 
			
		||||
	if (ceph_snap(d_inode(child)) != CEPH_NOSNAP)
 | 
			
		||||
		return ERR_PTR(-EINVAL);
 | 
			
		||||
 | 
			
		||||
	dout("get_parent %p ino %llx.%llx\n",
 | 
			
		||||
	     child, ceph_vinop(child->d_inode));
 | 
			
		||||
	     child, ceph_vinop(d_inode(child)));
 | 
			
		||||
	return __get_parent(child->d_sb, child, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,32 +209,32 @@ static int ceph_get_name(struct dentry *parent, char *name,
 | 
			
		|||
	struct ceph_mds_request *req;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	mdsc = ceph_inode_to_client(child->d_inode)->mdsc;
 | 
			
		||||
	mdsc = ceph_inode_to_client(d_inode(child))->mdsc;
 | 
			
		||||
	req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME,
 | 
			
		||||
				       USE_ANY_MDS);
 | 
			
		||||
	if (IS_ERR(req))
 | 
			
		||||
		return PTR_ERR(req);
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	req->r_inode = child->d_inode;
 | 
			
		||||
	ihold(child->d_inode);
 | 
			
		||||
	req->r_ino2 = ceph_vino(parent->d_inode);
 | 
			
		||||
	req->r_locked_dir = parent->d_inode;
 | 
			
		||||
	req->r_inode = d_inode(child);
 | 
			
		||||
	ihold(d_inode(child));
 | 
			
		||||
	req->r_ino2 = ceph_vino(d_inode(parent));
 | 
			
		||||
	req->r_locked_dir = d_inode(parent);
 | 
			
		||||
	req->r_num_caps = 2;
 | 
			
		||||
	err = ceph_mdsc_do_request(mdsc, NULL, req);
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	if (!err) {
 | 
			
		||||
		struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
 | 
			
		||||
		memcpy(name, rinfo->dname, rinfo->dname_len);
 | 
			
		||||
		name[rinfo->dname_len] = 0;
 | 
			
		||||
		dout("get_name %p ino %llx.%llx name %s\n",
 | 
			
		||||
		     child, ceph_vinop(child->d_inode), name);
 | 
			
		||||
		     child, ceph_vinop(d_inode(child)), name);
 | 
			
		||||
	} else {
 | 
			
		||||
		dout("get_name %p ino %llx.%llx err %d\n",
 | 
			
		||||
		     child, ceph_vinop(child->d_inode), err);
 | 
			
		||||
		     child, ceph_vinop(d_inode(child)), err);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ceph_mdsc_put_request(req);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -291,14 +291,14 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
	}
 | 
			
		||||
	if (err)
 | 
			
		||||
		goto out_req;
 | 
			
		||||
	if (dn || dentry->d_inode == NULL || d_is_symlink(dentry)) {
 | 
			
		||||
	if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) {
 | 
			
		||||
		/* make vfs retry on splice, ENOENT, or symlink */
 | 
			
		||||
		dout("atomic_open finish_no_open on dn %p\n", dn);
 | 
			
		||||
		err = finish_no_open(file, dn);
 | 
			
		||||
	} else {
 | 
			
		||||
		dout("atomic_open finish_open on dn %p\n", dn);
 | 
			
		||||
		if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) {
 | 
			
		||||
			ceph_init_inode_acls(dentry->d_inode, &acls);
 | 
			
		||||
			ceph_init_inode_acls(d_inode(dentry), &acls);
 | 
			
		||||
			*opened |= FILE_CREATED;
 | 
			
		||||
		}
 | 
			
		||||
		err = finish_open(file, dentry, ceph_open, opened);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -940,7 +940,7 @@ static void update_dentry_lease(struct dentry *dentry,
 | 
			
		|||
	     dentry, duration, ttl);
 | 
			
		||||
 | 
			
		||||
	/* make lease_rdcache_gen match directory */
 | 
			
		||||
	dir = dentry->d_parent->d_inode;
 | 
			
		||||
	dir = d_inode(dentry->d_parent);
 | 
			
		||||
	di->lease_shared_gen = ceph_inode(dir)->i_shared_gen;
 | 
			
		||||
 | 
			
		||||
	if (duration == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -980,7 +980,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
 | 
			
		|||
{
 | 
			
		||||
	struct dentry *realdn;
 | 
			
		||||
 | 
			
		||||
	BUG_ON(dn->d_inode);
 | 
			
		||||
	BUG_ON(d_inode(dn));
 | 
			
		||||
 | 
			
		||||
	/* dn must be unhashed */
 | 
			
		||||
	if (!d_unhashed(dn))
 | 
			
		||||
| 
						 | 
				
			
			@ -998,13 +998,13 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
 | 
			
		|||
		     "inode %p ino %llx.%llx\n",
 | 
			
		||||
		     dn, d_count(dn),
 | 
			
		||||
		     realdn, d_count(realdn),
 | 
			
		||||
		     realdn->d_inode, ceph_vinop(realdn->d_inode));
 | 
			
		||||
		     d_inode(realdn), ceph_vinop(d_inode(realdn)));
 | 
			
		||||
		dput(dn);
 | 
			
		||||
		dn = realdn;
 | 
			
		||||
	} else {
 | 
			
		||||
		BUG_ON(!ceph_dentry(dn));
 | 
			
		||||
		dout("dn %p attached to %p ino %llx.%llx\n",
 | 
			
		||||
		     dn, dn->d_inode, ceph_vinop(dn->d_inode));
 | 
			
		||||
		     dn, d_inode(dn), ceph_vinop(d_inode(dn)));
 | 
			
		||||
	}
 | 
			
		||||
	if ((!prehash || *prehash) && d_unhashed(dn))
 | 
			
		||||
		d_rehash(dn);
 | 
			
		||||
| 
						 | 
				
			
			@ -1125,11 +1125,11 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 | 
			
		|||
					dput(parent);
 | 
			
		||||
					goto done;
 | 
			
		||||
				}
 | 
			
		||||
			} else if (dn->d_inode &&
 | 
			
		||||
				   (ceph_ino(dn->d_inode) != vino.ino ||
 | 
			
		||||
				    ceph_snap(dn->d_inode) != vino.snap)) {
 | 
			
		||||
			} else if (d_really_is_positive(dn) &&
 | 
			
		||||
				   (ceph_ino(d_inode(dn)) != vino.ino ||
 | 
			
		||||
				    ceph_snap(d_inode(dn)) != vino.snap)) {
 | 
			
		||||
				dout(" dn %p points to wrong inode %p\n",
 | 
			
		||||
				     dn, dn->d_inode);
 | 
			
		||||
				     dn, d_inode(dn));
 | 
			
		||||
				d_delete(dn);
 | 
			
		||||
				dput(dn);
 | 
			
		||||
				goto retry_lookup;
 | 
			
		||||
| 
						 | 
				
			
			@ -1183,7 +1183,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 | 
			
		|||
 | 
			
		||||
		BUG_ON(!dn);
 | 
			
		||||
		BUG_ON(!dir);
 | 
			
		||||
		BUG_ON(dn->d_parent->d_inode != dir);
 | 
			
		||||
		BUG_ON(d_inode(dn->d_parent) != dir);
 | 
			
		||||
		BUG_ON(ceph_ino(dir) !=
 | 
			
		||||
		       le64_to_cpu(rinfo->diri.in->ino));
 | 
			
		||||
		BUG_ON(ceph_snap(dir) !=
 | 
			
		||||
| 
						 | 
				
			
			@ -1235,7 +1235,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 | 
			
		|||
		/* null dentry? */
 | 
			
		||||
		if (!rinfo->head->is_target) {
 | 
			
		||||
			dout("fill_trace null dentry\n");
 | 
			
		||||
			if (dn->d_inode) {
 | 
			
		||||
			if (d_really_is_positive(dn)) {
 | 
			
		||||
				ceph_dir_clear_ordered(dir);
 | 
			
		||||
				dout("d_delete %p\n", dn);
 | 
			
		||||
				d_delete(dn);
 | 
			
		||||
| 
						 | 
				
			
			@ -1252,7 +1252,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		/* attach proper inode */
 | 
			
		||||
		if (!dn->d_inode) {
 | 
			
		||||
		if (d_really_is_negative(dn)) {
 | 
			
		||||
			ceph_dir_clear_ordered(dir);
 | 
			
		||||
			ihold(in);
 | 
			
		||||
			dn = splice_dentry(dn, in, &have_lease);
 | 
			
		||||
| 
						 | 
				
			
			@ -1261,9 +1261,9 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
 | 
			
		|||
				goto done;
 | 
			
		||||
			}
 | 
			
		||||
			req->r_dentry = dn;  /* may have spliced */
 | 
			
		||||
		} else if (dn->d_inode && dn->d_inode != in) {
 | 
			
		||||
		} else if (d_really_is_positive(dn) && d_inode(dn) != in) {
 | 
			
		||||
			dout(" %p links to %p %llx.%llx, not %llx.%llx\n",
 | 
			
		||||
			     dn, dn->d_inode, ceph_vinop(dn->d_inode),
 | 
			
		||||
			     dn, d_inode(dn), ceph_vinop(d_inode(dn)),
 | 
			
		||||
			     ceph_vinop(in));
 | 
			
		||||
			have_lease = false;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1363,7 +1363,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
 | 
			
		|||
		return readdir_prepopulate_inodes_only(req, session);
 | 
			
		||||
 | 
			
		||||
	if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
 | 
			
		||||
		snapdir = ceph_get_snapdir(parent->d_inode);
 | 
			
		||||
		snapdir = ceph_get_snapdir(d_inode(parent));
 | 
			
		||||
		parent = d_find_alias(snapdir);
 | 
			
		||||
		dout("readdir_prepopulate %d items under SNAPDIR dn %p\n",
 | 
			
		||||
		     rinfo->dir_nr, parent);
 | 
			
		||||
| 
						 | 
				
			
			@ -1371,7 +1371,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
 | 
			
		|||
		dout("readdir_prepopulate %d items under dn %p\n",
 | 
			
		||||
		     rinfo->dir_nr, parent);
 | 
			
		||||
		if (rinfo->dir_dir)
 | 
			
		||||
			ceph_fill_dirfrag(parent->d_inode, rinfo->dir_dir);
 | 
			
		||||
			ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* FIXME: release caps/leases if error occurs */
 | 
			
		||||
| 
						 | 
				
			
			@ -1405,11 +1405,11 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
 | 
			
		|||
				err = ret;
 | 
			
		||||
				goto out;
 | 
			
		||||
			}
 | 
			
		||||
		} else if (dn->d_inode &&
 | 
			
		||||
			   (ceph_ino(dn->d_inode) != vino.ino ||
 | 
			
		||||
			    ceph_snap(dn->d_inode) != vino.snap)) {
 | 
			
		||||
		} else if (d_really_is_positive(dn) &&
 | 
			
		||||
			   (ceph_ino(d_inode(dn)) != vino.ino ||
 | 
			
		||||
			    ceph_snap(d_inode(dn)) != vino.snap)) {
 | 
			
		||||
			dout(" dn %p points to wrong inode %p\n",
 | 
			
		||||
			     dn, dn->d_inode);
 | 
			
		||||
			     dn, d_inode(dn));
 | 
			
		||||
			d_delete(dn);
 | 
			
		||||
			dput(dn);
 | 
			
		||||
			goto retry_lookup;
 | 
			
		||||
| 
						 | 
				
			
			@ -1423,8 +1423,8 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		/* inode */
 | 
			
		||||
		if (dn->d_inode) {
 | 
			
		||||
			in = dn->d_inode;
 | 
			
		||||
		if (d_really_is_positive(dn)) {
 | 
			
		||||
			in = d_inode(dn);
 | 
			
		||||
		} else {
 | 
			
		||||
			in = ceph_get_inode(parent->d_sb, vino);
 | 
			
		||||
			if (IS_ERR(in)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1440,13 +1440,13 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
 | 
			
		|||
			       req->r_request_started, -1,
 | 
			
		||||
			       &req->r_caps_reservation) < 0) {
 | 
			
		||||
			pr_err("fill_inode badness on %p\n", in);
 | 
			
		||||
			if (!dn->d_inode)
 | 
			
		||||
			if (d_really_is_negative(dn))
 | 
			
		||||
				iput(in);
 | 
			
		||||
			d_drop(dn);
 | 
			
		||||
			goto next_item;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!dn->d_inode) {
 | 
			
		||||
		if (d_really_is_negative(dn)) {
 | 
			
		||||
			struct dentry *realdn = splice_dentry(dn, in, NULL);
 | 
			
		||||
			if (IS_ERR(realdn)) {
 | 
			
		||||
				err = PTR_ERR(realdn);
 | 
			
		||||
| 
						 | 
				
			
			@ -1693,7 +1693,7 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
 | 
			
		|||
 */
 | 
			
		||||
static void *ceph_sym_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(dentry->d_inode);
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(d_inode(dentry));
 | 
			
		||||
	nd_set_link(nd, ci->i_symlink);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1714,7 +1714,7 @@ static const struct inode_operations ceph_symlink_iops = {
 | 
			
		|||
 */
 | 
			
		||||
int ceph_setattr(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	const unsigned int ia_valid = attr->ia_valid;
 | 
			
		||||
	struct ceph_mds_request *req;
 | 
			
		||||
| 
						 | 
				
			
			@ -1990,7 +1990,7 @@ int ceph_permission(struct inode *inode, int mask)
 | 
			
		|||
int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		||||
		 struct kstat *stat)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -679,7 +679,7 @@ static struct dentry *get_nonsnap_parent(struct dentry *dentry)
 | 
			
		|||
	 * except to resplice to another snapdir, and either the old or new
 | 
			
		||||
	 * result is a valid result.
 | 
			
		||||
	 */
 | 
			
		||||
	while (!IS_ROOT(dentry) && ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
 | 
			
		||||
	while (!IS_ROOT(dentry) && ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
 | 
			
		||||
		dentry = dentry->d_parent;
 | 
			
		||||
	return dentry;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -716,20 +716,20 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
 | 
			
		|||
	} else if (req->r_dentry) {
 | 
			
		||||
		/* ignore race with rename; old or new d_parent is okay */
 | 
			
		||||
		struct dentry *parent = req->r_dentry->d_parent;
 | 
			
		||||
		struct inode *dir = parent->d_inode;
 | 
			
		||||
		struct inode *dir = d_inode(parent);
 | 
			
		||||
 | 
			
		||||
		if (dir->i_sb != mdsc->fsc->sb) {
 | 
			
		||||
			/* not this fs! */
 | 
			
		||||
			inode = req->r_dentry->d_inode;
 | 
			
		||||
			inode = d_inode(req->r_dentry);
 | 
			
		||||
		} else if (ceph_snap(dir) != CEPH_NOSNAP) {
 | 
			
		||||
			/* direct snapped/virtual snapdir requests
 | 
			
		||||
			 * based on parent dir inode */
 | 
			
		||||
			struct dentry *dn = get_nonsnap_parent(parent);
 | 
			
		||||
			inode = dn->d_inode;
 | 
			
		||||
			inode = d_inode(dn);
 | 
			
		||||
			dout("__choose_mds using nonsnap parent %p\n", inode);
 | 
			
		||||
		} else {
 | 
			
		||||
			/* dentry target */
 | 
			
		||||
			inode = req->r_dentry->d_inode;
 | 
			
		||||
			inode = d_inode(req->r_dentry);
 | 
			
		||||
			if (!inode || mode == USE_AUTH_MDS) {
 | 
			
		||||
				/* dir + name */
 | 
			
		||||
				inode = dir;
 | 
			
		||||
| 
						 | 
				
			
			@ -1712,7 +1712,7 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
 | 
			
		|||
	seq = read_seqbegin(&rename_lock);
 | 
			
		||||
	rcu_read_lock();
 | 
			
		||||
	for (temp = dentry; !IS_ROOT(temp);) {
 | 
			
		||||
		struct inode *inode = temp->d_inode;
 | 
			
		||||
		struct inode *inode = d_inode(temp);
 | 
			
		||||
		if (inode && ceph_snap(inode) == CEPH_SNAPDIR)
 | 
			
		||||
			len++;  /* slash only */
 | 
			
		||||
		else if (stop_on_nosnap && inode &&
 | 
			
		||||
| 
						 | 
				
			
			@ -1736,7 +1736,7 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
 | 
			
		|||
		struct inode *inode;
 | 
			
		||||
 | 
			
		||||
		spin_lock(&temp->d_lock);
 | 
			
		||||
		inode = temp->d_inode;
 | 
			
		||||
		inode = d_inode(temp);
 | 
			
		||||
		if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
 | 
			
		||||
			dout("build_path path+%d: %p SNAPDIR\n",
 | 
			
		||||
			     pos, temp);
 | 
			
		||||
| 
						 | 
				
			
			@ -1770,7 +1770,7 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
 | 
			
		|||
		goto retry;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	*base = ceph_ino(temp->d_inode);
 | 
			
		||||
	*base = ceph_ino(d_inode(temp));
 | 
			
		||||
	*plen = len;
 | 
			
		||||
	dout("build_path on %p %d built %llx '%.*s'\n",
 | 
			
		||||
	     dentry, d_count(dentry), *base, len, path);
 | 
			
		||||
| 
						 | 
				
			
			@ -1783,8 +1783,8 @@ static int build_dentry_path(struct dentry *dentry,
 | 
			
		|||
{
 | 
			
		||||
	char *path;
 | 
			
		||||
 | 
			
		||||
	if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP) {
 | 
			
		||||
		*pino = ceph_ino(dentry->d_parent->d_inode);
 | 
			
		||||
	if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP) {
 | 
			
		||||
		*pino = ceph_ino(d_inode(dentry->d_parent));
 | 
			
		||||
		*ppath = dentry->d_name.name;
 | 
			
		||||
		*ppathlen = dentry->d_name.len;
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1925,7 +1925,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
 | 
			
		|||
	releases = 0;
 | 
			
		||||
	if (req->r_inode_drop)
 | 
			
		||||
		releases += ceph_encode_inode_release(&p,
 | 
			
		||||
		      req->r_inode ? req->r_inode : req->r_dentry->d_inode,
 | 
			
		||||
		      req->r_inode ? req->r_inode : d_inode(req->r_dentry),
 | 
			
		||||
		      mds, req->r_inode_drop, req->r_inode_unless, 0);
 | 
			
		||||
	if (req->r_dentry_drop)
 | 
			
		||||
		releases += ceph_encode_dentry_release(&p, req->r_dentry,
 | 
			
		||||
| 
						 | 
				
			
			@ -1935,7 +1935,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
 | 
			
		|||
		       mds, req->r_old_dentry_drop, req->r_old_dentry_unless);
 | 
			
		||||
	if (req->r_old_inode_drop)
 | 
			
		||||
		releases += ceph_encode_inode_release(&p,
 | 
			
		||||
		      req->r_old_dentry->d_inode,
 | 
			
		||||
		      d_inode(req->r_old_dentry),
 | 
			
		||||
		      mds, req->r_old_inode_drop, req->r_old_inode_unless, 0);
 | 
			
		||||
	head->num_releases = cpu_to_le16(releases);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ static void ceph_put_super(struct super_block *s)
 | 
			
		|||
 | 
			
		||||
static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
 | 
			
		||||
{
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_inode_to_client(dentry->d_inode);
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry));
 | 
			
		||||
	struct ceph_monmap *monmap = fsc->client->monc.monmap;
 | 
			
		||||
	struct ceph_statfs st;
 | 
			
		||||
	u64 fsid;
 | 
			
		||||
| 
						 | 
				
			
			@ -976,7 +976,7 @@ static struct dentry *ceph_mount(struct file_system_type *fs_type,
 | 
			
		|||
	if (IS_ERR(res))
 | 
			
		||||
		goto out_splat;
 | 
			
		||||
	dout("root %p inode %p ino %llx.%llx\n", res,
 | 
			
		||||
	     res->d_inode, ceph_vinop(res->d_inode));
 | 
			
		||||
	     d_inode(res), ceph_vinop(d_inode(res)));
 | 
			
		||||
	return res;
 | 
			
		||||
 | 
			
		||||
out_splat:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -776,12 +776,12 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value,
 | 
			
		|||
	if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
 | 
			
		||||
		return generic_getxattr(dentry, name, value, size);
 | 
			
		||||
 | 
			
		||||
	return __ceph_getxattr(dentry->d_inode, name, value, size);
 | 
			
		||||
	return __ceph_getxattr(d_inode(dentry), name, value, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode);
 | 
			
		||||
	u32 vir_namelen = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -847,7 +847,7 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
			      const char *value, size_t size, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	struct ceph_mds_request *req;
 | 
			
		||||
	struct ceph_mds_client *mdsc = fsc->mdsc;
 | 
			
		||||
| 
						 | 
				
			
			@ -901,7 +901,7 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
int __ceph_setxattr(struct dentry *dentry, const char *name,
 | 
			
		||||
			const void *value, size_t size, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_vxattr *vxattr;
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	int issued;
 | 
			
		||||
| 
						 | 
				
			
			@ -995,7 +995,7 @@ int __ceph_setxattr(struct dentry *dentry, const char *name,
 | 
			
		|||
int ceph_setxattr(struct dentry *dentry, const char *name,
 | 
			
		||||
		  const void *value, size_t size, int flags)
 | 
			
		||||
{
 | 
			
		||||
	if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
 | 
			
		||||
	if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
 | 
			
		||||
		return -EROFS;
 | 
			
		||||
 | 
			
		||||
	if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
 | 
			
		||||
| 
						 | 
				
			
			@ -1011,7 +1011,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
 | 
			
		|||
{
 | 
			
		||||
	struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
 | 
			
		||||
	struct ceph_mds_client *mdsc = fsc->mdsc;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_mds_request *req;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1032,7 +1032,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
 | 
			
		|||
 | 
			
		||||
int __ceph_removexattr(struct dentry *dentry, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ceph_vxattr *vxattr;
 | 
			
		||||
	struct ceph_inode_info *ci = ceph_inode(inode);
 | 
			
		||||
	int issued;
 | 
			
		||||
| 
						 | 
				
			
			@ -1098,7 +1098,7 @@ int __ceph_removexattr(struct dentry *dentry, const char *name)
 | 
			
		|||
 | 
			
		||||
int ceph_removexattr(struct dentry *dentry, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
 | 
			
		||||
	if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
 | 
			
		||||
		return -EROFS;
 | 
			
		||||
 | 
			
		||||
	if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
 | 
			
		|||
	if (full_path == NULL)
 | 
			
		||||
		goto cdda_exit;
 | 
			
		||||
 | 
			
		||||
	cifs_sb = CIFS_SB(mntpt->d_inode->i_sb);
 | 
			
		||||
	cifs_sb = CIFS_SB(d_inode(mntpt)->i_sb);
 | 
			
		||||
	tlink = cifs_sb_tlink(cifs_sb);
 | 
			
		||||
	if (IS_ERR(tlink)) {
 | 
			
		||||
		mnt = ERR_CAST(tlink);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -607,7 +607,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
 | 
			
		|||
	p = s = full_path;
 | 
			
		||||
 | 
			
		||||
	do {
 | 
			
		||||
		struct inode *dir = dentry->d_inode;
 | 
			
		||||
		struct inode *dir = d_inode(dentry);
 | 
			
		||||
		struct dentry *child;
 | 
			
		||||
 | 
			
		||||
		if (!dir) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1898,7 +1898,7 @@ static void
 | 
			
		|||
cifs_writev_requeue(struct cifs_writedata *wdata)
 | 
			
		||||
{
 | 
			
		||||
	int i, rc = 0;
 | 
			
		||||
	struct inode *inode = wdata->cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(wdata->cfile->dentry);
 | 
			
		||||
	struct TCP_Server_Info *server;
 | 
			
		||||
	unsigned int rest_len;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1981,7 +1981,7 @@ cifs_writev_complete(struct work_struct *work)
 | 
			
		|||
{
 | 
			
		||||
	struct cifs_writedata *wdata = container_of(work,
 | 
			
		||||
						struct cifs_writedata, work);
 | 
			
		||||
	struct inode *inode = wdata->cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(wdata->cfile->dentry);
 | 
			
		||||
	int i = 0;
 | 
			
		||||
 | 
			
		||||
	if (wdata->result == 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -745,13 +745,13 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
 | 
			
		|||
		goto lookup_out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (direntry->d_inode != NULL) {
 | 
			
		||||
	if (d_really_is_positive(direntry)) {
 | 
			
		||||
		cifs_dbg(FYI, "non-NULL inode in lookup\n");
 | 
			
		||||
	} else {
 | 
			
		||||
		cifs_dbg(FYI, "NULL inode in lookup\n");
 | 
			
		||||
	}
 | 
			
		||||
	cifs_dbg(FYI, "Full path: %s inode = 0x%p\n",
 | 
			
		||||
		 full_path, direntry->d_inode);
 | 
			
		||||
		 full_path, d_inode(direntry));
 | 
			
		||||
 | 
			
		||||
	if (pTcon->unix_ext) {
 | 
			
		||||
		rc = cifs_get_inode_info_unix(&newInode, full_path,
 | 
			
		||||
| 
						 | 
				
			
			@ -792,7 +792,7 @@ cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
 | 
			
		|||
	if (flags & LOOKUP_RCU)
 | 
			
		||||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	if (direntry->d_inode) {
 | 
			
		||||
	if (d_really_is_positive(direntry)) {
 | 
			
		||||
		if (cifs_revalidate_dentry(direntry))
 | 
			
		||||
			return 0;
 | 
			
		||||
		else {
 | 
			
		||||
| 
						 | 
				
			
			@ -803,7 +803,7 @@ cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
 | 
			
		|||
			 * attributes will have been updated by
 | 
			
		||||
			 * cifs_revalidate_dentry().
 | 
			
		||||
			 */
 | 
			
		||||
			if (IS_AUTOMOUNT(direntry->d_inode) &&
 | 
			
		||||
			if (IS_AUTOMOUNT(d_inode(direntry)) &&
 | 
			
		||||
			   !(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
 | 
			
		||||
				spin_lock(&direntry->d_lock);
 | 
			
		||||
				direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -273,7 +273,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
 | 
			
		|||
		  struct tcon_link *tlink, __u32 oplock)
 | 
			
		||||
{
 | 
			
		||||
	struct dentry *dentry = file->f_path.dentry;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(inode);
 | 
			
		||||
	struct cifsFileInfo *cfile;
 | 
			
		||||
	struct cifs_fid_locks *fdlocks;
 | 
			
		||||
| 
						 | 
				
			
			@ -357,7 +357,7 @@ cifsFileInfo_get(struct cifsFileInfo *cifs_file)
 | 
			
		|||
 */
 | 
			
		||||
void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = cifs_file->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(cifs_file->dentry);
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
 | 
			
		||||
	struct TCP_Server_Info *server = tcon->ses->server;
 | 
			
		||||
	struct cifsInodeInfo *cifsi = CIFS_I(inode);
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +386,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
 | 
			
		|||
 | 
			
		||||
	if (list_empty(&cifsi->openFileList)) {
 | 
			
		||||
		cifs_dbg(FYI, "closing last open instance for inode %p\n",
 | 
			
		||||
			 cifs_file->dentry->d_inode);
 | 
			
		||||
			 d_inode(cifs_file->dentry));
 | 
			
		||||
		/*
 | 
			
		||||
		 * In strict cache mode we need invalidate mapping on the last
 | 
			
		||||
		 * close  because it may cause a error when we open this file
 | 
			
		||||
| 
						 | 
				
			
			@ -572,7 +572,7 @@ static int
 | 
			
		|||
cifs_relock_file(struct cifsFileInfo *cfile)
 | 
			
		||||
{
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -620,7 +620,7 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
 | 
			
		|||
		return rc;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inode = cfile->dentry->d_inode;
 | 
			
		||||
	inode = d_inode(cfile->dentry);
 | 
			
		||||
	cifs_sb = CIFS_SB(inode->i_sb);
 | 
			
		||||
	tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	server = tcon->ses->server;
 | 
			
		||||
| 
						 | 
				
			
			@ -874,7 +874,7 @@ cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
 | 
			
		|||
{
 | 
			
		||||
	bool rc = false;
 | 
			
		||||
	struct cifs_fid_locks *cur;
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
 | 
			
		||||
	list_for_each_entry(cur, &cinode->llist, llist) {
 | 
			
		||||
		rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
 | 
			
		||||
| 
						 | 
				
			
			@ -899,7 +899,7 @@ cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
 | 
			
		|||
{
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
	struct cifsLockInfo *conf_lock;
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
 | 
			
		||||
	bool exist;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -927,7 +927,7 @@ cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
 | 
			
		|||
static void
 | 
			
		||||
cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
 | 
			
		||||
{
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	down_write(&cinode->lock_sem);
 | 
			
		||||
	list_add_tail(&lock->llist, &cfile->llist->locks);
 | 
			
		||||
	up_write(&cinode->lock_sem);
 | 
			
		||||
| 
						 | 
				
			
			@ -944,7 +944,7 @@ cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
 | 
			
		|||
		 bool wait)
 | 
			
		||||
{
 | 
			
		||||
	struct cifsLockInfo *conf_lock;
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	bool exist;
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1125,7 +1125,7 @@ struct lock_to_push {
 | 
			
		|||
static int
 | 
			
		||||
cifs_push_posix_locks(struct cifsFileInfo *cfile)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(cfile->dentry);
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	struct file_lock *flock;
 | 
			
		||||
	struct file_lock_context *flctx = inode->i_flctx;
 | 
			
		||||
| 
						 | 
				
			
			@ -1214,7 +1214,7 @@ static int
 | 
			
		|||
cifs_push_locks(struct cifsFileInfo *cfile)
 | 
			
		||||
{
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1382,7 +1382,7 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
 | 
			
		|||
	unsigned int max_num, num, max_buf;
 | 
			
		||||
	LOCKING_ANDX_RANGE *buf, *cur;
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct cifsLockInfo *li, *tmp;
 | 
			
		||||
	__u64 length = 1 + flock->fl_end - flock->fl_start;
 | 
			
		||||
	struct list_head tmp_llist;
 | 
			
		||||
| 
						 | 
				
			
			@ -1488,7 +1488,7 @@ cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
 | 
			
		|||
	struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	struct TCP_Server_Info *server = tcon->ses->server;
 | 
			
		||||
	struct inode *inode = cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(cfile->dentry);
 | 
			
		||||
 | 
			
		||||
	if (posix_lck) {
 | 
			
		||||
		int posix_lock_type;
 | 
			
		||||
| 
						 | 
				
			
			@ -1643,7 +1643,7 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
 | 
			
		|||
	struct TCP_Server_Info *server;
 | 
			
		||||
	unsigned int xid;
 | 
			
		||||
	struct dentry *dentry = open_file->dentry;
 | 
			
		||||
	struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
 | 
			
		||||
	struct cifs_io_parms io_parms;
 | 
			
		||||
 | 
			
		||||
	cifs_sb = CIFS_SB(dentry->d_sb);
 | 
			
		||||
| 
						 | 
				
			
			@ -1676,7 +1676,7 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
 | 
			
		|||
					break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			len = min(server->ops->wp_retry_size(dentry->d_inode),
 | 
			
		||||
			len = min(server->ops->wp_retry_size(d_inode(dentry)),
 | 
			
		||||
				  (unsigned int)write_size - total_written);
 | 
			
		||||
			/* iov[0] is reserved for smb header */
 | 
			
		||||
			iov[1].iov_base = (char *)write_data + total_written;
 | 
			
		||||
| 
						 | 
				
			
			@ -1696,9 +1696,9 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
 | 
			
		|||
				return rc;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			spin_lock(&dentry->d_inode->i_lock);
 | 
			
		||||
			spin_lock(&d_inode(dentry)->i_lock);
 | 
			
		||||
			cifs_update_eof(cifsi, *offset, bytes_written);
 | 
			
		||||
			spin_unlock(&dentry->d_inode->i_lock);
 | 
			
		||||
			spin_unlock(&d_inode(dentry)->i_lock);
 | 
			
		||||
			*offset += bytes_written;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1706,12 +1706,12 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
 | 
			
		|||
	cifs_stats_bytes_written(tcon, total_written);
 | 
			
		||||
 | 
			
		||||
	if (total_written > 0) {
 | 
			
		||||
		spin_lock(&dentry->d_inode->i_lock);
 | 
			
		||||
		if (*offset > dentry->d_inode->i_size)
 | 
			
		||||
			i_size_write(dentry->d_inode, *offset);
 | 
			
		||||
		spin_unlock(&dentry->d_inode->i_lock);
 | 
			
		||||
		spin_lock(&d_inode(dentry)->i_lock);
 | 
			
		||||
		if (*offset > d_inode(dentry)->i_size)
 | 
			
		||||
			i_size_write(d_inode(dentry), *offset);
 | 
			
		||||
		spin_unlock(&d_inode(dentry)->i_lock);
 | 
			
		||||
	}
 | 
			
		||||
	mark_inode_dirty_sync(dentry->d_inode);
 | 
			
		||||
	mark_inode_dirty_sync(d_inode(dentry));
 | 
			
		||||
	free_xid(xid);
 | 
			
		||||
	return total_written;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2406,7 +2406,7 @@ cifs_uncached_writev_complete(struct work_struct *work)
 | 
			
		|||
{
 | 
			
		||||
	struct cifs_writedata *wdata = container_of(work,
 | 
			
		||||
					struct cifs_writedata, work);
 | 
			
		||||
	struct inode *inode = wdata->cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(wdata->cfile->dentry);
 | 
			
		||||
	struct cifsInodeInfo *cifsi = CIFS_I(inode);
 | 
			
		||||
 | 
			
		||||
	spin_lock(&inode->i_lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -3794,7 +3794,7 @@ void cifs_oplock_break(struct work_struct *work)
 | 
			
		|||
{
 | 
			
		||||
	struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
 | 
			
		||||
						  oplock_break);
 | 
			
		||||
	struct inode *inode = cfile->dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(cfile->dentry);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(inode);
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	struct TCP_Server_Info *server = tcon->ses->server;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1067,7 +1067,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
 | 
			
		|||
	int rc;
 | 
			
		||||
	struct cifs_fid fid;
 | 
			
		||||
	struct cifs_open_parms oparms;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct cifsInodeInfo *cifsInode = CIFS_I(inode);
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 | 
			
		||||
	struct tcon_link *tlink;
 | 
			
		||||
| 
						 | 
				
			
			@ -1196,7 +1196,7 @@ cifs_drop_nlink(struct inode *inode)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * If dentry->d_inode is null (usually meaning the cached dentry
 | 
			
		||||
 * If d_inode(dentry) is null (usually meaning the cached dentry
 | 
			
		||||
 * is a negative dentry) then we would attempt a standard SMB delete, but
 | 
			
		||||
 * if that fails we can not attempt the fall back mechanisms on EACCESS
 | 
			
		||||
 * but will return the EACCESS to the caller. Note that the VFS does not call
 | 
			
		||||
| 
						 | 
				
			
			@ -1207,7 +1207,7 @@ int cifs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
	int rc = 0;
 | 
			
		||||
	unsigned int xid;
 | 
			
		||||
	char *full_path = NULL;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct cifsInodeInfo *cifs_inode;
 | 
			
		||||
	struct super_block *sb = dir->i_sb;
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
 | 
			
		||||
| 
						 | 
				
			
			@ -1551,13 +1551,13 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
 | 
			
		|||
	cifs_put_tlink(tlink);
 | 
			
		||||
 | 
			
		||||
	if (!rc) {
 | 
			
		||||
		spin_lock(&direntry->d_inode->i_lock);
 | 
			
		||||
		i_size_write(direntry->d_inode, 0);
 | 
			
		||||
		clear_nlink(direntry->d_inode);
 | 
			
		||||
		spin_unlock(&direntry->d_inode->i_lock);
 | 
			
		||||
		spin_lock(&d_inode(direntry)->i_lock);
 | 
			
		||||
		i_size_write(d_inode(direntry), 0);
 | 
			
		||||
		clear_nlink(d_inode(direntry));
 | 
			
		||||
		spin_unlock(&d_inode(direntry)->i_lock);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cifsInode = CIFS_I(direntry->d_inode);
 | 
			
		||||
	cifsInode = CIFS_I(d_inode(direntry));
 | 
			
		||||
	/* force revalidate to go get info when needed */
 | 
			
		||||
	cifsInode->time = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1568,7 +1568,7 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
 | 
			
		|||
	 */
 | 
			
		||||
	cifsInode->time = 0;
 | 
			
		||||
 | 
			
		||||
	direntry->d_inode->i_ctime = inode->i_ctime = inode->i_mtime =
 | 
			
		||||
	d_inode(direntry)->i_ctime = inode->i_ctime = inode->i_mtime =
 | 
			
		||||
		current_fs_time(inode->i_sb);
 | 
			
		||||
 | 
			
		||||
rmdir_exit:
 | 
			
		||||
| 
						 | 
				
			
			@ -1727,7 +1727,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
 | 
			
		|||
 | 
			
		||||
unlink_target:
 | 
			
		||||
	/* Try unlinking the target dentry if it's not negative */
 | 
			
		||||
	if (target_dentry->d_inode && (rc == -EACCES || rc == -EEXIST)) {
 | 
			
		||||
	if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
 | 
			
		||||
		if (d_is_dir(target_dentry))
 | 
			
		||||
			tmprc = cifs_rmdir(target_dir, target_dentry);
 | 
			
		||||
		else
 | 
			
		||||
| 
						 | 
				
			
			@ -1867,7 +1867,7 @@ int cifs_revalidate_dentry_attr(struct dentry *dentry)
 | 
			
		|||
{
 | 
			
		||||
	unsigned int xid;
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct super_block *sb = dentry->d_sb;
 | 
			
		||||
	char *full_path = NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1919,7 +1919,7 @@ int cifs_revalidate_file(struct file *filp)
 | 
			
		|||
int cifs_revalidate_dentry(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	int rc;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	rc = cifs_revalidate_dentry_attr(dentry);
 | 
			
		||||
	if (rc)
 | 
			
		||||
| 
						 | 
				
			
			@ -1933,7 +1933,7 @@ int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
{
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
 | 
			
		||||
	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			@ -2110,7 +2110,7 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
 | 
			
		|||
	int rc;
 | 
			
		||||
	unsigned int xid;
 | 
			
		||||
	char *full_path = NULL;
 | 
			
		||||
	struct inode *inode = direntry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(direntry);
 | 
			
		||||
	struct cifsInodeInfo *cifsInode = CIFS_I(inode);
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 | 
			
		||||
	struct tcon_link *tlink;
 | 
			
		||||
| 
						 | 
				
			
			@ -2251,7 +2251,7 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
 | 
			
		|||
	unsigned int xid;
 | 
			
		||||
	kuid_t uid = INVALID_UID;
 | 
			
		||||
	kgid_t gid = INVALID_GID;
 | 
			
		||||
	struct inode *inode = direntry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(direntry);
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 | 
			
		||||
	struct cifsInodeInfo *cifsInode = CIFS_I(inode);
 | 
			
		||||
	char *full_path = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -2409,7 +2409,7 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
 | 
			
		|||
int
 | 
			
		||||
cifs_setattr(struct dentry *direntry, struct iattr *attrs)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = direntry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(direntry);
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 | 
			
		||||
	struct cifs_tcon *pTcon = cifs_sb_master_tcon(cifs_sb);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -586,12 +586,12 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode,
 | 
			
		|||
	 * if source file is cached (oplocked) revalidate will not go to server
 | 
			
		||||
	 * until the file is closed or oplock broken so update nlinks locally
 | 
			
		||||
	 */
 | 
			
		||||
	if (old_file->d_inode) {
 | 
			
		||||
		cifsInode = CIFS_I(old_file->d_inode);
 | 
			
		||||
	if (d_really_is_positive(old_file)) {
 | 
			
		||||
		cifsInode = CIFS_I(d_inode(old_file));
 | 
			
		||||
		if (rc == 0) {
 | 
			
		||||
			spin_lock(&old_file->d_inode->i_lock);
 | 
			
		||||
			inc_nlink(old_file->d_inode);
 | 
			
		||||
			spin_unlock(&old_file->d_inode->i_lock);
 | 
			
		||||
			spin_lock(&d_inode(old_file)->i_lock);
 | 
			
		||||
			inc_nlink(d_inode(old_file));
 | 
			
		||||
			spin_unlock(&d_inode(old_file)->i_lock);
 | 
			
		||||
 | 
			
		||||
			/*
 | 
			
		||||
			 * parent dir timestamps will update from srv within a
 | 
			
		||||
| 
						 | 
				
			
			@ -629,7 +629,7 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode,
 | 
			
		|||
void *
 | 
			
		||||
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = direntry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(direntry);
 | 
			
		||||
	int rc = -ENOMEM;
 | 
			
		||||
	unsigned int xid;
 | 
			
		||||
	char *full_path = NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -473,7 +473,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
 | 
			
		|||
					continue;
 | 
			
		||||
 | 
			
		||||
				cifs_dbg(FYI, "file id match, oplock break\n");
 | 
			
		||||
				pCifsInode = CIFS_I(netfile->dentry->d_inode);
 | 
			
		||||
				pCifsInode = CIFS_I(d_inode(netfile->dentry));
 | 
			
		||||
 | 
			
		||||
				set_bit(CIFS_INODE_PENDING_OPLOCK_BREAK,
 | 
			
		||||
					&pCifsInode->flags);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
 | 
			
		|||
{
 | 
			
		||||
	struct dentry *dentry, *alias;
 | 
			
		||||
	struct inode *inode;
 | 
			
		||||
	struct super_block *sb = parent->d_inode->i_sb;
 | 
			
		||||
	struct super_block *sb = d_inode(parent)->i_sb;
 | 
			
		||||
	struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
 | 
			
		||||
 | 
			
		||||
	cifs_dbg(FYI, "%s: for %s\n", __func__, name->name);
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	if (dentry) {
 | 
			
		||||
		inode = dentry->d_inode;
 | 
			
		||||
		inode = d_inode(dentry);
 | 
			
		||||
		if (inode) {
 | 
			
		||||
			/*
 | 
			
		||||
			 * If we're generating inode numbers, then we don't
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -722,7 +722,7 @@ cifs_open_file(const unsigned int xid, struct cifs_open_parms *oparms,
 | 
			
		|||
static void
 | 
			
		||||
cifs_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
 | 
			
		||||
{
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	cfile->fid.netfid = fid->netfid;
 | 
			
		||||
	cifs_set_oplock_level(cinode, oplock);
 | 
			
		||||
	cinode->can_cache_brlcks = CIFS_CACHE_WRITE(cinode);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
 | 
			
		|||
	unsigned int max_num, num = 0, max_buf;
 | 
			
		||||
	struct smb2_lock_element *buf, *cur;
 | 
			
		||||
	struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct cifsLockInfo *li, *tmp;
 | 
			
		||||
	__u64 length = 1 + flock->fl_end - flock->fl_start;
 | 
			
		||||
	struct list_head tmp_llist;
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ smb2_push_mandatory_locks(struct cifsFileInfo *cfile)
 | 
			
		|||
	unsigned int xid;
 | 
			
		||||
	unsigned int max_num, max_buf;
 | 
			
		||||
	struct smb2_lock_element *buf;
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct cifs_fid_locks *fdlocks;
 | 
			
		||||
 | 
			
		||||
	xid = get_xid();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -453,7 +453,7 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp,
 | 
			
		|||
 | 
			
		||||
	list_for_each(tmp, &tcon->openFileList) {
 | 
			
		||||
		cfile = list_entry(tmp, struct cifsFileInfo, tlist);
 | 
			
		||||
		cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
		cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
 | 
			
		||||
		if (memcmp(cinode->lease_key, rsp->LeaseKey,
 | 
			
		||||
							SMB2_LEASE_KEY_SIZE))
 | 
			
		||||
| 
						 | 
				
			
			@ -590,7 +590,7 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
 | 
			
		|||
					continue;
 | 
			
		||||
 | 
			
		||||
				cifs_dbg(FYI, "file id match, oplock break\n");
 | 
			
		||||
				cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
				cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
 | 
			
		||||
				if (!CIFS_CACHE_WRITE(cinode) &&
 | 
			
		||||
				    rsp->OplockLevel == SMB2_OPLOCK_LEVEL_NONE)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -524,7 +524,7 @@ smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
 | 
			
		|||
static void
 | 
			
		||||
smb2_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
 | 
			
		||||
{
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
 | 
			
		||||
	struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
 | 
			
		||||
	struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
 | 
			
		||||
 | 
			
		||||
	cfile->fid.persistent_fid = fid->persistent_fid;
 | 
			
		||||
| 
						 | 
				
			
			@ -793,7 +793,7 @@ smb2_set_file_size(const unsigned int xid, struct cifs_tcon *tcon,
 | 
			
		|||
	 * If extending file more than one page make sparse. Many Linux fs
 | 
			
		||||
	 * make files sparse by default when extending via ftruncate
 | 
			
		||||
	 */
 | 
			
		||||
	inode = cfile->dentry->d_inode;
 | 
			
		||||
	inode = d_inode(cfile->dentry);
 | 
			
		||||
 | 
			
		||||
	if (!set_alloc && (size > inode->i_size + 8192)) {
 | 
			
		||||
		__u8 set_sparse = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -1032,7 +1032,7 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
 | 
			
		|||
 | 
			
		||||
	xid = get_xid();
 | 
			
		||||
 | 
			
		||||
	inode = cfile->dentry->d_inode;
 | 
			
		||||
	inode = d_inode(cfile->dentry);
 | 
			
		||||
	cifsi = CIFS_I(inode);
 | 
			
		||||
 | 
			
		||||
	/* if file not oplocked can't be sure whether asking to extend size */
 | 
			
		||||
| 
						 | 
				
			
			@ -1083,7 +1083,7 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
 | 
			
		|||
 | 
			
		||||
	xid = get_xid();
 | 
			
		||||
 | 
			
		||||
	inode = cfile->dentry->d_inode;
 | 
			
		||||
	inode = d_inode(cfile->dentry);
 | 
			
		||||
	cifsi = CIFS_I(inode);
 | 
			
		||||
 | 
			
		||||
	/* Need to make file sparse, if not already, before freeing range. */
 | 
			
		||||
| 
						 | 
				
			
			@ -1115,7 +1115,7 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
 | 
			
		|||
 | 
			
		||||
	xid = get_xid();
 | 
			
		||||
 | 
			
		||||
	inode = cfile->dentry->d_inode;
 | 
			
		||||
	inode = d_inode(cfile->dentry);
 | 
			
		||||
	cifsi = CIFS_I(inode);
 | 
			
		||||
 | 
			
		||||
	/* if file not oplocked can't be sure whether asking to extend size */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,9 +50,9 @@ int cifs_removexattr(struct dentry *direntry, const char *ea_name)
 | 
			
		|||
 | 
			
		||||
	if (direntry == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	if (direntry->d_inode == NULL)
 | 
			
		||||
	if (d_really_is_negative(direntry))
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	sb = direntry->d_inode->i_sb;
 | 
			
		||||
	sb = d_inode(direntry)->i_sb;
 | 
			
		||||
	if (sb == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -111,9 +111,9 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
 | 
			
		|||
 | 
			
		||||
	if (direntry == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	if (direntry->d_inode == NULL)
 | 
			
		||||
	if (d_really_is_negative(direntry))
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	sb = direntry->d_inode->i_sb;
 | 
			
		||||
	sb = d_inode(direntry)->i_sb;
 | 
			
		||||
	if (sb == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -177,12 +177,12 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
 | 
			
		|||
			memcpy(pacl, ea_value, value_size);
 | 
			
		||||
			if (pTcon->ses->server->ops->set_acl)
 | 
			
		||||
				rc = pTcon->ses->server->ops->set_acl(pacl,
 | 
			
		||||
						value_size, direntry->d_inode,
 | 
			
		||||
						value_size, d_inode(direntry),
 | 
			
		||||
						full_path, CIFS_ACL_DACL);
 | 
			
		||||
			else
 | 
			
		||||
				rc = -EOPNOTSUPP;
 | 
			
		||||
			if (rc == 0) /* force revalidate of the inode */
 | 
			
		||||
				CIFS_I(direntry->d_inode)->time = 0;
 | 
			
		||||
				CIFS_I(d_inode(direntry))->time = 0;
 | 
			
		||||
			kfree(pacl);
 | 
			
		||||
		}
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -246,9 +246,9 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
 | 
			
		|||
 | 
			
		||||
	if (direntry == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	if (direntry->d_inode == NULL)
 | 
			
		||||
	if (d_really_is_negative(direntry))
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	sb = direntry->d_inode->i_sb;
 | 
			
		||||
	sb = d_inode(direntry)->i_sb;
 | 
			
		||||
	if (sb == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -324,7 +324,7 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
 | 
			
		|||
				goto get_ea_exit; /* rc already EOPNOTSUPP */
 | 
			
		||||
 | 
			
		||||
			pacl = pTcon->ses->server->ops->get_acl(cifs_sb,
 | 
			
		||||
					direntry->d_inode, full_path, &acllen);
 | 
			
		||||
					d_inode(direntry), full_path, &acllen);
 | 
			
		||||
			if (IS_ERR(pacl)) {
 | 
			
		||||
				rc = PTR_ERR(pacl);
 | 
			
		||||
				cifs_dbg(VFS, "%s: error %zd getting sec desc\n",
 | 
			
		||||
| 
						 | 
				
			
			@ -382,9 +382,9 @@ ssize_t cifs_listxattr(struct dentry *direntry, char *data, size_t buf_size)
 | 
			
		|||
 | 
			
		||||
	if (direntry == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	if (direntry->d_inode == NULL)
 | 
			
		||||
	if (d_really_is_negative(direntry))
 | 
			
		||||
		return -EIO;
 | 
			
		||||
	sb = direntry->d_inode->i_sb;
 | 
			
		||||
	sb = d_inode(direntry)->i_sb;
 | 
			
		||||
	if (sb == NULL)
 | 
			
		||||
		return -EIO;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,8 +94,8 @@ static void coda_flag_children(struct dentry *parent, int flag)
 | 
			
		|||
	spin_lock(&parent->d_lock);
 | 
			
		||||
	list_for_each_entry(de, &parent->d_subdirs, d_child) {
 | 
			
		||||
		/* don't know what to do with negative dentries */
 | 
			
		||||
		if (de->d_inode ) 
 | 
			
		||||
			coda_flag_inode(de->d_inode, flag);
 | 
			
		||||
		if (d_inode(de) ) 
 | 
			
		||||
			coda_flag_inode(d_inode(de), flag);
 | 
			
		||||
	}
 | 
			
		||||
	spin_unlock(&parent->d_lock);
 | 
			
		||||
	return; 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ static int coda_mkdir(struct inode *dir, struct dentry *de, umode_t mode)
 | 
			
		|||
static int coda_link(struct dentry *source_de, struct inode *dir_inode, 
 | 
			
		||||
	  struct dentry *de)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = source_de->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(source_de);
 | 
			
		||||
        const char * name = de->d_name.name;
 | 
			
		||||
	int len = de->d_name.len;
 | 
			
		||||
	int error;
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +266,7 @@ static int coda_unlink(struct inode *dir, struct dentry *de)
 | 
			
		|||
		return error;
 | 
			
		||||
 | 
			
		||||
	coda_dir_update_mtime(dir);
 | 
			
		||||
	drop_nlink(de->d_inode);
 | 
			
		||||
	drop_nlink(d_inode(de));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -279,8 +279,8 @@ static int coda_rmdir(struct inode *dir, struct dentry *de)
 | 
			
		|||
	error = venus_rmdir(dir->i_sb, coda_i2f(dir), name, len);
 | 
			
		||||
	if (!error) {
 | 
			
		||||
		/* VFS may delete the child */
 | 
			
		||||
		if (de->d_inode)
 | 
			
		||||
			clear_nlink(de->d_inode);
 | 
			
		||||
		if (d_really_is_positive(de))
 | 
			
		||||
			clear_nlink(d_inode(de));
 | 
			
		||||
 | 
			
		||||
		/* fix the link count of the parent */
 | 
			
		||||
		coda_dir_drop_nlink(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -303,14 +303,14 @@ static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
			     coda_i2f(new_dir), old_length, new_length,
 | 
			
		||||
			     (const char *) old_name, (const char *)new_name);
 | 
			
		||||
	if (!error) {
 | 
			
		||||
		if (new_dentry->d_inode) {
 | 
			
		||||
		if (d_really_is_positive(new_dentry)) {
 | 
			
		||||
			if (d_is_dir(new_dentry)) {
 | 
			
		||||
				coda_dir_drop_nlink(old_dir);
 | 
			
		||||
				coda_dir_inc_nlink(new_dir);
 | 
			
		||||
			}
 | 
			
		||||
			coda_dir_update_mtime(old_dir);
 | 
			
		||||
			coda_dir_update_mtime(new_dir);
 | 
			
		||||
			coda_flag_inode(new_dentry->d_inode, C_VATTR);
 | 
			
		||||
			coda_flag_inode(d_inode(new_dentry), C_VATTR);
 | 
			
		||||
		} else {
 | 
			
		||||
			coda_flag_inode(old_dir, C_VATTR);
 | 
			
		||||
			coda_flag_inode(new_dir, C_VATTR);
 | 
			
		||||
| 
						 | 
				
			
			@ -449,13 +449,13 @@ static int coda_dentry_revalidate(struct dentry *de, unsigned int flags)
 | 
			
		|||
	if (flags & LOOKUP_RCU)
 | 
			
		||||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	inode = de->d_inode;
 | 
			
		||||
	inode = d_inode(de);
 | 
			
		||||
	if (!inode || is_root_inode(inode))
 | 
			
		||||
		goto out;
 | 
			
		||||
	if (is_bad_inode(inode))
 | 
			
		||||
		goto bad;
 | 
			
		||||
 | 
			
		||||
	cii = ITOC(de->d_inode);
 | 
			
		||||
	cii = ITOC(d_inode(de));
 | 
			
		||||
	if (!(cii->c_flags & (C_PURGE | C_FLUSH)))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -487,11 +487,11 @@ static int coda_dentry_delete(const struct dentry * dentry)
 | 
			
		|||
{
 | 
			
		||||
	int flags;
 | 
			
		||||
 | 
			
		||||
	if (!dentry->d_inode) 
 | 
			
		||||
	if (d_really_is_negative(dentry)) 
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	flags = (ITOC(dentry->d_inode)->c_flags) & C_PURGE;
 | 
			
		||||
	if (is_bad_inode(dentry->d_inode) || flags) {
 | 
			
		||||
	flags = (ITOC(d_inode(dentry))->c_flags) & C_PURGE;
 | 
			
		||||
	if (is_bad_inode(d_inode(dentry)) || flags) {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -257,15 +257,15 @@ static void coda_evict_inode(struct inode *inode)
 | 
			
		|||
 | 
			
		||||
int coda_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
 | 
			
		||||
{
 | 
			
		||||
	int err = coda_revalidate_inode(dentry->d_inode);
 | 
			
		||||
	int err = coda_revalidate_inode(d_inode(dentry));
 | 
			
		||||
	if (!err)
 | 
			
		||||
		generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
		generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int coda_setattr(struct dentry *de, struct iattr *iattr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = de->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(de);
 | 
			
		||||
	struct coda_vattr vattr;
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ static long coda_pioctl(struct file *filp, unsigned int cmd,
 | 
			
		|||
	if (error)
 | 
			
		||||
		return error;
 | 
			
		||||
 | 
			
		||||
	target_inode = path.dentry->d_inode;
 | 
			
		||||
	target_inode = d_inode(path.dentry);
 | 
			
		||||
 | 
			
		||||
	/* return if it is not a Coda inode */
 | 
			
		||||
	if (target_inode->i_sb != inode->i_sb) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -820,8 +820,8 @@ int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out)
 | 
			
		|||
	case CODA_FLUSH:
 | 
			
		||||
		coda_cache_clear_all(sb);
 | 
			
		||||
		shrink_dcache_sb(sb);
 | 
			
		||||
		if (sb->s_root->d_inode)
 | 
			
		||||
			coda_flag_inode(sb->s_root->d_inode, C_FLUSH);
 | 
			
		||||
		if (d_really_is_positive(sb->s_root))
 | 
			
		||||
			coda_flag_inode(d_inode(sb->s_root), C_FLUSH);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
	case CODA_PURGEUSER:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -289,7 +289,7 @@ static int configfs_create_dir(struct config_item *item, struct dentry *dentry)
 | 
			
		|||
	configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata);
 | 
			
		||||
	error = configfs_create(dentry, mode, init_dir);
 | 
			
		||||
	if (!error) {
 | 
			
		||||
		inc_nlink(p->d_inode);
 | 
			
		||||
		inc_nlink(d_inode(p));
 | 
			
		||||
		item->ci_dentry = dentry;
 | 
			
		||||
	} else {
 | 
			
		||||
		struct configfs_dirent *sd = dentry->d_fsdata;
 | 
			
		||||
| 
						 | 
				
			
			@ -375,8 +375,8 @@ static void remove_dir(struct dentry * d)
 | 
			
		|||
	list_del_init(&sd->s_sibling);
 | 
			
		||||
	spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
	configfs_put(sd);
 | 
			
		||||
	if (d->d_inode)
 | 
			
		||||
		simple_rmdir(parent->d_inode,d);
 | 
			
		||||
	if (d_really_is_positive(d))
 | 
			
		||||
		simple_rmdir(d_inode(parent),d);
 | 
			
		||||
 | 
			
		||||
	pr_debug(" o %pd removing done (%d)\n", d, d_count(d));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -513,7 +513,7 @@ static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex
 | 
			
		|||
			/* Abort if racing with mkdir() */
 | 
			
		||||
			if (sd->s_type & CONFIGFS_USET_IN_MKDIR) {
 | 
			
		||||
				if (wait_mutex)
 | 
			
		||||
					*wait_mutex = &sd->s_dentry->d_inode->i_mutex;
 | 
			
		||||
					*wait_mutex = &d_inode(sd->s_dentry)->i_mutex;
 | 
			
		||||
				return -EAGAIN;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -624,13 +624,13 @@ static void detach_groups(struct config_group *group)
 | 
			
		|||
 | 
			
		||||
		child = sd->s_dentry;
 | 
			
		||||
 | 
			
		||||
		mutex_lock(&child->d_inode->i_mutex);
 | 
			
		||||
		mutex_lock(&d_inode(child)->i_mutex);
 | 
			
		||||
 | 
			
		||||
		configfs_detach_group(sd->s_element);
 | 
			
		||||
		child->d_inode->i_flags |= S_DEAD;
 | 
			
		||||
		d_inode(child)->i_flags |= S_DEAD;
 | 
			
		||||
		dont_mount(child);
 | 
			
		||||
 | 
			
		||||
		mutex_unlock(&child->d_inode->i_mutex);
 | 
			
		||||
		mutex_unlock(&d_inode(child)->i_mutex);
 | 
			
		||||
 | 
			
		||||
		d_delete(child);
 | 
			
		||||
		dput(child);
 | 
			
		||||
| 
						 | 
				
			
			@ -672,7 +672,7 @@ static int create_default_group(struct config_group *parent_group,
 | 
			
		|||
			sd = child->d_fsdata;
 | 
			
		||||
			sd->s_type |= CONFIGFS_USET_DEFAULT;
 | 
			
		||||
		} else {
 | 
			
		||||
			BUG_ON(child->d_inode);
 | 
			
		||||
			BUG_ON(d_inode(child));
 | 
			
		||||
			d_drop(child);
 | 
			
		||||
			dput(child);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -818,11 +818,11 @@ static int configfs_attach_item(struct config_item *parent_item,
 | 
			
		|||
			 * the VFS may already have hit and used them. Thus,
 | 
			
		||||
			 * we must lock them as rmdir() would.
 | 
			
		||||
			 */
 | 
			
		||||
			mutex_lock(&dentry->d_inode->i_mutex);
 | 
			
		||||
			mutex_lock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
			configfs_remove_dir(item);
 | 
			
		||||
			dentry->d_inode->i_flags |= S_DEAD;
 | 
			
		||||
			d_inode(dentry)->i_flags |= S_DEAD;
 | 
			
		||||
			dont_mount(dentry);
 | 
			
		||||
			mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
			mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
			d_delete(dentry);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -858,16 +858,16 @@ static int configfs_attach_group(struct config_item *parent_item,
 | 
			
		|||
		 * We must also lock the inode to remove it safely in case of
 | 
			
		||||
		 * error, as rmdir() would.
 | 
			
		||||
		 */
 | 
			
		||||
		mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD);
 | 
			
		||||
		mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD);
 | 
			
		||||
		configfs_adjust_dir_dirent_depth_before_populate(sd);
 | 
			
		||||
		ret = populate_groups(to_config_group(item));
 | 
			
		||||
		if (ret) {
 | 
			
		||||
			configfs_detach_item(item);
 | 
			
		||||
			dentry->d_inode->i_flags |= S_DEAD;
 | 
			
		||||
			d_inode(dentry)->i_flags |= S_DEAD;
 | 
			
		||||
			dont_mount(dentry);
 | 
			
		||||
		}
 | 
			
		||||
		configfs_adjust_dir_dirent_depth_after_populate(sd);
 | 
			
		||||
		mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
		mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			d_delete(dentry);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1075,7 +1075,7 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
 | 
			
		|||
	 * subsystem is really registered, and so we need to lock out
 | 
			
		||||
	 * configfs_[un]register_subsystem().
 | 
			
		||||
	 */
 | 
			
		||||
	mutex_lock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	root_sd = root->d_fsdata;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1111,7 +1111,7 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
 | 
			
		|||
out_unlock_dirent_lock:
 | 
			
		||||
	spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
out_unlock_fs:
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If we succeeded, the fs is pinned via other methods.  If not,
 | 
			
		||||
| 
						 | 
				
			
			@ -1453,11 +1453,11 @@ int configfs_rename_dir(struct config_item * item, const char *new_name)
 | 
			
		|||
	down_write(&configfs_rename_sem);
 | 
			
		||||
	parent = item->parent->dentry;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	new_dentry = lookup_one_len(new_name, parent, strlen(new_name));
 | 
			
		||||
	if (!IS_ERR(new_dentry)) {
 | 
			
		||||
		if (!new_dentry->d_inode) {
 | 
			
		||||
		if (d_really_is_negative(new_dentry)) {
 | 
			
		||||
			error = config_item_set_name(item, "%s", new_name);
 | 
			
		||||
			if (!error) {
 | 
			
		||||
				d_add(new_dentry, NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -1469,7 +1469,7 @@ int configfs_rename_dir(struct config_item * item, const char *new_name)
 | 
			
		|||
			error = -EEXIST;
 | 
			
		||||
		dput(new_dentry);
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	up_write(&configfs_rename_sem);
 | 
			
		||||
 | 
			
		||||
	return error;
 | 
			
		||||
| 
						 | 
				
			
			@ -1482,7 +1482,7 @@ static int configfs_dir_open(struct inode *inode, struct file *file)
 | 
			
		|||
	struct configfs_dirent * parent_sd = dentry->d_fsdata;
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
	/*
 | 
			
		||||
	 * Fake invisibility if dir belongs to a group/default groups hierarchy
 | 
			
		||||
	 * being attached
 | 
			
		||||
| 
						 | 
				
			
			@ -1495,7 +1495,7 @@ static int configfs_dir_open(struct inode *inode, struct file *file)
 | 
			
		|||
		else
 | 
			
		||||
			err = 0;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1505,11 +1505,11 @@ static int configfs_dir_close(struct inode *inode, struct file *file)
 | 
			
		|||
	struct dentry * dentry = file->f_path.dentry;
 | 
			
		||||
	struct configfs_dirent * cursor = file->private_data;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
	spin_lock(&configfs_dirent_lock);
 | 
			
		||||
	list_del_init(&cursor->s_sibling);
 | 
			
		||||
	spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
	mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	release_configfs_dirent(cursor);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1567,7 +1567,7 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
 | 
			
		|||
		spin_lock(&configfs_dirent_lock);
 | 
			
		||||
		dentry = next->s_dentry;
 | 
			
		||||
		if (dentry)
 | 
			
		||||
			inode = dentry->d_inode;
 | 
			
		||||
			inode = d_inode(dentry);
 | 
			
		||||
		if (inode)
 | 
			
		||||
			ino = inode->i_ino;
 | 
			
		||||
		spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -1590,7 +1590,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
 | 
			
		|||
{
 | 
			
		||||
	struct dentry * dentry = file->f_path.dentry;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
	switch (whence) {
 | 
			
		||||
		case 1:
 | 
			
		||||
			offset += file->f_pos;
 | 
			
		||||
| 
						 | 
				
			
			@ -1598,7 +1598,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
 | 
			
		|||
			if (offset >= 0)
 | 
			
		||||
				break;
 | 
			
		||||
		default:
 | 
			
		||||
			mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
			mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
			return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
	if (offset != file->f_pos) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1624,7 +1624,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
 | 
			
		|||
			spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
	return offset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1654,7 +1654,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
 | 
			
		|||
	sd = root->d_fsdata;
 | 
			
		||||
	link_group(to_config_group(sd->s_element), group);
 | 
			
		||||
 | 
			
		||||
	mutex_lock_nested(&root->d_inode->i_mutex, I_MUTEX_PARENT);
 | 
			
		||||
	mutex_lock_nested(&d_inode(root)->i_mutex, I_MUTEX_PARENT);
 | 
			
		||||
 | 
			
		||||
	err = -ENOMEM;
 | 
			
		||||
	dentry = d_alloc_name(root, group->cg_item.ci_name);
 | 
			
		||||
| 
						 | 
				
			
			@ -1664,7 +1664,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
 | 
			
		|||
		err = configfs_attach_group(sd->s_element, &group->cg_item,
 | 
			
		||||
					    dentry);
 | 
			
		||||
		if (err) {
 | 
			
		||||
			BUG_ON(dentry->d_inode);
 | 
			
		||||
			BUG_ON(d_inode(dentry));
 | 
			
		||||
			d_drop(dentry);
 | 
			
		||||
			dput(dentry);
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1674,7 +1674,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	if (err) {
 | 
			
		||||
		unlink_group(group);
 | 
			
		||||
| 
						 | 
				
			
			@ -1695,9 +1695,9 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
 | 
			
		|||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mutex_lock_nested(&root->d_inode->i_mutex,
 | 
			
		||||
	mutex_lock_nested(&d_inode(root)->i_mutex,
 | 
			
		||||
			  I_MUTEX_PARENT);
 | 
			
		||||
	mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD);
 | 
			
		||||
	mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD);
 | 
			
		||||
	mutex_lock(&configfs_symlink_mutex);
 | 
			
		||||
	spin_lock(&configfs_dirent_lock);
 | 
			
		||||
	if (configfs_detach_prep(dentry, NULL)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1706,13 +1706,13 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
 | 
			
		|||
	spin_unlock(&configfs_dirent_lock);
 | 
			
		||||
	mutex_unlock(&configfs_symlink_mutex);
 | 
			
		||||
	configfs_detach_group(&group->cg_item);
 | 
			
		||||
	dentry->d_inode->i_flags |= S_DEAD;
 | 
			
		||||
	d_inode(dentry)->i_flags |= S_DEAD;
 | 
			
		||||
	dont_mount(dentry);
 | 
			
		||||
	mutex_unlock(&dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	d_delete(dentry);
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	dput(dentry);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -326,10 +326,10 @@ int configfs_create_file(struct config_item * item, const struct configfs_attrib
 | 
			
		|||
	umode_t mode = (attr->ca_mode & S_IALLUGO) | S_IFREG;
 | 
			
		||||
	int error = 0;
 | 
			
		||||
 | 
			
		||||
	mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_NORMAL);
 | 
			
		||||
	mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_NORMAL);
 | 
			
		||||
	error = configfs_make_dirent(parent_sd, NULL, (void *) attr, mode,
 | 
			
		||||
				     CONFIGFS_ITEM_ATTR);
 | 
			
		||||
	mutex_unlock(&dir->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dir)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	return error;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ static const struct inode_operations configfs_inode_operations ={
 | 
			
		|||
 | 
			
		||||
int configfs_setattr(struct dentry * dentry, struct iattr * iattr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode * inode = dentry->d_inode;
 | 
			
		||||
	struct inode * inode = d_inode(dentry);
 | 
			
		||||
	struct configfs_dirent * sd = dentry->d_fsdata;
 | 
			
		||||
	struct iattr * sd_iattr;
 | 
			
		||||
	unsigned int ia_valid = iattr->ia_valid;
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +186,7 @@ int configfs_create(struct dentry * dentry, umode_t mode, void (*init)(struct in
 | 
			
		|||
	if (!dentry)
 | 
			
		||||
		return -ENOENT;
 | 
			
		||||
 | 
			
		||||
	if (dentry->d_inode)
 | 
			
		||||
	if (d_really_is_positive(dentry))
 | 
			
		||||
		return -EEXIST;
 | 
			
		||||
 | 
			
		||||
	sd = dentry->d_fsdata;
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +194,7 @@ int configfs_create(struct dentry * dentry, umode_t mode, void (*init)(struct in
 | 
			
		|||
	if (!inode)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
 | 
			
		||||
	p_inode = dentry->d_parent->d_inode;
 | 
			
		||||
	p_inode = d_inode(dentry->d_parent);
 | 
			
		||||
	p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME;
 | 
			
		||||
	configfs_set_inode_lock_class(sd, inode);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,11 +236,11 @@ void configfs_drop_dentry(struct configfs_dirent * sd, struct dentry * parent)
 | 
			
		|||
 | 
			
		||||
	if (dentry) {
 | 
			
		||||
		spin_lock(&dentry->d_lock);
 | 
			
		||||
		if (!d_unhashed(dentry) && dentry->d_inode) {
 | 
			
		||||
		if (!d_unhashed(dentry) && d_really_is_positive(dentry)) {
 | 
			
		||||
			dget_dlock(dentry);
 | 
			
		||||
			__d_drop(dentry);
 | 
			
		||||
			spin_unlock(&dentry->d_lock);
 | 
			
		||||
			simple_unlink(parent->d_inode, dentry);
 | 
			
		||||
			simple_unlink(d_inode(parent), dentry);
 | 
			
		||||
		} else
 | 
			
		||||
			spin_unlock(&dentry->d_lock);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -251,11 +251,11 @@ void configfs_hash_and_remove(struct dentry * dir, const char * name)
 | 
			
		|||
	struct configfs_dirent * sd;
 | 
			
		||||
	struct configfs_dirent * parent_sd = dir->d_fsdata;
 | 
			
		||||
 | 
			
		||||
	if (dir->d_inode == NULL)
 | 
			
		||||
	if (d_really_is_negative(dir))
 | 
			
		||||
		/* no inode means this hasn't been made visible yet */
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dir->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(dir)->i_mutex);
 | 
			
		||||
	list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
 | 
			
		||||
		if (!sd->s_element)
 | 
			
		||||
			continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -268,5 +268,5 @@ void configfs_hash_and_remove(struct dentry * dir, const char * name)
 | 
			
		|||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	mutex_unlock(&dir->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dir)->i_mutex);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ const struct file_operations debugfs_file_operations = {
 | 
			
		|||
 | 
			
		||||
static void *debugfs_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	nd_set_link(nd, dentry->d_inode->i_private);
 | 
			
		||||
	nd_set_link(nd, d_inode(dentry)->i_private);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ static struct inode *debugfs_get_inode(struct super_block *sb)
 | 
			
		|||
 | 
			
		||||
static inline int debugfs_positive(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	return dentry->d_inode && !d_unhashed(dentry);
 | 
			
		||||
	return d_really_is_positive(dentry) && !d_unhashed(dentry);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct debugfs_mount_opts {
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ static int debugfs_parse_options(char *data, struct debugfs_mount_opts *opts)
 | 
			
		|||
static int debugfs_apply_options(struct super_block *sb)
 | 
			
		||||
{
 | 
			
		||||
	struct debugfs_fs_info *fsi = sb->s_fs_info;
 | 
			
		||||
	struct inode *inode = sb->s_root->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(sb->s_root);
 | 
			
		||||
	struct debugfs_mount_opts *opts = &fsi->mount_opts;
 | 
			
		||||
 | 
			
		||||
	inode->i_mode &= ~S_IALLUGO;
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ static struct vfsmount *debugfs_automount(struct path *path)
 | 
			
		|||
{
 | 
			
		||||
	struct vfsmount *(*f)(void *);
 | 
			
		||||
	f = (struct vfsmount *(*)(void *))path->dentry->d_fsdata;
 | 
			
		||||
	return f(path->dentry->d_inode->i_private);
 | 
			
		||||
	return f(d_inode(path->dentry)->i_private);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct dentry_operations debugfs_dops = {
 | 
			
		||||
| 
						 | 
				
			
			@ -267,20 +267,20 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
 | 
			
		|||
	if (!parent)
 | 
			
		||||
		parent = debugfs_mount->mnt_root;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	dentry = lookup_one_len(name, parent, strlen(name));
 | 
			
		||||
	if (!IS_ERR(dentry) && dentry->d_inode) {
 | 
			
		||||
	if (!IS_ERR(dentry) && d_really_is_positive(dentry)) {
 | 
			
		||||
		dput(dentry);
 | 
			
		||||
		dentry = ERR_PTR(-EEXIST);
 | 
			
		||||
	}
 | 
			
		||||
	if (IS_ERR(dentry))
 | 
			
		||||
		mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
		mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	return dentry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct dentry *failed_creating(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry->d_parent)->i_mutex);
 | 
			
		||||
	dput(dentry);
 | 
			
		||||
	simple_release_fs(&debugfs_mount, &debugfs_mount_count);
 | 
			
		||||
	return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -288,7 +288,7 @@ static struct dentry *failed_creating(struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
static struct dentry *end_creating(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dentry->d_parent)->i_mutex);
 | 
			
		||||
	return dentry;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +341,7 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
 | 
			
		|||
	inode->i_fop = fops ? fops : &debugfs_file_operations;
 | 
			
		||||
	inode->i_private = data;
 | 
			
		||||
	d_instantiate(dentry, inode);
 | 
			
		||||
	fsnotify_create(dentry->d_parent->d_inode, dentry);
 | 
			
		||||
	fsnotify_create(d_inode(dentry->d_parent), dentry);
 | 
			
		||||
	return end_creating(dentry);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(debugfs_create_file);
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +381,7 @@ struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
 | 
			
		|||
	struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
 | 
			
		||||
 | 
			
		||||
	if (de)
 | 
			
		||||
		de->d_inode->i_size = file_size;
 | 
			
		||||
		d_inode(de)->i_size = file_size;
 | 
			
		||||
	return de;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(debugfs_create_file_size);
 | 
			
		||||
| 
						 | 
				
			
			@ -423,8 +423,8 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
 | 
			
		|||
	/* directory inodes start off with i_nlink == 2 (for "." entry) */
 | 
			
		||||
	inc_nlink(inode);
 | 
			
		||||
	d_instantiate(dentry, inode);
 | 
			
		||||
	inc_nlink(dentry->d_parent->d_inode);
 | 
			
		||||
	fsnotify_mkdir(dentry->d_parent->d_inode, dentry);
 | 
			
		||||
	inc_nlink(d_inode(dentry->d_parent));
 | 
			
		||||
	fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
 | 
			
		||||
	return end_creating(dentry);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(debugfs_create_dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -522,9 +522,9 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
 | 
			
		|||
	if (debugfs_positive(dentry)) {
 | 
			
		||||
		dget(dentry);
 | 
			
		||||
		if (d_is_dir(dentry))
 | 
			
		||||
			ret = simple_rmdir(parent->d_inode, dentry);
 | 
			
		||||
			ret = simple_rmdir(d_inode(parent), dentry);
 | 
			
		||||
		else
 | 
			
		||||
			simple_unlink(parent->d_inode, dentry);
 | 
			
		||||
			simple_unlink(d_inode(parent), dentry);
 | 
			
		||||
		if (!ret)
 | 
			
		||||
			d_delete(dentry);
 | 
			
		||||
		dput(dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -554,12 +554,12 @@ void debugfs_remove(struct dentry *dentry)
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	parent = dentry->d_parent;
 | 
			
		||||
	if (!parent || !parent->d_inode)
 | 
			
		||||
	if (!parent || d_really_is_negative(parent))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	ret = __debugfs_remove(dentry, parent);
 | 
			
		||||
	mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	if (!ret)
 | 
			
		||||
		simple_release_fs(&debugfs_mount, &debugfs_mount_count);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -585,12 +585,12 @@ void debugfs_remove_recursive(struct dentry *dentry)
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	parent = dentry->d_parent;
 | 
			
		||||
	if (!parent || !parent->d_inode)
 | 
			
		||||
	if (!parent || d_really_is_negative(parent))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	parent = dentry;
 | 
			
		||||
 down:
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
 loop:
 | 
			
		||||
	/*
 | 
			
		||||
	 * The parent->d_subdirs is protected by the d_lock. Outside that
 | 
			
		||||
| 
						 | 
				
			
			@ -605,7 +605,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
 | 
			
		|||
		/* perhaps simple_empty(child) makes more sense */
 | 
			
		||||
		if (!list_empty(&child->d_subdirs)) {
 | 
			
		||||
			spin_unlock(&parent->d_lock);
 | 
			
		||||
			mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
			mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
			parent = child;
 | 
			
		||||
			goto down;
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -626,10 +626,10 @@ void debugfs_remove_recursive(struct dentry *dentry)
 | 
			
		|||
	}
 | 
			
		||||
	spin_unlock(&parent->d_lock);
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
	child = parent;
 | 
			
		||||
	parent = parent->d_parent;
 | 
			
		||||
	mutex_lock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(parent)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	if (child != dentry)
 | 
			
		||||
		/* go up */
 | 
			
		||||
| 
						 | 
				
			
			@ -637,7 +637,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
	if (!__debugfs_remove(child, parent))
 | 
			
		||||
		simple_release_fs(&debugfs_mount, &debugfs_mount_count);
 | 
			
		||||
	mutex_unlock(&parent->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(parent)->i_mutex);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(debugfs_remove_recursive);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -669,27 +669,27 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
 | 
			
		|||
 | 
			
		||||
	trap = lock_rename(new_dir, old_dir);
 | 
			
		||||
	/* Source or destination directories don't exist? */
 | 
			
		||||
	if (!old_dir->d_inode || !new_dir->d_inode)
 | 
			
		||||
	if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir))
 | 
			
		||||
		goto exit;
 | 
			
		||||
	/* Source does not exist, cyclic rename, or mountpoint? */
 | 
			
		||||
	if (!old_dentry->d_inode || old_dentry == trap ||
 | 
			
		||||
	if (d_really_is_negative(old_dentry) || old_dentry == trap ||
 | 
			
		||||
	    d_mountpoint(old_dentry))
 | 
			
		||||
		goto exit;
 | 
			
		||||
	dentry = lookup_one_len(new_name, new_dir, strlen(new_name));
 | 
			
		||||
	/* Lookup failed, cyclic rename or target exists? */
 | 
			
		||||
	if (IS_ERR(dentry) || dentry == trap || dentry->d_inode)
 | 
			
		||||
	if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry))
 | 
			
		||||
		goto exit;
 | 
			
		||||
 | 
			
		||||
	old_name = fsnotify_oldname_init(old_dentry->d_name.name);
 | 
			
		||||
 | 
			
		||||
	error = simple_rename(old_dir->d_inode, old_dentry, new_dir->d_inode,
 | 
			
		||||
	error = simple_rename(d_inode(old_dir), old_dentry, d_inode(new_dir),
 | 
			
		||||
		dentry);
 | 
			
		||||
	if (error) {
 | 
			
		||||
		fsnotify_oldname_free(old_name);
 | 
			
		||||
		goto exit;
 | 
			
		||||
	}
 | 
			
		||||
	d_move(old_dentry, dentry);
 | 
			
		||||
	fsnotify_move(old_dir->d_inode, new_dir->d_inode, old_name,
 | 
			
		||||
	fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name,
 | 
			
		||||
		d_is_dir(old_dentry),
 | 
			
		||||
		NULL, old_dentry);
 | 
			
		||||
	fsnotify_oldname_free(old_name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -253,7 +253,7 @@ static int mknod_ptmx(struct super_block *sb)
 | 
			
		|||
	if (!uid_valid(root_uid) || !gid_valid(root_gid))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	/* If we have already created ptmx node, return */
 | 
			
		||||
	if (fsi->ptmx_dentry) {
 | 
			
		||||
| 
						 | 
				
			
			@ -290,7 +290,7 @@ static int mknod_ptmx(struct super_block *sb)
 | 
			
		|||
	fsi->ptmx_dentry = dentry;
 | 
			
		||||
	rc = 0;
 | 
			
		||||
out:
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -298,7 +298,7 @@ static void update_ptmx_mode(struct pts_fs_info *fsi)
 | 
			
		|||
{
 | 
			
		||||
	struct inode *inode;
 | 
			
		||||
	if (fsi->ptmx_dentry) {
 | 
			
		||||
		inode = fsi->ptmx_dentry->d_inode;
 | 
			
		||||
		inode = d_inode(fsi->ptmx_dentry);
 | 
			
		||||
		inode->i_mode = S_IFCHR|fsi->mount_opts.ptmxmode;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -602,18 +602,18 @@ struct inode *devpts_pty_new(struct inode *ptmx_inode, dev_t device, int index,
 | 
			
		|||
 | 
			
		||||
	sprintf(s, "%d", index);
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	dentry = d_alloc_name(root, s);
 | 
			
		||||
	if (dentry) {
 | 
			
		||||
		d_add(dentry, inode);
 | 
			
		||||
		fsnotify_create(root->d_inode, dentry);
 | 
			
		||||
		fsnotify_create(d_inode(root), dentry);
 | 
			
		||||
	} else {
 | 
			
		||||
		iput(inode);
 | 
			
		||||
		inode = ERR_PTR(-ENOMEM);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	return inode;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -658,7 +658,7 @@ void devpts_pty_kill(struct inode *inode)
 | 
			
		|||
 | 
			
		||||
	BUG_ON(inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(root)->i_mutex);
 | 
			
		||||
 | 
			
		||||
	dentry = d_find_alias(inode);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -667,7 +667,7 @@ void devpts_pty_kill(struct inode *inode)
 | 
			
		|||
	dput(dentry);	/* d_alloc_name() in devpts_pty_new() */
 | 
			
		||||
	dput(dentry);		/* d_find_alias above */
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&root->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(root)->i_mutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __init init_devpts_fs(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1326,7 +1326,7 @@ static int ecryptfs_read_headers_virt(char *page_virt,
 | 
			
		|||
	if (rc)
 | 
			
		||||
		goto out;
 | 
			
		||||
	if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
 | 
			
		||||
		ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
 | 
			
		||||
		ecryptfs_i_size_init(page_virt, d_inode(ecryptfs_dentry));
 | 
			
		||||
	offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
 | 
			
		||||
	rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
 | 
			
		||||
				    &bytes_read);
 | 
			
		||||
| 
						 | 
				
			
			@ -1425,7 +1425,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
 | 
			
		|||
{
 | 
			
		||||
	int rc;
 | 
			
		||||
	char *page_virt;
 | 
			
		||||
	struct inode *ecryptfs_inode = ecryptfs_dentry->d_inode;
 | 
			
		||||
	struct inode *ecryptfs_inode = d_inode(ecryptfs_dentry);
 | 
			
		||||
	struct ecryptfs_crypt_stat *crypt_stat =
 | 
			
		||||
	    &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
 | 
			
		||||
	struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ static int ecryptfs_d_revalidate(struct dentry *dentry, unsigned int flags)
 | 
			
		|||
		return -ECHILD;
 | 
			
		||||
 | 
			
		||||
	rc = lower_dentry->d_op->d_revalidate(lower_dentry, flags);
 | 
			
		||||
	if (dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_positive(dentry)) {
 | 
			
		||||
		struct inode *lower_inode =
 | 
			
		||||
			ecryptfs_inode_to_lower(dentry->d_inode);
 | 
			
		||||
			ecryptfs_inode_to_lower(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
		fsstack_copy_attr_all(dentry->d_inode, lower_inode);
 | 
			
		||||
		fsstack_copy_attr_all(d_inode(dentry), lower_inode);
 | 
			
		||||
	}
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ struct kmem_cache *ecryptfs_file_info_cache;
 | 
			
		|||
 | 
			
		||||
static int read_or_initialize_metadata(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
 | 
			
		||||
	struct ecryptfs_crypt_stat *crypt_stat;
 | 
			
		||||
	int rc;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,13 +41,13 @@ static struct dentry *lock_parent(struct dentry *dentry)
 | 
			
		|||
	struct dentry *dir;
 | 
			
		||||
 | 
			
		||||
	dir = dget_parent(dentry);
 | 
			
		||||
	mutex_lock_nested(&(dir->d_inode->i_mutex), I_MUTEX_PARENT);
 | 
			
		||||
	mutex_lock_nested(&(d_inode(dir)->i_mutex), I_MUTEX_PARENT);
 | 
			
		||||
	return dir;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void unlock_dir(struct dentry *dir)
 | 
			
		||||
{
 | 
			
		||||
	mutex_unlock(&dir->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(dir)->i_mutex);
 | 
			
		||||
	dput(dir);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ struct inode *ecryptfs_get_inode(struct inode *lower_inode,
 | 
			
		|||
static int ecryptfs_interpose(struct dentry *lower_dentry,
 | 
			
		||||
			      struct dentry *dentry, struct super_block *sb)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = ecryptfs_get_inode(lower_dentry->d_inode, sb);
 | 
			
		||||
	struct inode *inode = ecryptfs_get_inode(d_inode(lower_dentry), sb);
 | 
			
		||||
 | 
			
		||||
	if (IS_ERR(inode))
 | 
			
		||||
		return PTR_ERR(inode);
 | 
			
		||||
| 
						 | 
				
			
			@ -189,21 +189,21 @@ ecryptfs_do_create(struct inode *directory_inode,
 | 
			
		|||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry);
 | 
			
		||||
	lower_dir_dentry = lock_parent(lower_dentry);
 | 
			
		||||
	rc = vfs_create(lower_dir_dentry->d_inode, lower_dentry, mode, true);
 | 
			
		||||
	rc = vfs_create(d_inode(lower_dir_dentry), lower_dentry, mode, true);
 | 
			
		||||
	if (rc) {
 | 
			
		||||
		printk(KERN_ERR "%s: Failure to create dentry in lower fs; "
 | 
			
		||||
		       "rc = [%d]\n", __func__, rc);
 | 
			
		||||
		inode = ERR_PTR(rc);
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	}
 | 
			
		||||
	inode = __ecryptfs_get_inode(lower_dentry->d_inode,
 | 
			
		||||
	inode = __ecryptfs_get_inode(d_inode(lower_dentry),
 | 
			
		||||
				     directory_inode->i_sb);
 | 
			
		||||
	if (IS_ERR(inode)) {
 | 
			
		||||
		vfs_unlink(lower_dir_dentry->d_inode, lower_dentry, NULL);
 | 
			
		||||
		vfs_unlink(d_inode(lower_dir_dentry), lower_dentry, NULL);
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	}
 | 
			
		||||
	fsstack_copy_attr_times(directory_inode, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_inode_size(directory_inode, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_attr_times(directory_inode, d_inode(lower_dir_dentry));
 | 
			
		||||
	fsstack_copy_inode_size(directory_inode, d_inode(lower_dir_dentry));
 | 
			
		||||
out_lock:
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	return inode;
 | 
			
		||||
| 
						 | 
				
			
			@ -332,7 +332,7 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry,
 | 
			
		|||
				     struct dentry *lower_dentry,
 | 
			
		||||
				     struct inode *dir_inode)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode, *lower_inode = lower_dentry->d_inode;
 | 
			
		||||
	struct inode *inode, *lower_inode = d_inode(lower_dentry);
 | 
			
		||||
	struct ecryptfs_dentry_info *dentry_info;
 | 
			
		||||
	struct vfsmount *lower_mnt;
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -347,14 +347,14 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry,
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent));
 | 
			
		||||
	fsstack_copy_attr_atime(dir_inode, lower_dentry->d_parent->d_inode);
 | 
			
		||||
	fsstack_copy_attr_atime(dir_inode, d_inode(lower_dentry->d_parent));
 | 
			
		||||
	BUG_ON(!d_count(lower_dentry));
 | 
			
		||||
 | 
			
		||||
	ecryptfs_set_dentry_private(dentry, dentry_info);
 | 
			
		||||
	dentry_info->lower_path.mnt = lower_mnt;
 | 
			
		||||
	dentry_info->lower_path.dentry = lower_dentry;
 | 
			
		||||
 | 
			
		||||
	if (!lower_dentry->d_inode) {
 | 
			
		||||
	if (d_really_is_negative(lower_dentry)) {
 | 
			
		||||
		/* We want to add because we couldn't find in lower */
 | 
			
		||||
		d_add(dentry, NULL);
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -400,11 +400,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
 | 
			
		|||
	int rc = 0;
 | 
			
		||||
 | 
			
		||||
	lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);
 | 
			
		||||
	mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(lower_dir_dentry)->i_mutex);
 | 
			
		||||
	lower_dentry = lookup_one_len(ecryptfs_dentry->d_name.name,
 | 
			
		||||
				      lower_dir_dentry,
 | 
			
		||||
				      ecryptfs_dentry->d_name.len);
 | 
			
		||||
	mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dir_dentry)->i_mutex);
 | 
			
		||||
	if (IS_ERR(lower_dentry)) {
 | 
			
		||||
		rc = PTR_ERR(lower_dentry);
 | 
			
		||||
		ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
 | 
			
		||||
| 
						 | 
				
			
			@ -412,7 +412,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
 | 
			
		|||
				ecryptfs_dentry);
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	if (lower_dentry->d_inode)
 | 
			
		||||
	if (d_really_is_positive(lower_dentry))
 | 
			
		||||
		goto interpose;
 | 
			
		||||
	mount_crypt_stat = &ecryptfs_superblock_to_private(
 | 
			
		||||
				ecryptfs_dentry->d_sb)->mount_crypt_stat;
 | 
			
		||||
| 
						 | 
				
			
			@ -429,11 +429,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
 | 
			
		|||
		       "filename; rc = [%d]\n", __func__, rc);
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(lower_dir_dentry)->i_mutex);
 | 
			
		||||
	lower_dentry = lookup_one_len(encrypted_and_encoded_name,
 | 
			
		||||
				      lower_dir_dentry,
 | 
			
		||||
				      encrypted_and_encoded_name_size);
 | 
			
		||||
	mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dir_dentry)->i_mutex);
 | 
			
		||||
	if (IS_ERR(lower_dentry)) {
 | 
			
		||||
		rc = PTR_ERR(lower_dentry);
 | 
			
		||||
		ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
 | 
			
		||||
| 
						 | 
				
			
			@ -458,24 +458,24 @@ static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
	u64 file_size_save;
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	file_size_save = i_size_read(old_dentry->d_inode);
 | 
			
		||||
	file_size_save = i_size_read(d_inode(old_dentry));
 | 
			
		||||
	lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry);
 | 
			
		||||
	lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry);
 | 
			
		||||
	dget(lower_old_dentry);
 | 
			
		||||
	dget(lower_new_dentry);
 | 
			
		||||
	lower_dir_dentry = lock_parent(lower_new_dentry);
 | 
			
		||||
	rc = vfs_link(lower_old_dentry, lower_dir_dentry->d_inode,
 | 
			
		||||
	rc = vfs_link(lower_old_dentry, d_inode(lower_dir_dentry),
 | 
			
		||||
		      lower_new_dentry, NULL);
 | 
			
		||||
	if (rc || !lower_new_dentry->d_inode)
 | 
			
		||||
	if (rc || d_really_is_negative(lower_new_dentry))
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	rc = ecryptfs_interpose(lower_new_dentry, new_dentry, dir->i_sb);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	set_nlink(old_dentry->d_inode,
 | 
			
		||||
		  ecryptfs_inode_to_lower(old_dentry->d_inode)->i_nlink);
 | 
			
		||||
	i_size_write(new_dentry->d_inode, file_size_save);
 | 
			
		||||
	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	set_nlink(d_inode(old_dentry),
 | 
			
		||||
		  ecryptfs_inode_to_lower(d_inode(old_dentry))->i_nlink);
 | 
			
		||||
	i_size_write(d_inode(new_dentry), file_size_save);
 | 
			
		||||
out_lock:
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	dput(lower_new_dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +485,7 @@ static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		|||
 | 
			
		||||
static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	return ecryptfs_do_unlink(dir, dentry, dentry->d_inode);
 | 
			
		||||
	return ecryptfs_do_unlink(dir, dentry, d_inode(dentry));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ecryptfs_symlink(struct inode *dir, struct dentry *dentry,
 | 
			
		||||
| 
						 | 
				
			
			@ -510,20 +510,20 @@ static int ecryptfs_symlink(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
						  strlen(symname));
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	rc = vfs_symlink(lower_dir_dentry->d_inode, lower_dentry,
 | 
			
		||||
	rc = vfs_symlink(d_inode(lower_dir_dentry), lower_dentry,
 | 
			
		||||
			 encoded_symname);
 | 
			
		||||
	kfree(encoded_symname);
 | 
			
		||||
	if (rc || !lower_dentry->d_inode)
 | 
			
		||||
	if (rc || d_really_is_negative(lower_dentry))
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
out_lock:
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	dput(lower_dentry);
 | 
			
		||||
	if (!dentry->d_inode)
 | 
			
		||||
	if (d_really_is_negative(dentry))
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -536,18 +536,18 @@ static int ecryptfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
 | 
			
		|||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	lower_dir_dentry = lock_parent(lower_dentry);
 | 
			
		||||
	rc = vfs_mkdir(lower_dir_dentry->d_inode, lower_dentry, mode);
 | 
			
		||||
	if (rc || !lower_dentry->d_inode)
 | 
			
		||||
	rc = vfs_mkdir(d_inode(lower_dir_dentry), lower_dentry, mode);
 | 
			
		||||
	if (rc || d_really_is_negative(lower_dentry))
 | 
			
		||||
		goto out;
 | 
			
		||||
	rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out;
 | 
			
		||||
	fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	set_nlink(dir, lower_dir_dentry->d_inode->i_nlink);
 | 
			
		||||
	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink);
 | 
			
		||||
out:
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	if (!dentry->d_inode)
 | 
			
		||||
	if (d_really_is_negative(dentry))
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -562,12 +562,12 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
	dget(dentry);
 | 
			
		||||
	lower_dir_dentry = lock_parent(lower_dentry);
 | 
			
		||||
	dget(lower_dentry);
 | 
			
		||||
	rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry);
 | 
			
		||||
	rc = vfs_rmdir(d_inode(lower_dir_dentry), lower_dentry);
 | 
			
		||||
	dput(lower_dentry);
 | 
			
		||||
	if (!rc && dentry->d_inode)
 | 
			
		||||
		clear_nlink(dentry->d_inode);
 | 
			
		||||
	fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	set_nlink(dir, lower_dir_dentry->d_inode->i_nlink);
 | 
			
		||||
	if (!rc && d_really_is_positive(dentry))
 | 
			
		||||
		clear_nlink(d_inode(dentry));
 | 
			
		||||
	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink);
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	if (!rc)
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -584,17 +584,17 @@ ecryptfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev
 | 
			
		|||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	lower_dir_dentry = lock_parent(lower_dentry);
 | 
			
		||||
	rc = vfs_mknod(lower_dir_dentry->d_inode, lower_dentry, mode, dev);
 | 
			
		||||
	if (rc || !lower_dentry->d_inode)
 | 
			
		||||
	rc = vfs_mknod(d_inode(lower_dir_dentry), lower_dentry, mode, dev);
 | 
			
		||||
	if (rc || d_really_is_negative(lower_dentry))
 | 
			
		||||
		goto out;
 | 
			
		||||
	rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out;
 | 
			
		||||
	fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
	fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
 | 
			
		||||
out:
 | 
			
		||||
	unlock_dir(lower_dir_dentry);
 | 
			
		||||
	if (!dentry->d_inode)
 | 
			
		||||
	if (d_really_is_negative(dentry))
 | 
			
		||||
		d_drop(dentry);
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -617,7 +617,7 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	dget(lower_new_dentry);
 | 
			
		||||
	lower_old_dir_dentry = dget_parent(lower_old_dentry);
 | 
			
		||||
	lower_new_dir_dentry = dget_parent(lower_new_dentry);
 | 
			
		||||
	target_inode = new_dentry->d_inode;
 | 
			
		||||
	target_inode = d_inode(new_dentry);
 | 
			
		||||
	trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
 | 
			
		||||
	/* source should not be ancestor of target */
 | 
			
		||||
	if (trap == lower_old_dentry) {
 | 
			
		||||
| 
						 | 
				
			
			@ -629,17 +629,17 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
		rc = -ENOTEMPTY;
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	}
 | 
			
		||||
	rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry,
 | 
			
		||||
			lower_new_dir_dentry->d_inode, lower_new_dentry,
 | 
			
		||||
	rc = vfs_rename(d_inode(lower_old_dir_dentry), lower_old_dentry,
 | 
			
		||||
			d_inode(lower_new_dir_dentry), lower_new_dentry,
 | 
			
		||||
			NULL, 0);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		goto out_lock;
 | 
			
		||||
	if (target_inode)
 | 
			
		||||
		fsstack_copy_attr_all(target_inode,
 | 
			
		||||
				      ecryptfs_inode_to_lower(target_inode));
 | 
			
		||||
	fsstack_copy_attr_all(new_dir, lower_new_dir_dentry->d_inode);
 | 
			
		||||
	fsstack_copy_attr_all(new_dir, d_inode(lower_new_dir_dentry));
 | 
			
		||||
	if (new_dir != old_dir)
 | 
			
		||||
		fsstack_copy_attr_all(old_dir, lower_old_dir_dentry->d_inode);
 | 
			
		||||
		fsstack_copy_attr_all(old_dir, d_inode(lower_old_dir_dentry));
 | 
			
		||||
out_lock:
 | 
			
		||||
	unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
 | 
			
		||||
	dput(lower_new_dir_dentry);
 | 
			
		||||
| 
						 | 
				
			
			@ -662,7 +662,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
 | 
			
		|||
		return ERR_PTR(-ENOMEM);
 | 
			
		||||
	old_fs = get_fs();
 | 
			
		||||
	set_fs(get_ds());
 | 
			
		||||
	rc = lower_dentry->d_inode->i_op->readlink(lower_dentry,
 | 
			
		||||
	rc = d_inode(lower_dentry)->i_op->readlink(lower_dentry,
 | 
			
		||||
						   (char __user *)lower_buf,
 | 
			
		||||
						   PATH_MAX);
 | 
			
		||||
	set_fs(old_fs);
 | 
			
		||||
| 
						 | 
				
			
			@ -681,8 +681,8 @@ static void *ecryptfs_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		|||
	char *buf = ecryptfs_readlink_lower(dentry, &len);
 | 
			
		||||
	if (IS_ERR(buf))
 | 
			
		||||
		goto out;
 | 
			
		||||
	fsstack_copy_attr_atime(dentry->d_inode,
 | 
			
		||||
				ecryptfs_dentry_to_lower(dentry)->d_inode);
 | 
			
		||||
	fsstack_copy_attr_atime(d_inode(dentry),
 | 
			
		||||
				d_inode(ecryptfs_dentry_to_lower(dentry)));
 | 
			
		||||
	buf[len] = '\0';
 | 
			
		||||
out:
 | 
			
		||||
	nd_set_link(nd, buf);
 | 
			
		||||
| 
						 | 
				
			
			@ -738,7 +738,7 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
 | 
			
		|||
			  struct iattr *lower_ia)
 | 
			
		||||
{
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct ecryptfs_crypt_stat *crypt_stat;
 | 
			
		||||
	loff_t i_size = i_size_read(inode);
 | 
			
		||||
	loff_t lower_size_before_truncate;
 | 
			
		||||
| 
						 | 
				
			
			@ -751,7 +751,7 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
 | 
			
		|||
	rc = ecryptfs_get_lower_file(dentry, inode);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		return rc;
 | 
			
		||||
	crypt_stat = &ecryptfs_inode_to_private(dentry->d_inode)->crypt_stat;
 | 
			
		||||
	crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
 | 
			
		||||
	/* Switch on growing or shrinking file */
 | 
			
		||||
	if (ia->ia_size > i_size) {
 | 
			
		||||
		char zero[] = { 0x00 };
 | 
			
		||||
| 
						 | 
				
			
			@ -858,7 +858,7 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
 | 
			
		|||
	struct iattr lower_ia = { .ia_valid = 0 };
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	rc = ecryptfs_inode_newsize_ok(dentry->d_inode, new_length);
 | 
			
		||||
	rc = ecryptfs_inode_newsize_ok(d_inode(dentry), new_length);
 | 
			
		||||
	if (rc)
 | 
			
		||||
		return rc;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -866,9 +866,9 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
 | 
			
		|||
	if (!rc && lower_ia.ia_valid & ATTR_SIZE) {
 | 
			
		||||
		struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
 | 
			
		||||
		mutex_lock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
		mutex_lock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
		rc = notify_change(lower_dentry, &lower_ia, NULL);
 | 
			
		||||
		mutex_unlock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
		mutex_unlock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
	}
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -900,10 +900,10 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
 | 
			
		|||
	struct inode *lower_inode;
 | 
			
		||||
	struct ecryptfs_crypt_stat *crypt_stat;
 | 
			
		||||
 | 
			
		||||
	crypt_stat = &ecryptfs_inode_to_private(dentry->d_inode)->crypt_stat;
 | 
			
		||||
	crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
 | 
			
		||||
	if (!(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED))
 | 
			
		||||
		ecryptfs_init_crypt_stat(crypt_stat);
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
	lower_inode = ecryptfs_inode_to_lower(inode);
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	mutex_lock(&crypt_stat->cs_mutex);
 | 
			
		||||
| 
						 | 
				
			
			@ -967,9 +967,9 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
 | 
			
		|||
	if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
 | 
			
		||||
		lower_ia.ia_valid &= ~ATTR_MODE;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
	rc = notify_change(lower_dentry, &lower_ia, NULL);
 | 
			
		||||
	mutex_unlock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
out:
 | 
			
		||||
	fsstack_copy_attr_all(inode, lower_inode);
 | 
			
		||||
	return rc;
 | 
			
		||||
| 
						 | 
				
			
			@ -983,7 +983,7 @@ static int ecryptfs_getattr_link(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
	mount_crypt_stat = &ecryptfs_superblock_to_private(
 | 
			
		||||
						dentry->d_sb)->mount_crypt_stat;
 | 
			
		||||
	generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
	generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
	if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
 | 
			
		||||
		char *target;
 | 
			
		||||
		size_t targetsiz;
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,9 +1007,9 @@ static int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
	rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat);
 | 
			
		||||
	if (!rc) {
 | 
			
		||||
		fsstack_copy_attr_all(dentry->d_inode,
 | 
			
		||||
				      ecryptfs_inode_to_lower(dentry->d_inode));
 | 
			
		||||
		generic_fillattr(dentry->d_inode, stat);
 | 
			
		||||
		fsstack_copy_attr_all(d_inode(dentry),
 | 
			
		||||
				      ecryptfs_inode_to_lower(d_inode(dentry)));
 | 
			
		||||
		generic_fillattr(d_inode(dentry), stat);
 | 
			
		||||
		stat->blocks = lower_stat.blocks;
 | 
			
		||||
	}
 | 
			
		||||
	return rc;
 | 
			
		||||
| 
						 | 
				
			
			@ -1023,14 +1023,14 @@ ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
 | 
			
		|||
	struct dentry *lower_dentry;
 | 
			
		||||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	if (!lower_dentry->d_inode->i_op->setxattr) {
 | 
			
		||||
	if (!d_inode(lower_dentry)->i_op->setxattr) {
 | 
			
		||||
		rc = -EOPNOTSUPP;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rc = vfs_setxattr(lower_dentry, name, value, size, flags);
 | 
			
		||||
	if (!rc && dentry->d_inode)
 | 
			
		||||
		fsstack_copy_attr_all(dentry->d_inode, lower_dentry->d_inode);
 | 
			
		||||
	if (!rc && d_really_is_positive(dentry))
 | 
			
		||||
		fsstack_copy_attr_all(d_inode(dentry), d_inode(lower_dentry));
 | 
			
		||||
out:
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1041,14 +1041,14 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name,
 | 
			
		|||
{
 | 
			
		||||
	int rc = 0;
 | 
			
		||||
 | 
			
		||||
	if (!lower_dentry->d_inode->i_op->getxattr) {
 | 
			
		||||
	if (!d_inode(lower_dentry)->i_op->getxattr) {
 | 
			
		||||
		rc = -EOPNOTSUPP;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_lock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	rc = lower_dentry->d_inode->i_op->getxattr(lower_dentry, name, value,
 | 
			
		||||
	mutex_lock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
	rc = d_inode(lower_dentry)->i_op->getxattr(lower_dentry, name, value,
 | 
			
		||||
						   size);
 | 
			
		||||
	mutex_unlock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
out:
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1068,13 +1068,13 @@ ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size)
 | 
			
		|||
	struct dentry *lower_dentry;
 | 
			
		||||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	if (!lower_dentry->d_inode->i_op->listxattr) {
 | 
			
		||||
	if (!d_inode(lower_dentry)->i_op->listxattr) {
 | 
			
		||||
		rc = -EOPNOTSUPP;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_lock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	rc = lower_dentry->d_inode->i_op->listxattr(lower_dentry, list, size);
 | 
			
		||||
	mutex_unlock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
	rc = d_inode(lower_dentry)->i_op->listxattr(lower_dentry, list, size);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
out:
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1085,13 +1085,13 @@ static int ecryptfs_removexattr(struct dentry *dentry, const char *name)
 | 
			
		|||
	struct dentry *lower_dentry;
 | 
			
		||||
 | 
			
		||||
	lower_dentry = ecryptfs_dentry_to_lower(dentry);
 | 
			
		||||
	if (!lower_dentry->d_inode->i_op->removexattr) {
 | 
			
		||||
	if (!d_inode(lower_dentry)->i_op->removexattr) {
 | 
			
		||||
		rc = -EOPNOTSUPP;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	mutex_lock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	rc = lower_dentry->d_inode->i_op->removexattr(lower_dentry, name);
 | 
			
		||||
	mutex_unlock(&lower_dentry->d_inode->i_mutex);
 | 
			
		||||
	mutex_lock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
	rc = d_inode(lower_dentry)->i_op->removexattr(lower_dentry, name);
 | 
			
		||||
	mutex_unlock(&d_inode(lower_dentry)->i_mutex);
 | 
			
		||||
out:
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,7 +144,7 @@ int ecryptfs_privileged_open(struct file **lower_file,
 | 
			
		|||
	/* Corresponding dput() and mntput() are done when the
 | 
			
		||||
	 * lower file is fput() when all eCryptfs files for the inode are
 | 
			
		||||
	 * released. */
 | 
			
		||||
	flags |= IS_RDONLY(lower_dentry->d_inode) ? O_RDONLY : O_RDWR;
 | 
			
		||||
	flags |= IS_RDONLY(d_inode(lower_dentry)) ? O_RDONLY : O_RDWR;
 | 
			
		||||
	(*lower_file) = dentry_open(&req.path, flags, cred);
 | 
			
		||||
	if (!IS_ERR(*lower_file))
 | 
			
		||||
		goto out;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -546,11 +546,11 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags
 | 
			
		|||
		goto out_free;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (check_ruid && !uid_eq(path.dentry->d_inode->i_uid, current_uid())) {
 | 
			
		||||
	if (check_ruid && !uid_eq(d_inode(path.dentry)->i_uid, current_uid())) {
 | 
			
		||||
		rc = -EPERM;
 | 
			
		||||
		printk(KERN_ERR "Mount of device (uid: %d) not owned by "
 | 
			
		||||
		       "requested user (uid: %d)\n",
 | 
			
		||||
			i_uid_read(path.dentry->d_inode),
 | 
			
		||||
			i_uid_read(d_inode(path.dentry)),
 | 
			
		||||
			from_kuid(&init_user_ns, current_uid()));
 | 
			
		||||
		goto out_free;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -584,7 +584,7 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags
 | 
			
		|||
		goto out_free;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inode = ecryptfs_get_inode(path.dentry->d_inode, s);
 | 
			
		||||
	inode = ecryptfs_get_inode(d_inode(path.dentry), s);
 | 
			
		||||
	rc = PTR_ERR(inode);
 | 
			
		||||
	if (IS_ERR(inode))
 | 
			
		||||
		goto out_free;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -420,7 +420,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode)
 | 
			
		|||
	void *xattr_virt;
 | 
			
		||||
	struct dentry *lower_dentry =
 | 
			
		||||
		ecryptfs_inode_to_private(ecryptfs_inode)->lower_file->f_path.dentry;
 | 
			
		||||
	struct inode *lower_inode = lower_dentry->d_inode;
 | 
			
		||||
	struct inode *lower_inode = d_inode(lower_dentry);
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	if (!lower_inode->i_op->getxattr || !lower_inode->i_op->setxattr) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,12 +145,12 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct efivar_entry *var = dentry->d_inode->i_private;
 | 
			
		||||
	struct efivar_entry *var = d_inode(dentry)->i_private;
 | 
			
		||||
 | 
			
		||||
	if (efivar_entry_delete(var))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	drop_nlink(dentry->d_inode);
 | 
			
		||||
	drop_nlink(d_inode(dentry));
 | 
			
		||||
	dput(dentry);
 | 
			
		||||
	return 0;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,7 +144,7 @@ static int efivarfs_callback(efi_char16_t *name16, efi_guid_t vendor,
 | 
			
		|||
 | 
			
		||||
	name[len + EFI_VARIABLE_GUID_LEN+1] = '\0';
 | 
			
		||||
 | 
			
		||||
	inode = efivarfs_get_inode(sb, root->d_inode, S_IFREG | 0644, 0);
 | 
			
		||||
	inode = efivarfs_get_inode(sb, d_inode(root), S_IFREG | 0644, 0);
 | 
			
		||||
	if (!inode)
 | 
			
		||||
		goto fail_name;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,9 +111,9 @@ struct dentry *efs_get_parent(struct dentry *child)
 | 
			
		|||
	struct dentry *parent = ERR_PTR(-ENOENT);
 | 
			
		||||
	efs_ino_t ino;
 | 
			
		||||
 | 
			
		||||
	ino = efs_find_entry(child->d_inode, "..", 2);
 | 
			
		||||
	ino = efs_find_entry(d_inode(child), "..", 2);
 | 
			
		||||
	if (ino)
 | 
			
		||||
		parent = d_obtain_alias(efs_iget(child->d_inode->i_sb, ino));
 | 
			
		||||
		parent = d_obtain_alias(efs_iget(d_inode(child)->i_sb, ino));
 | 
			
		||||
 | 
			
		||||
	return parent;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -379,7 +379,7 @@ ino_t exofs_parent_ino(struct dentry *child)
 | 
			
		|||
	struct exofs_dir_entry *de;
 | 
			
		||||
	ino_t ino;
 | 
			
		||||
 | 
			
		||||
	de = exofs_dotdot(child->d_inode, &page);
 | 
			
		||||
	de = exofs_dotdot(d_inode(child), &page);
 | 
			
		||||
	if (!de)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -429,7 +429,7 @@ int exofs_set_link(struct inode *dir, struct exofs_dir_entry *de,
 | 
			
		|||
 | 
			
		||||
int exofs_add_link(struct dentry *dentry, struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
	const unsigned char *name = dentry->d_name.name;
 | 
			
		||||
	int namelen = dentry->d_name.len;
 | 
			
		||||
	unsigned chunk_size = exofs_chunk_size(dir);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1028,7 +1028,7 @@ static int _do_truncate(struct inode *inode, loff_t newsize)
 | 
			
		|||
 */
 | 
			
		||||
int exofs_setattr(struct dentry *dentry, struct iattr *iattr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
	/* if we are about to modify an object, and it hasn't been
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ static int exofs_symlink(struct inode *dir, struct dentry *dentry,
 | 
			
		|||
static int exofs_link(struct dentry *old_dentry, struct inode *dir,
 | 
			
		||||
		struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old_dentry);
 | 
			
		||||
 | 
			
		||||
	inode->i_ctime = CURRENT_TIME;
 | 
			
		||||
	inode_inc_link_count(inode);
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +191,7 @@ static int exofs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 | 
			
		|||
 | 
			
		||||
static int exofs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct exofs_dir_entry *de;
 | 
			
		||||
	struct page *page;
 | 
			
		||||
	int err = -ENOENT;
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +213,7 @@ static int exofs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
static int exofs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int err = -ENOTEMPTY;
 | 
			
		||||
 | 
			
		||||
	if (exofs_empty_dir(inode)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -230,8 +230,8 @@ static int exofs_rmdir(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
static int exofs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		||||
		struct inode *new_dir, struct dentry *new_dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *old_inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *new_inode = new_dentry->d_inode;
 | 
			
		||||
	struct inode *old_inode = d_inode(old_dentry);
 | 
			
		||||
	struct inode *new_inode = d_inode(new_dentry);
 | 
			
		||||
	struct page *dir_page = NULL;
 | 
			
		||||
	struct exofs_dir_entry *dir_de = NULL;
 | 
			
		||||
	struct page *old_page;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -958,7 +958,7 @@ static struct dentry *exofs_get_parent(struct dentry *child)
 | 
			
		|||
	if (!ino)
 | 
			
		||||
		return ERR_PTR(-ESTALE);
 | 
			
		||||
 | 
			
		||||
	return d_obtain_alias(exofs_iget(child->d_inode->i_sb, ino));
 | 
			
		||||
	return d_obtain_alias(exofs_iget(d_inode(child)->i_sb, ino));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct inode *exofs_nfs_get_inode(struct super_block *sb,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
 | 
			
		||||
static void *exofs_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct exofs_i_info *oi = exofs_i(dentry->d_inode);
 | 
			
		||||
	struct exofs_i_info *oi = exofs_i(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	nd_set_link(nd, (char *)oi->i_data);
 | 
			
		||||
	return NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -486,7 +486,7 @@ void ext2_set_link(struct inode *dir, struct ext2_dir_entry_2 *de,
 | 
			
		|||
 */
 | 
			
		||||
int ext2_add_link (struct dentry *dentry, struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
	const char *name = dentry->d_name.name;
 | 
			
		||||
	int namelen = dentry->d_name.len;
 | 
			
		||||
	unsigned chunk_size = ext2_chunk_size(dir);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -278,7 +278,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
 | 
			
		|||
	avefreeb = free_blocks / ngroups;
 | 
			
		||||
	ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter);
 | 
			
		||||
 | 
			
		||||
	if ((parent == sb->s_root->d_inode) ||
 | 
			
		||||
	if ((parent == d_inode(sb->s_root)) ||
 | 
			
		||||
	    (EXT2_I(parent)->i_flags & EXT2_TOPDIR_FL)) {
 | 
			
		||||
		struct ext2_group_desc *best_desc = NULL;
 | 
			
		||||
		int best_ndir = inodes_per_group;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1547,7 +1547,7 @@ int ext2_write_inode(struct inode *inode, struct writeback_control *wbc)
 | 
			
		|||
 | 
			
		||||
int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int error;
 | 
			
		||||
 | 
			
		||||
	error = inode_change_ok(inode, iattr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,10 +79,10 @@ static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, uns
 | 
			
		|||
struct dentry *ext2_get_parent(struct dentry *child)
 | 
			
		||||
{
 | 
			
		||||
	struct qstr dotdot = QSTR_INIT("..", 2);
 | 
			
		||||
	unsigned long ino = ext2_inode_by_name(child->d_inode, &dotdot);
 | 
			
		||||
	unsigned long ino = ext2_inode_by_name(d_inode(child), &dotdot);
 | 
			
		||||
	if (!ino)
 | 
			
		||||
		return ERR_PTR(-ENOENT);
 | 
			
		||||
	return d_obtain_alias(ext2_iget(child->d_inode->i_sb, ino));
 | 
			
		||||
	return d_obtain_alias(ext2_iget(d_inode(child)->i_sb, ino));
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +214,7 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry,
 | 
			
		|||
static int ext2_link (struct dentry * old_dentry, struct inode * dir,
 | 
			
		||||
	struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old_dentry);
 | 
			
		||||
	int err;
 | 
			
		||||
 | 
			
		||||
	dquot_initialize(dir);
 | 
			
		||||
| 
						 | 
				
			
			@ -281,7 +281,7 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, umode_t mode)
 | 
			
		|||
 | 
			
		||||
static int ext2_unlink(struct inode * dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode * inode = dentry->d_inode;
 | 
			
		||||
	struct inode * inode = d_inode(dentry);
 | 
			
		||||
	struct ext2_dir_entry_2 * de;
 | 
			
		||||
	struct page * page;
 | 
			
		||||
	int err = -ENOENT;
 | 
			
		||||
| 
						 | 
				
			
			@ -305,7 +305,7 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
static int ext2_rmdir (struct inode * dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	struct inode * inode = dentry->d_inode;
 | 
			
		||||
	struct inode * inode = d_inode(dentry);
 | 
			
		||||
	int err = -ENOTEMPTY;
 | 
			
		||||
 | 
			
		||||
	if (ext2_empty_dir(inode)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -322,8 +322,8 @@ static int ext2_rmdir (struct inode * dir, struct dentry *dentry)
 | 
			
		|||
static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,
 | 
			
		||||
	struct inode * new_dir,	struct dentry * new_dentry )
 | 
			
		||||
{
 | 
			
		||||
	struct inode * old_inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode * new_inode = new_dentry->d_inode;
 | 
			
		||||
	struct inode * old_inode = d_inode(old_dentry);
 | 
			
		||||
	struct inode * new_inode = d_inode(new_dentry);
 | 
			
		||||
	struct page * dir_page = NULL;
 | 
			
		||||
	struct ext2_dir_entry_2 * dir_de = NULL;
 | 
			
		||||
	struct page * old_page;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
 | 
			
		||||
static void *ext2_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct ext2_inode_info *ei = EXT2_I(dentry->d_inode);
 | 
			
		||||
	struct ext2_inode_info *ei = EXT2_I(d_inode(dentry));
 | 
			
		||||
	nd_set_link(nd, (char *)ei->i_data);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ bad_block:	ext2_error(inode->i_sb, "ext2_xattr_get",
 | 
			
		|||
static int
 | 
			
		||||
ext2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	struct buffer_head *bh = NULL;
 | 
			
		||||
	struct ext2_xattr_entry *entry;
 | 
			
		||||
	char *end;
 | 
			
		||||
| 
						 | 
				
			
			@ -319,7 +319,7 @@ bad_block:	ext2_error(inode->i_sb, "ext2_xattr_list",
 | 
			
		|||
/*
 | 
			
		||||
 * Inode operation listxattr()
 | 
			
		||||
 *
 | 
			
		||||
 * dentry->d_inode->i_mutex: don't care
 | 
			
		||||
 * d_inode(dentry)->i_mutex: don't care
 | 
			
		||||
 */
 | 
			
		||||
ssize_t
 | 
			
		||||
ext2_listxattr(struct dentry *dentry, char *buffer, size_t size)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ ext2_xattr_security_get(struct dentry *dentry, const char *name,
 | 
			
		|||
{
 | 
			
		||||
	if (strcmp(name, "") == 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	return ext2_xattr_get(dentry->d_inode, EXT2_XATTR_INDEX_SECURITY, name,
 | 
			
		||||
	return ext2_xattr_get(d_inode(dentry), EXT2_XATTR_INDEX_SECURITY, name,
 | 
			
		||||
			      buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ ext2_xattr_security_set(struct dentry *dentry, const char *name,
 | 
			
		|||
{
 | 
			
		||||
	if (strcmp(name, "") == 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	return ext2_xattr_set(dentry->d_inode, EXT2_XATTR_INDEX_SECURITY, name,
 | 
			
		||||
	return ext2_xattr_set(d_inode(dentry), EXT2_XATTR_INDEX_SECURITY, name,
 | 
			
		||||
			      value, size, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ ext2_xattr_trusted_get(struct dentry *dentry, const char *name,
 | 
			
		|||
{
 | 
			
		||||
	if (strcmp(name, "") == 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	return ext2_xattr_get(dentry->d_inode, EXT2_XATTR_INDEX_TRUSTED, name,
 | 
			
		||||
	return ext2_xattr_get(d_inode(dentry), EXT2_XATTR_INDEX_TRUSTED, name,
 | 
			
		||||
			      buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ ext2_xattr_trusted_set(struct dentry *dentry, const char *name,
 | 
			
		|||
{
 | 
			
		||||
	if (strcmp(name, "") == 0)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	return ext2_xattr_set(dentry->d_inode, EXT2_XATTR_INDEX_TRUSTED, name,
 | 
			
		||||
	return ext2_xattr_set(d_inode(dentry), EXT2_XATTR_INDEX_TRUSTED, name,
 | 
			
		||||
			      value, size, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ ext2_xattr_user_get(struct dentry *dentry, const char *name,
 | 
			
		|||
		return -EINVAL;
 | 
			
		||||
	if (!test_opt(dentry->d_sb, XATTR_USER))
 | 
			
		||||
		return -EOPNOTSUPP;
 | 
			
		||||
	return ext2_xattr_get(dentry->d_inode, EXT2_XATTR_INDEX_USER,
 | 
			
		||||
	return ext2_xattr_get(d_inode(dentry), EXT2_XATTR_INDEX_USER,
 | 
			
		||||
			      name, buffer, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ ext2_xattr_user_set(struct dentry *dentry, const char *name,
 | 
			
		|||
	if (!test_opt(dentry->d_sb, XATTR_USER))
 | 
			
		||||
		return -EOPNOTSUPP;
 | 
			
		||||
 | 
			
		||||
	return ext2_xattr_set(dentry->d_inode, EXT2_XATTR_INDEX_USER,
 | 
			
		||||
	return ext2_xattr_set(d_inode(dentry), EXT2_XATTR_INDEX_USER,
 | 
			
		||||
			      name, value, size, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent)
 | 
			
		|||
	avefreeb = freeb / ngroups;
 | 
			
		||||
	ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter);
 | 
			
		||||
 | 
			
		||||
	if ((parent == sb->s_root->d_inode) ||
 | 
			
		||||
	if ((parent == d_inode(sb->s_root)) ||
 | 
			
		||||
	    (EXT3_I(parent)->i_flags & EXT3_TOPDIR_FL)) {
 | 
			
		||||
		int best_ndir = inodes_per_group;
 | 
			
		||||
		int best_group = -1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3240,7 +3240,7 @@ int ext3_write_inode(struct inode *inode, struct writeback_control *wbc)
 | 
			
		|||
 */
 | 
			
		||||
int ext3_setattr(struct dentry *dentry, struct iattr *attr)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(dentry);
 | 
			
		||||
	int error, rc = 0;
 | 
			
		||||
	const unsigned int ia_valid = attr->ia_valid;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1049,19 +1049,19 @@ struct dentry *ext3_get_parent(struct dentry *child)
 | 
			
		|||
	struct ext3_dir_entry_2 * de;
 | 
			
		||||
	struct buffer_head *bh;
 | 
			
		||||
 | 
			
		||||
	bh = ext3_find_entry(child->d_inode, &dotdot, &de);
 | 
			
		||||
	bh = ext3_find_entry(d_inode(child), &dotdot, &de);
 | 
			
		||||
	if (!bh)
 | 
			
		||||
		return ERR_PTR(-ENOENT);
 | 
			
		||||
	ino = le32_to_cpu(de->inode);
 | 
			
		||||
	brelse(bh);
 | 
			
		||||
 | 
			
		||||
	if (!ext3_valid_inum(child->d_inode->i_sb, ino)) {
 | 
			
		||||
		ext3_error(child->d_inode->i_sb, "ext3_get_parent",
 | 
			
		||||
	if (!ext3_valid_inum(d_inode(child)->i_sb, ino)) {
 | 
			
		||||
		ext3_error(d_inode(child)->i_sb, "ext3_get_parent",
 | 
			
		||||
			   "bad inode number: %lu", ino);
 | 
			
		||||
		return ERR_PTR(-EIO);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return d_obtain_alias(ext3_iget(child->d_inode->i_sb, ino));
 | 
			
		||||
	return d_obtain_alias(ext3_iget(d_inode(child)->i_sb, ino));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define S_SHIFT 12
 | 
			
		||||
| 
						 | 
				
			
			@ -1243,7 +1243,7 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
 | 
			
		|||
			     struct inode *inode, struct ext3_dir_entry_2 *de,
 | 
			
		||||
			     struct buffer_head * bh)
 | 
			
		||||
{
 | 
			
		||||
	struct inode	*dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode	*dir = d_inode(dentry->d_parent);
 | 
			
		||||
	const char	*name = dentry->d_name.name;
 | 
			
		||||
	int		namelen = dentry->d_name.len;
 | 
			
		||||
	unsigned long	offset = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1330,7 +1330,7 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
 | 
			
		|||
static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
 | 
			
		||||
			    struct inode *inode, struct buffer_head *bh)
 | 
			
		||||
{
 | 
			
		||||
	struct inode	*dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode	*dir = d_inode(dentry->d_parent);
 | 
			
		||||
	const char	*name = dentry->d_name.name;
 | 
			
		||||
	int		namelen = dentry->d_name.len;
 | 
			
		||||
	struct buffer_head *bh2;
 | 
			
		||||
| 
						 | 
				
			
			@ -1435,7 +1435,7 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
 | 
			
		|||
static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
 | 
			
		||||
	struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
	struct buffer_head * bh;
 | 
			
		||||
	struct ext3_dir_entry_2 *de;
 | 
			
		||||
	struct super_block * sb;
 | 
			
		||||
| 
						 | 
				
			
			@ -1489,7 +1489,7 @@ static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
 | 
			
		|||
	struct dx_entry *entries, *at;
 | 
			
		||||
	struct dx_hash_info hinfo;
 | 
			
		||||
	struct buffer_head * bh;
 | 
			
		||||
	struct inode *dir = dentry->d_parent->d_inode;
 | 
			
		||||
	struct inode *dir = d_inode(dentry->d_parent);
 | 
			
		||||
	struct super_block * sb = dir->i_sb;
 | 
			
		||||
	struct ext3_dir_entry_2 *de;
 | 
			
		||||
	int err;
 | 
			
		||||
| 
						 | 
				
			
			@ -2111,7 +2111,7 @@ static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
 | 
			
		|||
	/* Initialize quotas before so that eventual writes go in
 | 
			
		||||
	 * separate transaction */
 | 
			
		||||
	dquot_initialize(dir);
 | 
			
		||||
	dquot_initialize(dentry->d_inode);
 | 
			
		||||
	dquot_initialize(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
 | 
			
		||||
	if (IS_ERR(handle))
 | 
			
		||||
| 
						 | 
				
			
			@ -2125,7 +2125,7 @@ static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
 | 
			
		|||
	if (IS_DIRSYNC(dir))
 | 
			
		||||
		handle->h_sync = 1;
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	retval = -EIO;
 | 
			
		||||
	if (le32_to_cpu(de->inode) != inode->i_ino)
 | 
			
		||||
| 
						 | 
				
			
			@ -2173,7 +2173,7 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry)
 | 
			
		|||
	/* Initialize quotas before so that eventual writes go
 | 
			
		||||
	 * in separate transaction */
 | 
			
		||||
	dquot_initialize(dir);
 | 
			
		||||
	dquot_initialize(dentry->d_inode);
 | 
			
		||||
	dquot_initialize(d_inode(dentry));
 | 
			
		||||
 | 
			
		||||
	handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
 | 
			
		||||
	if (IS_ERR(handle))
 | 
			
		||||
| 
						 | 
				
			
			@ -2187,7 +2187,7 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry)
 | 
			
		|||
	if (!bh)
 | 
			
		||||
		goto end_unlink;
 | 
			
		||||
 | 
			
		||||
	inode = dentry->d_inode;
 | 
			
		||||
	inode = d_inode(dentry);
 | 
			
		||||
 | 
			
		||||
	retval = -EIO;
 | 
			
		||||
	if (le32_to_cpu(de->inode) != inode->i_ino)
 | 
			
		||||
| 
						 | 
				
			
			@ -2328,7 +2328,7 @@ static int ext3_link (struct dentry * old_dentry,
 | 
			
		|||
		struct inode * dir, struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	handle_t *handle;
 | 
			
		||||
	struct inode *inode = old_dentry->d_inode;
 | 
			
		||||
	struct inode *inode = d_inode(old_dentry);
 | 
			
		||||
	int err, retries = 0;
 | 
			
		||||
 | 
			
		||||
	if (inode->i_nlink >= EXT3_LINK_MAX)
 | 
			
		||||
| 
						 | 
				
			
			@ -2391,8 +2391,8 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
 | 
			
		|||
 | 
			
		||||
	/* Initialize quotas before so that eventual writes go
 | 
			
		||||
	 * in separate transaction */
 | 
			
		||||
	if (new_dentry->d_inode)
 | 
			
		||||
		dquot_initialize(new_dentry->d_inode);
 | 
			
		||||
	if (d_really_is_positive(new_dentry))
 | 
			
		||||
		dquot_initialize(d_inode(new_dentry));
 | 
			
		||||
	handle = ext3_journal_start(old_dir, 2 *
 | 
			
		||||
					EXT3_DATA_TRANS_BLOCKS(old_dir->i_sb) +
 | 
			
		||||
					EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2409,12 +2409,12 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
 | 
			
		|||
	 *  and merrily kill the link to whatever was created under the
 | 
			
		||||
	 *  same name. Goodbye sticky bit ;-<
 | 
			
		||||
	 */
 | 
			
		||||
	old_inode = old_dentry->d_inode;
 | 
			
		||||
	old_inode = d_inode(old_dentry);
 | 
			
		||||
	retval = -ENOENT;
 | 
			
		||||
	if (!old_bh || le32_to_cpu(old_de->inode) != old_inode->i_ino)
 | 
			
		||||
		goto end_rename;
 | 
			
		||||
 | 
			
		||||
	new_inode = new_dentry->d_inode;
 | 
			
		||||
	new_inode = d_inode(new_dentry);
 | 
			
		||||
	new_bh = ext3_find_entry(new_dir, &new_dentry->d_name, &new_de);
 | 
			
		||||
	if (new_bh) {
 | 
			
		||||
		if (!new_inode) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1170,7 +1170,7 @@ static int parse_options (char *options, struct super_block *sb,
 | 
			
		|||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			journal_inode = path.dentry->d_inode;
 | 
			
		||||
			journal_inode = d_inode(path.dentry);
 | 
			
		||||
			if (!S_ISBLK(journal_inode->i_mode)) {
 | 
			
		||||
				ext3_msg(sb, KERN_ERR, "error: journal path %s "
 | 
			
		||||
					"is not a block device", journal_path);
 | 
			
		||||
| 
						 | 
				
			
			@ -2947,7 +2947,7 @@ static int ext3_write_info(struct super_block *sb, int type)
 | 
			
		|||
	handle_t *handle;
 | 
			
		||||
 | 
			
		||||
	/* Data block + inode block */
 | 
			
		||||
	handle = ext3_journal_start(sb->s_root->d_inode, 2);
 | 
			
		||||
	handle = ext3_journal_start(d_inode(sb->s_root), 2);
 | 
			
		||||
	if (IS_ERR(handle))
 | 
			
		||||
		return PTR_ERR(handle);
 | 
			
		||||
	ret = dquot_commit_info(sb, type);
 | 
			
		||||
| 
						 | 
				
			
			@ -2994,7 +2994,7 @@ static int ext3_quota_on(struct super_block *sb, int type, int format_id,
 | 
			
		|||
	 * When we journal data on quota file, we have to flush journal to see
 | 
			
		||||
	 * all updates to the file when we bypass pagecache...
 | 
			
		||||
	 */
 | 
			
		||||
	if (ext3_should_journal_data(path->dentry->d_inode)) {
 | 
			
		||||
	if (ext3_should_journal_data(d_inode(path->dentry))) {
 | 
			
		||||
		/*
 | 
			
		||||
		 * We don't need to lock updates but journal_flush() could
 | 
			
		||||
		 * otherwise be livelocked...
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
 | 
			
		||||
static void * ext3_follow_link(struct dentry *dentry, struct nameidata *nd)
 | 
			
		||||
{
 | 
			
		||||
	struct ext3_inode_info *ei = EXT3_I(dentry->d_inode);
 | 
			
		||||
	struct ext3_inode_info *ei = EXT3_I(d_inode(dentry));
 | 
			
		||||
	nd_set_link(nd, (char*)ei->i_data);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue