]> Pileus Git - ~andy/linux/blobdiff - net/9p/client.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[~andy/linux] / net / 9p / client.c
index bc7b03537699dea93a578a879d5f991fec61ed8b..a848bca9fbffcd89e659e0d998bf830b83920765 100644 (file)
@@ -579,6 +579,8 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
        va_start(ap, fmt);
        err = p9pdu_vwritef(req->tc, c->proto_version, fmt, ap);
        va_end(ap);
+       if (err)
+               goto reterr;
        p9pdu_finalize(req->tc);
 
        err = c->trans_mod->request(c, req);
@@ -1163,17 +1165,18 @@ int p9_client_link(struct p9_fid *dfid, struct p9_fid *oldfid, char *newname)
 }
 EXPORT_SYMBOL(p9_client_link);
 
-int p9_client_fsync(struct p9_fid *fid)
+int p9_client_fsync(struct p9_fid *fid, int datasync)
 {
        int err;
        struct p9_client *clnt;
        struct p9_req_t *req;
 
-       P9_DPRINTK(P9_DEBUG_9P, ">>> TFSYNC fid %d\n", fid->fid);
+       P9_DPRINTK(P9_DEBUG_9P, ">>> TFSYNC fid %d datasync:%d\n",
+                       fid->fid, datasync);
        err = 0;
        clnt = fid->clnt;
 
-       req = p9_client_rpc(clnt, P9_TFSYNC, "d", fid->fid);
+       req = p9_client_rpc(clnt, P9_TFSYNC, "dd", fid->fid, datasync);
        if (IS_ERR(req)) {
                err = PTR_ERR(req);
                goto error;
@@ -1283,16 +1286,13 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset,
 
        if (data) {
                memmove(data, dataptr, count);
-       }
-
-       if (udata) {
+       } else {
                err = copy_to_user(udata, dataptr, count);
                if (err) {
                        err = -EFAULT;
                        goto free_and_error;
                }
        }
-
        p9_free_req(clnt, req);
        return count;