Unverified Commit 89c58cb3 authored by Eric Van Hensbergen's avatar Eric Van Hensbergen
Browse files

fs/9p: fix error reporting in v9fs_dir_release



Checking the p9_fid_put value allows us to pass back errors
involved if we end up clunking the fid as part of dir_release.

This can help with more graceful response to errors in writeback
among other things.

Signed-off-by: default avatarEric Van Hensbergen <ericvh@kernel.org>
Reviewed-by: default avatarDominique Martinet <asmadeus@codewreck.org>
parent 3866584a
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ static int v9fs_dir_readdir_dotl(struct file *file, struct dir_context *ctx)


/**
 * v9fs_dir_release - close a directory
 * v9fs_dir_release - called on a close of a file or directory
 * @inode: inode of the directory
 * @filp: file pointer to a directory
 *
@@ -209,6 +209,7 @@ int v9fs_dir_release(struct inode *inode, struct file *filp)
	struct p9_fid *fid;
	__le32 version;
	loff_t i_size;
	int retval = 0;

	fid = filp->private_data;
	p9_debug(P9_DEBUG_VFS, "inode: %p filp: %p fid: %d\n",
@@ -217,7 +218,7 @@ int v9fs_dir_release(struct inode *inode, struct file *filp)
		spin_lock(&inode->i_lock);
		hlist_del(&fid->ilist);
		spin_unlock(&inode->i_lock);
		p9_fid_put(fid);
		retval = p9_fid_put(fid);
	}

	if ((filp->f_mode & FMODE_WRITE)) {
@@ -228,7 +229,7 @@ int v9fs_dir_release(struct inode *inode, struct file *filp)
	} else {
		fscache_unuse_cookie(v9fs_inode_cookie(v9inode), NULL, NULL);
	}
	return 0;
	return retval;
}

const struct file_operations v9fs_dir_operations = {