Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea59bb75 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Eric Van Hensbergen
Browse files

fs/9p: Open writeback fid in O_SYNC mode



Older version of protocol don't support tsyncfs operation.
So for them force a O_SYNC flag on the server

Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: default avatarVenkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent 059c138b
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -286,9 +286,11 @@ static struct p9_fid *v9fs_fid_clone_with_uid(struct dentry *dentry, uid_t uid)

struct p9_fid *v9fs_writeback_fid(struct dentry *dentry)
{
	int err;
	int err, flags;
	struct p9_fid *fid;
	struct v9fs_session_info *v9ses;

	v9ses = v9fs_inode2v9ses(dentry->d_inode);
	fid = v9fs_fid_clone_with_uid(dentry, 0);
	if (IS_ERR(fid))
		goto error_out;
@@ -297,8 +299,17 @@ struct p9_fid *v9fs_writeback_fid(struct dentry *dentry)
	 * dirty pages. We always request for the open fid in read-write
	 * mode so that a partial page write which result in page
	 * read can work.
	 *
	 * we don't have a tsyncfs operation for older version
	 * of protocol. So make sure the write back fid is
	 * opened in O_SYNC mode.
	 */
	err = p9_client_open(fid, O_RDWR);
	if (!v9fs_proto_dotl(v9ses))
		flags = O_RDWR | O_SYNC;
	else
		flags = O_RDWR;

	err = p9_client_open(fid, flags);
	if (err < 0) {
		p9_client_clunk(fid);
		fid = ERR_PTR(err);