fs/9p: Open writeback fid in O_SYNC mode
[deliverable/linux.git] / fs / 9p / fid.c
index cd63e002d826b18fbacff41577753fea62f5f37b..99a1a7b086341134c3fd72ed4012affb0e3ebd7f 100644 (file)
@@ -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);
This page took 0.037132 seconds and 5 git commands to generate.