diff options
Diffstat (limited to 'fs/cifs/inode.c')
| -rw-r--r-- | fs/cifs/inode.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index b5e6635c578e..1e8a4b1579db 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -653,8 +653,8 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,  		 */  		if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&  		    !info->DeletePending) { -			cifs_dbg(1, "bogus file nlink value %u\n", -				fattr->cf_nlink); +			cifs_dbg(VFS, "bogus file nlink value %u\n", +				 fattr->cf_nlink);  			fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;  		}  	} @@ -2073,6 +2073,7 @@ int cifs_revalidate_dentry_attr(struct dentry *dentry)  	struct inode *inode = d_inode(dentry);  	struct super_block *sb = dentry->d_sb;  	char *full_path = NULL; +	int count = 0;  	if (inode == NULL)  		return -ENOENT; @@ -2094,15 +2095,18 @@ int cifs_revalidate_dentry_attr(struct dentry *dentry)  		 full_path, inode, inode->i_count.counter,  		 dentry, cifs_get_time(dentry), jiffies); +again:  	if (cifs_sb_master_tcon(CIFS_SB(sb))->unix_ext)  		rc = cifs_get_inode_info_unix(&inode, full_path, sb, xid);  	else  		rc = cifs_get_inode_info(&inode, full_path, NULL, sb,  					 xid, NULL); - +	if (rc == -EAGAIN && count++ < 10) +		goto again;  out:  	kfree(full_path);  	free_xid(xid); +  	return rc;  } @@ -2278,7 +2282,7 @@ cifs_set_file_size(struct inode *inode, struct iattr *attrs,  	 * writebehind data than the SMB timeout for the SetPathInfo  	 * request would allow  	 */ -	open_file = find_writable_file(cifsInode, true); +	open_file = find_writable_file(cifsInode, FIND_WR_FSUID_ONLY);  	if (open_file) {  		tcon = tlink_tcon(open_file->tlink);  		server = tcon->ses->server; @@ -2428,7 +2432,7 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)  		args->ctime = NO_CHANGE_64;  	args->device = 0; -	open_file = find_writable_file(cifsInode, true); +	open_file = find_writable_file(cifsInode, FIND_WR_FSUID_ONLY);  	if (open_file) {  		u16 nfid = open_file->fid.netfid;  		u32 npid = open_file->pid; @@ -2531,7 +2535,7 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)  	rc = 0;  	if (attrs->ia_valid & ATTR_MTIME) { -		rc = cifs_get_writable_file(cifsInode, false, &wfile); +		rc = cifs_get_writable_file(cifsInode, FIND_WR_ANY, &wfile);  		if (!rc) {  			tcon = tlink_tcon(wfile->tlink);  			rc = tcon->ses->server->ops->flush(xid, tcon, &wfile->fid); |