diff options
| author | Anand Avati <avati@gluster.com> | 2012-01-13 23:17:07 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2012-01-20 05:06:15 -0800 | 
| commit | bb1e07b7f42e7db415527852e98fcc1cbf2e1285 (patch) | |
| tree | a434a1ff9983636e563bd1b8a16a5b11b8fd2347 /xlators/nfs/server/src/nfs3.c | |
| parent | 7e1f8e3bac201f88e2d9ef62fc69a044716dfced (diff) | |
nfs: changes for using nameless lookup and anonymous FDs
- Use gfid to create filehandle instead of encoding path components
- Utilize nameless lookups of GFID for deep resolution instead of
  crawling the namespace with component hints
- Use anonymous FDs for file based operations
- Do away with fdcaching code for files and dirs
Change-Id: Ic48fb23370b25d183f7e1fc1cc5dffa9d5bab3fb
BUG: 781318
Reviewed-on: http://review.gluster.com/2645
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/nfs/server/src/nfs3.c')
| -rw-r--r-- | xlators/nfs/server/src/nfs3.c | 351 | 
1 files changed, 171 insertions, 180 deletions
diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c index d78360502..3c540b36f 100644 --- a/xlators/nfs/server/src/nfs3.c +++ b/xlators/nfs/server/src/nfs3.c @@ -684,7 +684,7 @@ nfs3svc_getattr_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  status = nfs3_errno_to_nfsstat3 (op_errno);          } -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "GETATTR", +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_GETATTR,                               status, op_errno);          nfs3_getattr_reply (cs->req, status, buf); @@ -710,7 +710,7 @@ nfs3svc_getattr_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  status = nfs3_errno_to_nfsstat3 (op_errno);          } -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "GETATTR", +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_GETATTR,                               status, op_errno);          nfs3_getattr_reply (cs->req, status, buf); @@ -739,13 +739,22 @@ nfs3_getattr_resume (void *carg)           * for the root to have been looked up when the getattr on the root is           * sent. AND, this causes a problem for stat-prefetch in that it           * expects even the root inode to have been looked up. -         */ +          if (__is_root_gfid (cs->resolvedloc.inode->gfid))                  ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc,                                    nfs3svc_getattr_lookup_cbk, cs);          else                  ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                nfs3svc_getattr_stat_cbk, cs); +        */ + +	if (cs->hardresolved) { +		ret = -EFAULT; +		stat = NFS3_OK; +		goto nfs3err; +	} + +        ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, +                        nfs3svc_getattr_stat_cbk, cs);          if (ret < 0) {                  gf_log (GF_NFS3, GF_LOG_ERROR, "Stat fop failed: %s: %s", @@ -756,8 +765,8 @@ nfs3_getattr_resume (void *carg)  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "GETATTR", stat, -ret); -                nfs3_getattr_reply (cs->req, stat, NULL); +                                     NFS3_GETATTR, stat, -ret); +                nfs3_getattr_reply (cs->req, stat, &cs->stbuf);                  nfs3_call_state_wipe (cs);                  ret = 0;          } @@ -791,7 +800,7 @@ nfs3_getattr (rpcsvc_request_t *req, struct nfs3_fh *fh)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "GETATTR", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_GETATTR,                                       stat, -ret);                  nfs3_getattr_reply (req, stat, NULL);                  ret = 0; @@ -875,7 +884,7 @@ nfs3svc_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          stat = NFS3_OK;  nfs3err: -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "SETATTR", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_SETATTR, stat,                               op_errno);          nfs3_setattr_reply (cs->req, stat, prestat, postbuf);          nfs3_call_state_wipe (cs); @@ -904,18 +913,11 @@ nfs3svc_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto nfs3err;          } -        /* If the first stat was got from the guarded setattr callback, then -         * we'll need to use that stat instead of the preop returned here. +        prebuf = preop; +        /* Store the current preop in case we need to send a truncate, +         * in which case the preop to be returned will be this one.           */ -        if (cs->preparent.ia_ino != 0) -                prebuf = &cs->preparent; -        else { -                prebuf = preop; -                /* Store the current preop in case we need to send a truncate, -                 * in which case the preop to be returned will be this one. -                 */ -                cs->preparent = *preop; -        } +        cs->preparent = *preop;          /* Only truncate if the size is not already same as the requested           * truncation and also only if this is not a directory. @@ -936,7 +938,7 @@ nfs3svc_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "SETATTR", stat, op_errno); +                                     NFS3_SETATTR, stat, op_errno);                  nfs3_setattr_reply (cs->req, stat, prebuf, postop);                  nfs3_call_state_wipe (cs);          } @@ -982,7 +984,7 @@ nfs3svc_setattr_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "SETATTR", stat, op_errno); +                                     NFS3_SETATTR, stat, op_errno);                  nfs3_setattr_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs);          } @@ -1005,14 +1007,9 @@ nfs3_setattr_resume (void *carg)          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err);          nfs_request_user_init (&nfu, cs->req); -        /* If no ctime check is required, head straight to setting the attrs. */ -        if (cs->sattrguardcheck) -                ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                nfs3svc_setattr_stat_cbk, cs); -        else -                ret = nfs_setattr (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                   &cs->stbuf, cs->setattr_valid, -                                   nfs3svc_setattr_cbk, cs); +        ret = nfs_setattr (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, +                           &cs->stbuf, cs->setattr_valid, +                           nfs3svc_setattr_cbk, cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret); @@ -1020,7 +1017,7 @@ nfs3_setattr_resume (void *carg)  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "SETATTR", stat, -ret); +                                     NFS3_SETATTR, stat, -ret);                  nfs3_setattr_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs);          } @@ -1076,7 +1073,7 @@ nfs3_setattr (rpcsvc_request_t *req, struct nfs3_fh *fh, sattr3 *sattr,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "SETATTR", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_SETATTR,                                       stat, -ret);                  nfs3_setattr_reply (req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -1194,7 +1191,7 @@ xmit_res:                  goto out;          } -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "LOOKUP", status, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_LOOKUP, status,                              op_errno, &newfh);          nfs3_lookup_reply (cs->req, status, &newfh, buf, postparent);          nfs3_call_state_wipe (cs); @@ -1247,7 +1244,7 @@ nfs3svc_lookup_parentdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }  xmit_res: -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "LOOKUP", status, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_LOOKUP, status,                              op_errno, &newfh);          nfs3_lookup_reply (cs->req, status, &newfh, buf, postparent);          nfs3_call_state_wipe (cs); @@ -1297,7 +1294,8 @@ nfs3_lookup_parentdir_resume (void *carg)          if (!nfs3_fh_is_root_fh (&cs->fh)) {                  parent = inode_ref (cs->resolvedloc.parent);                  nfs_loc_wipe (&cs->resolvedloc); -                ret = nfs_inode_loc_fill (parent, &cs->resolvedloc); +                ret = nfs_inode_loc_fill (parent, &cs->resolvedloc, +                                          NFS_RESOLVE_CREATE);                  if (ret < 0) {                          gf_log (GF_NFS3, GF_LOG_ERROR, "nfs_inode_loc_fill" @@ -1314,7 +1312,7 @@ errtostat:  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "LOOKUP", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_LOOKUP,                                       stat, -ret);                  nfs3_lookup_reply (cs->req, stat, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -1334,11 +1332,18 @@ nfs3_lookup_resume (void *carg)          int                             ret = -EFAULT;          nfs_user_t                      nfu = {0, };          nfs3_call_state_t               *cs = NULL; +        struct nfs3_fh                  newfh = {{0},};          GF_VALIDATE_OR_GOTO (GF_NFS3, carg, nfs3err);          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err); +	if (cs->hardresolved) { +		stat = NFS3_OK; +		nfs3_fh_build_child_fh (&cs->parent, &cs->stbuf, &newfh); +		goto nfs3err; +	} +          nfs_request_user_init (&nfu, cs->req);          cs->parent = cs->resolvefh;          ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, @@ -1348,9 +1353,10 @@ nfs3_lookup_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "LOOKUP", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_LOOKUP,                                       stat, -ret); -                nfs3_lookup_reply (cs->req, stat, NULL, NULL, NULL); +                nfs3_lookup_reply (cs->req, stat, &newfh, &cs->stbuf, +				   &cs->postparent);                  nfs3_call_state_wipe (cs);          } @@ -1398,7 +1404,7 @@ nfs3_lookup (rpcsvc_request_t *req, struct nfs3_fh *fh, int fhlen, char *name)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "LOOKUP", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_LOOKUP,                                       stat,                                       -ret);                  nfs3_lookup_reply (req, stat, NULL, NULL, NULL); @@ -1469,7 +1475,7 @@ nfs3svc_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          cs->resolvedloc.path, strerror (op_errno));                  status = nfs3_errno_to_nfsstat3 (op_errno);          } -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "ACCESS", status, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_ACCESS, status,                               op_errno);          nfs3_access_reply (cs->req, status, op_errno);          nfs3_call_state_wipe (cs); @@ -1498,7 +1504,7 @@ nfs3_access_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "ACCESS", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_ACCESS,                                       stat, -ret);                  nfs3_access_reply (cs->req, stat, 0);                  nfs3_call_state_wipe (cs); @@ -1534,7 +1540,7 @@ nfs3_access (rpcsvc_request_t *req, struct nfs3_fh *fh, uint32_t accbits)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "ACCESS", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_ACCESS,                                       stat, -ret);                  nfs3_access_reply (req, stat, 0);                  nfs3_call_state_wipe (cs); @@ -1641,7 +1647,7 @@ nfs3_readlink_resume (void *carg)  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "READLINK", stat, -ret); +                                     NFS3_READLINK, stat, -ret);                  nfs3_readlink_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs);          } @@ -1677,7 +1683,7 @@ nfs3_readlink (rpcsvc_request_t *req, struct nfs3_fh *fh)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "READLINK", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_READLINK,                                       stat, -ret);                  nfs3_readlink_reply (req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -1808,7 +1814,7 @@ nfs3_read_fd_resume (void *carg)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "READ", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_READ,                                       stat, -ret);                  nfs3_read_reply (cs->req, stat, 0, NULL, 0, NULL, NULL, 0);                  nfs3_call_state_wipe (cs); @@ -1824,19 +1830,25 @@ nfs3_read_resume (void *carg)          nfsstat3                        stat = NFS3ERR_SERVERFAULT;          int                             ret = -EFAULT;          nfs3_call_state_t               *cs = NULL; +        fd_t                            *fd = NULL;          if (!carg)                  return ret;          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err); -        ret = nfs3_file_open_and_resume (cs, nfs3_read_fd_resume); -        if (ret < 0) -                stat = nfs3_errno_to_nfsstat3 (-ret); +        fd = fd_anonymous (cs->resolvedloc.inode); +        if (!fd) { +                gf_log (GF_NFS3, GF_LOG_ERROR, "Failed to create anonymous fd"); +                goto nfs3err; +        } +        cs->fd = fd; +        nfs3_read_fd_resume (cs); +        ret = 0;  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "READ", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_READ,                                       stat, -ret);                  nfs3_read_reply (cs->req, stat, 0, NULL,0, NULL, NULL, 0);                  nfs3_call_state_wipe (cs); @@ -1876,7 +1888,7 @@ nfs3_read (rpcsvc_request_t *req, struct nfs3_fh *fh, offset3 offset,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "READ", stat, +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_READ, stat,                                       -ret);                  nfs3_read_reply (req, stat, 0, NULL,0, NULL, NULL, 0);                  nfs3_call_state_wipe (cs); @@ -2125,46 +2137,26 @@ nfs3_write_resume (void *carg)          nfsstat3                stat = NFS3ERR_SERVERFAULT;          int                     ret = -EFAULT;          nfs3_call_state_t       *cs = NULL; +        fd_t                    *fd = NULL;          if (!carg)                  return ret;          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err); - -        ret = __nfs3_write_resume (cs); -        if (ret < 0) -                stat = nfs3_errno_to_nfsstat3 (-ret); -nfs3err: -        if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "WRITE", -                                     stat, -ret); -                nfs3_write_reply (cs->req, stat, 0, cs->writetype, 0, NULL, -                                  NULL); -                nfs3_call_state_wipe (cs); +        fd = fd_anonymous (cs->resolvedloc.inode); +        if (!fd) { +                gf_log (GF_NFS3, GF_LOG_ERROR, "Failed to create anonymous fd"); +                goto nfs3err;          } -        return ret; -} - -int -nfs3_write_open_resume (void *carg) -{ -        nfsstat3                stat = NFS3ERR_SERVERFAULT; -        int                     ret = -EFAULT; -        nfs3_call_state_t       *cs = NULL; - -        if (!carg) -                return ret; - -        cs = (nfs3_call_state_t *)carg; -        nfs3_check_fh_resolve_status (cs, stat, nfs3err); -        ret = nfs3_file_open_and_resume (cs, nfs3_write_resume); +        cs->fd = fd;    /* Gets unrefd when the call state is wiped. */ +        ret = __nfs3_write_resume (cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "WRITE", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_WRITE,                                       stat, -ret);                  nfs3_write_reply (cs->req, stat, 0, cs->writetype, 0, NULL,                                    NULL); @@ -2174,7 +2166,6 @@ nfs3err:  } -  int  nfs3_write (rpcsvc_request_t *req, struct nfs3_fh *fh, offset3 offset,              count3 count, stable_how stable, struct iovec payload, @@ -2206,13 +2197,13 @@ nfs3_write (rpcsvc_request_t *req, struct nfs3_fh *fh, offset3 offset,          cs->datavec = payload; -        ret = nfs3_fh_resolve_and_resume (cs, fh, NULL, nfs3_write_open_resume); +        ret = nfs3_fh_resolve_and_resume (cs, fh, NULL, nfs3_write_resume);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "WRITE", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_WRITE,                                       stat, -ret);                  nfs3_write_reply (req, stat, 0, stable, 0, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2334,7 +2325,7 @@ nfs3svc_create_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          stat = NFS3_OK;  nfs3err: -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "CREATE", stat, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_CREATE, stat,                              op_errno, &cs->fh);          nfs3_create_reply (cs->req, stat, &cs->fh, postop, &cs->preparent,                             &cs->postparent); @@ -2354,6 +2345,7 @@ nfs3svc_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          int                     ret = -EFAULT;          nfs_user_t              nfu = {0, };          nfs3_call_state_t       *cs = NULL; +	inode_t			*oldinode = NULL;          cs = frame->local;          if (op_ret == -1) { @@ -2365,6 +2357,8 @@ nfs3svc_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }          nfs3_fh_build_child_fh (&cs->parent, buf, &cs->fh); +        oldinode = inode_link (inode, cs->resolvedloc.parent, +                               cs->resolvedloc.name, buf);          /* Means no attributes were required to be set. */          if (!cs->setattr_valid) { @@ -2376,14 +2370,20 @@ nfs3svc_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          cs->preparent = *preparent;          cs->postparent = *postparent;          nfs_request_user_init (&nfu, cs->req); +        uuid_copy (cs->resolvedloc.gfid, inode->gfid);          ret = nfs_setattr (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc,&cs->stbuf,                             cs->setattr_valid, nfs3svc_create_setattr_cbk, cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err: +        if (oldinode) { +                inode_lookup (oldinode); +                inode_unref (oldinode); +        } +          if (ret < 0) { -                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "CREATE", +                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_CREATE,                                      stat, op_errno, &cs->fh);                  nfs3_create_reply (cs->req, stat, &cs->fh, buf, preparent,                                     postparent); @@ -2399,16 +2399,30 @@ nfs3_create_common (nfs3_call_state_t *cs)          int                     ret = -EFAULT;          int                     flags = 0;          nfs_user_t              nfu = {0, }; +        uid_t                   uid = 0; +        gid_t                   gid = 0;          if (!cs)                  return ret; -        if (cs->createmode == UNCHECKED) -                flags = O_RDWR; -        else if (cs->createmode == GUARDED) +        if (cs->createmode == GUARDED)                  flags = (O_RDWR | O_EXCL); +        else +                flags = O_RDWR; -        nfs_request_user_init (&nfu, cs->req); +        if (gf_attr_uid_set (cs->setattr_valid)) { +                uid = cs->stbuf.ia_uid; +                cs->setattr_valid &= ~GF_SET_ATTR_UID; +        } else +                uid = rpcsvc_request_uid (cs->req); + +        if (gf_attr_gid_set (cs->setattr_valid)) { +                gid = cs->stbuf.ia_gid; +                cs->setattr_valid &= ~GF_SET_ATTR_GID; +        } else +                gid = rpcsvc_request_gid (cs->req); + +        nfs_request_primary_user_init (&nfu, cs->req, uid, gid);          /* We can avoid sending the setattr call later if only the mode is           * required to be set. This is possible because the create fop allows           * us to specify a mode arg. @@ -2464,7 +2478,7 @@ nfs3svc_create_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "CREATE", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_CREATE,                                       stat, op_errno);                  nfs3_create_reply (cs->req, stat, &cs->fh, buf, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2505,16 +2519,7 @@ nfs3_create_exclusive (nfs3_call_state_t *cs)                  goto nfs3err;          } -        if (cs->setattr_valid & GF_SET_ATTR_MODE) { -                cs->setattr_valid &= ~GF_SET_ATTR_MODE; -                ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                  O_RDWR, cs->mode, nfs3svc_create_cbk, cs); -        } else -                ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, -                                  O_RDWR, -                                  NFS_DEFAULT_CREATE_MODE, nfs3svc_create_cbk, -                                  cs); - +        ret = nfs3_create_common (cs);  nfs3err:          return ret;  } @@ -2543,7 +2548,7 @@ nfs3_create_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "CREATE", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_CREATE,                                       stat, -ret);                  nfs3_create_reply (cs->req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2590,7 +2595,7 @@ nfs3_create (rpcsvc_request_t *req, struct nfs3_fh *dirfh, char *name,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "CREATE", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_CREATE,                                       stat, -ret);                  nfs3_create_reply (req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2678,7 +2683,7 @@ nfs3svc_mkdir_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          stat = NFS3_OK;  nfs3err: -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "MKDIR", stat, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_MKDIR, stat,                              op_errno, &cs->fh);          nfs3_mkdir_reply (cs->req, stat, &cs->fh, postop, &cs->preparent,                            &cs->postparent); @@ -2726,7 +2731,7 @@ nfs3svc_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  nfs3err:          if (ret < 0) { -                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "MKDIR", +                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_MKDIR,                                      stat, op_errno, &cs->fh);                  nfs3_mkdir_reply (cs->req, stat, &cs->fh, buf, preparent,                                    postparent); @@ -2765,7 +2770,7 @@ nfs3_mkdir_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "MKDIR", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_MKDIR,                                       stat, -ret);                  nfs3_mkdir_reply (cs->req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2810,7 +2815,7 @@ nfs3_mkdir (rpcsvc_request_t *req, struct nfs3_fh *dirfh, char *name,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "MKDIR", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_MKDIR,                                       stat, -ret);                  nfs3_mkdir_reply (req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -2890,7 +2895,7 @@ nfs3svc_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          stat = NFS3_OK;  nfs3err: -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "SYMLINK", stat, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_SYMLINK, stat,                              op_errno, &cs->fh);          nfs3_symlink_reply (cs->req, stat, &cs->fh, buf, preparent,                              postparent); @@ -2921,7 +2926,7 @@ nfs3_symlink_resume (void *carg)  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "SYMLINK", stat, -ret); +                                     NFS3_SYMLINK, stat, -ret);                  nfs3_symlink_reply (cs->req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs);          } @@ -2969,7 +2974,7 @@ nfs3_symlink (rpcsvc_request_t *req, struct nfs3_fh *dirfh, char *name,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "SYMLINK", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_SYMLINK,                                       stat, -ret);                  nfs3_symlink_reply (req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3050,7 +3055,7 @@ nfs3svc_mknod_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          stat = NFS3_OK;  nfs3err: -        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "MKNOD", stat, +        nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_MKNOD, stat,                              op_errno, &cs->fh);          nfs3_mknod_reply (cs->req, stat, &cs->fh, postop, &cs->preparent,                            &cs->postparent); @@ -3098,7 +3103,7 @@ nfs3svc_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), "MKNOD", +                nfs3_log_newfh_res (rpcsvc_request_xid (cs->req), NFS3_MKNOD,                                      stat,                                      op_errno, &cs->fh);                  nfs3_mknod_reply (cs->req, stat, &cs->fh, buf, preparent, @@ -3197,7 +3202,7 @@ nfs3_mknod_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "MKNOD", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_MKNOD,                                       stat, -ret);                  nfs3_mknod_reply (cs->req, stat, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3263,7 +3268,7 @@ nfs3_mknod (rpcsvc_request_t *req, struct nfs3_fh *fh, char *name,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "MKNOD", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_MKNOD,                                       stat, -ret);                  nfs3_mknod_reply (req, stat, NULL, NULL, NULL, NULL);                  /* Ret must be 0 after this so that the caller does not @@ -3327,9 +3332,7 @@ nfs3svc_remove_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                      struct iatt *postparent)  {          nfsstat3                stat = NFS3ERR_SERVERFAULT; -        fd_t                    *openfd = NULL;          nfs3_call_state_t       *cs = NULL; -        struct nfs3_state       *nfs3 = NULL;          cs = frame->local;          if (op_ret == -1) { @@ -3337,21 +3340,12 @@ nfs3svc_remove_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "%x: %s => -1 (%s)", rpcsvc_request_xid (cs->req),                          cs->resolvedloc.path, strerror (op_errno));                  stat = nfs3_errno_to_nfsstat3 (op_errno); -                goto do_not_unref_cached_fd;          } -        stat = NFS3_OK; -        /* Close any cached fds so that when any currently active write -         * finishes, the file is finally removed. -         */ -         openfd = fd_lookup (cs->resolvedloc.inode, 0); -         nfs3 = rpcsvc_request_program_private (cs->req); -         if (openfd) { -                fd_unref (openfd); -                nfs3_fdcache_remove (nfs3, openfd); -         } - -do_not_unref_cached_fd: -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "REMOVE", stat, + +        if (op_ret == 0) +                stat = NFS3_OK; + +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_REMOVE, stat,                               op_errno);          nfs3_remove_reply (cs->req, stat, preparent, postparent);          nfs3_call_state_wipe (cs); @@ -3400,7 +3394,7 @@ nfs3_remove_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "REMOVE", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_REMOVE,                                       stat, -ret);                  nfs3_remove_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3440,7 +3434,7 @@ nfs3_remove (rpcsvc_request_t *req, struct nfs3_fh *fh, char *name)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "REMOVE", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_REMOVE,                                       stat, -ret);                  nfs3_remove_reply (req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3516,7 +3510,7 @@ nfs3svc_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  stat = NFS3_OK;          } -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "RMDIR", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_RMDIR, stat,                               op_errno);          nfs3_rmdir_reply (cs->req, stat, preparent, postparent);          nfs3_call_state_wipe (cs); @@ -3545,7 +3539,7 @@ nfs3_rmdir_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "RMDIR", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_RMDIR,                                       stat, -ret);                  nfs3_rmdir_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3586,7 +3580,7 @@ nfs3_rmdir (rpcsvc_request_t *req, struct nfs3_fh *fh, char *name)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "RMDIR", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_RMDIR,                                       stat, -ret);                  nfs3_rmdir_reply (req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3658,7 +3652,6 @@ nfs3svc_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          int                     ret = -EFAULT;          nfsstat3                stat = NFS3ERR_SERVERFAULT;          nfs3_call_state_t       *cs = NULL; -        fd_t                    *openfd = NULL;          cs = frame->local;          if (op_ret == -1) { @@ -3671,20 +3664,8 @@ nfs3svc_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }          stat = NFS3_OK; -        /* Close any cached fds so that when any currently active writes to the -         * dst finish, the file is finally removed. -         * -         * This logic works because we know resolvedloc contains dst, which is -         * resolved after src -         */ -        openfd = fd_lookup (cs->resolvedloc.inode, 0); -        if (openfd) { -                fd_unref (openfd); -                nfs3_fdcache_remove (cs->nfs3state, openfd); -        } -  nfs3err: -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "RENAME", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_RENAME, stat,                               -ret);          nfs3_rename_reply (cs->req, stat, buf, preoldparent, postoldparent,                             prenewparent, postnewparent); @@ -3715,7 +3696,7 @@ nfs3_rename_resume_dst (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "RENAME", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_RENAME,                                       stat, -ret);                  nfs3_rename_reply (cs->req, stat, NULL, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3752,7 +3733,7 @@ nfs3_rename_resume_src (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "RENAME", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_RENAME,                                       stat, -ret);                  nfs3_rename_reply (cs->req, stat, NULL, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3807,7 +3788,7 @@ nfs3_rename (rpcsvc_request_t *req, struct nfs3_fh *olddirfh, char *oldname,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "RENAME", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_RENAME,                                       stat, -ret);                  nfs3_rename_reply (req, stat, NULL, NULL, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3887,7 +3868,7 @@ nfs3svc_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          } else                  stat = NFS3_OK; -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "LINK", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_LINK, stat,                               op_errno);          nfs3_link_reply (cs->req, stat, buf, preparent, postparent);          nfs3_call_state_wipe (cs); @@ -3918,7 +3899,7 @@ nfs3_link_resume_lnk (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "LINK", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_LINK,                                       stat, -ret);                  nfs3_link_reply (cs->req, stat, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3949,7 +3930,7 @@ nfs3_link_resume_tgt (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "LINK", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_LINK,                                       stat, -ret);                  nfs3_link_reply (cs->req, stat, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -3998,7 +3979,7 @@ nfs3_link (rpcsvc_request_t *req, struct nfs3_fh *targetfh,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "LINK", stat, +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_LINK, stat,                                       -ret);                  nfs3_link_reply (req, stat, NULL, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -4167,11 +4148,11 @@ err:          if (cs->maxcount == 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "READDIR", stat, op_errno); +                                     NFS3_READDIR, stat, op_errno);                  nfs3_readdir_reply (cs->req, stat, NULL, 0, NULL, NULL, 0, 0);          } else {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "READDIRP", stat, op_errno); +                                     NFS3_READDIRP, stat, op_errno);                  nfs3_readdirp_reply (cs->req, stat, NULL, 0, NULL, NULL,                                       0, 0, 0);          } @@ -4227,12 +4208,12 @@ nfs3err:          if (ret < 0) {                  if (cs->maxcount == 0) {                          nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                             "READDIR", stat, -ret); +                                             NFS3_READDIR, stat, -ret);                          nfs3_readdir_reply (cs->req, stat, NULL, 0, NULL, NULL,                                              0, 0);                  } else {                          nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                             "READDIRP", stat, -ret); +                                             NFS3_READDIRP, stat, -ret);                          nfs3_readdirp_reply (cs->req, stat, NULL, 0, NULL, NULL,                                               0, 0, 0);                  } @@ -4255,7 +4236,13 @@ nfs3_readdir_open_resume (void *carg)          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err); -        ret = nfs3_dir_open_and_resume (cs, nfs3_readdir_read_resume); +        cs->fd = fd_anonymous (cs->resolvedloc.inode); +        if (!cs->fd) { +                gf_log (GF_NFS3, GF_LOG_ERROR, "Faile to create anonymous fd"); +                goto nfs3err; +        } + +        ret = nfs3_readdir_read_resume (cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret); @@ -4263,12 +4250,12 @@ nfs3err:          if (ret < 0) {                  if (cs->maxcount == 0) {                          nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                             "READDIR", stat, -ret); +                                             NFS3_READDIR, stat, -ret);                          nfs3_readdir_reply (cs->req, stat, NULL, 0, NULL, NULL,                                              0, 0);                  } else {                          nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                             "READDIRP", stat, -ret); +                                             NFS3_READDIRP, stat, -ret);                          nfs3_readdirp_reply (cs->req, stat, NULL, 0, NULL, NULL,                                               0, 0, 0);                  } @@ -4317,12 +4304,12 @@ nfs3err:          if (ret < 0) {                  if (maxcount == 0) {                          nfs3_log_common_res (rpcsvc_request_xid (req), -                                             "READDIR", stat, -ret); +                                             NFS3_READDIR, stat, -ret);                          nfs3_readdir_reply (req, stat, NULL, 0, NULL, NULL, 0,                                              0);                  } else {                          nfs3_log_common_res (rpcsvc_request_xid (req), -                                             "READDIRP", stat, -ret); +                                             NFS3_READDIRP, stat, -ret);                          nfs3_readdirp_reply (req, stat, NULL, 0, NULL, NULL, 0,                                               0, 0);                  } @@ -4449,7 +4436,7 @@ nfs3_fsstat_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          } else                  stat = NFS3_OK; -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "FSTAT", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_FSSTAT, stat,                               op_errno);          nfs3_fsstat_reply (cs->req, stat, &cs->fsstat, buf);          nfs3_call_state_wipe (cs); @@ -4488,7 +4475,7 @@ nfs3_fsstat_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "FSTAT", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_FSSTAT,                                       stat, -ret);                  nfs3_fsstat_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -4520,7 +4507,7 @@ nfs3_fsstat_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "FSTAT", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_FSSTAT,                                       stat, -ret);                  nfs3_fsstat_reply (cs->req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -4558,7 +4545,7 @@ nfs3_fsstat (rpcsvc_request_t *req, struct nfs3_fh *fh)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "FSTAT", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_FSSTAT,                                       stat, -ret);                  nfs3_fsstat_reply (req, stat, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -4634,7 +4621,7 @@ nfs3svc_fsinfo_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }else                  status = NFS3_OK; -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "FSINFO", status, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_FSINFO, status,                               op_errno);          nfs3_fsinfo_reply (cs->req, status, buf); @@ -4667,7 +4654,7 @@ nfs3_fsinfo_resume (void *carg)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "FSINFO", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_FSINFO,                                       stat, -ret);                  nfs3_fsinfo_reply (cs->req, stat, NULL);                  nfs3_call_state_wipe (cs); @@ -4704,7 +4691,7 @@ nfs3_fsinfo (rpcsvc_request_t *req, struct nfs3_fh *fh)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "FSINFO", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_FSINFO,                                       stat, -ret);                  nfs3_fsinfo_reply (req, stat, NULL);                  nfs3_call_state_wipe (cs); @@ -4780,7 +4767,7 @@ nfs3svc_pathconf_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  stat = NFS3_OK;          } -        nfs3_log_common_res (rpcsvc_request_xid (cs->req), "PATHCONF", stat, +        nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_PATHCONF, stat,                               op_errno);          nfs3_pathconf_reply (cs->req, stat, sbuf);          nfs3_call_state_wipe (cs); @@ -4810,7 +4797,7 @@ nfs3_pathconf_resume (void *carg)  nfs3err:          if (ret < 0) {                  nfs3_log_common_res (rpcsvc_request_xid (cs->req), -                                     "PATHCONF", stat, -ret); +                                     NFS3_PATHCONF, stat, -ret);                  nfs3_pathconf_reply (cs->req, stat, NULL);                  nfs3_call_state_wipe (cs);          } @@ -4845,7 +4832,7 @@ nfs3_pathconf (rpcsvc_request_t *req, struct nfs3_fh *fh)  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "PATHCONF", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_PATHCONF,                                       stat, -ret);                  nfs3_pathconf_reply (req, stat, NULL);                  nfs3_call_state_wipe (cs); @@ -4904,8 +4891,7 @@ nfs3_commit_reply (rpcsvc_request_t *req, nfsstat3 stat, uint64_t wverf,  int32_t  nfs3svc_commit_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                    struct iatt *postbuf) +                    int32_t op_ret, int32_t op_errno)  {          nfsstat3                stat = NFS3ERR_SERVERFAULT;          nfs3_call_state_t       *cs = NULL; @@ -4923,7 +4909,7 @@ nfs3svc_commit_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          nfs3 = rpcsvc_request_program_private (cs->req);          nfs3_log_commit_res (rpcsvc_request_xid (cs->req), stat, op_errno,                               nfs3->serverstart); -        nfs3_commit_reply (cs->req, stat, nfs3->serverstart, prebuf, postbuf); +        nfs3_commit_reply (cs->req, stat, nfs3->serverstart, NULL, NULL);          nfs3_call_state_wipe (cs);          return 0; @@ -4950,14 +4936,14 @@ nfs3_commit_resume (void *carg)          }          nfs_request_user_init (&nfu, cs->req); -        ret = nfs_fsync (cs->nfsx, cs->vol, &nfu, cs->fd, 0, +        ret = nfs_flush (cs->nfsx, cs->vol, &nfu, cs->fd,                           nfs3svc_commit_cbk, cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "COMMIT", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_COMMIT,                                       stat, -ret);                  nfs3_commit_reply (cs->req, stat, cs->nfs3state->serverstart,                                     NULL, NULL); @@ -4965,7 +4951,7 @@ nfs3err:                  ret = 0;          } -        return ret; +        return 0;  } @@ -4981,13 +4967,18 @@ nfs3_commit_open_resume (void *carg)          cs = (nfs3_call_state_t *)carg;          nfs3_check_fh_resolve_status (cs, stat, nfs3err); +        cs->fd = fd_anonymous (cs->resolvedloc.inode); +        if (!cs->fd) { +                gf_log (GF_NFS3, GF_LOG_ERROR, "Failed to create anonymous fd."); +                goto nfs3err; +        } -        ret = nfs3_file_open_and_resume (cs, nfs3_commit_resume); +        ret = nfs3_commit_resume (cs);          if (ret < 0)                  stat = nfs3_errno_to_nfsstat3 (-ret);  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (cs->req), "COMMIT", +                nfs3_log_common_res (rpcsvc_request_xid (cs->req), NFS3_COMMIT,                                       stat, -ret);                  nfs3_commit_reply (cs->req, stat, 0, NULL, NULL);                  nfs3_call_state_wipe (cs); @@ -5031,7 +5022,7 @@ nfs3_commit (rpcsvc_request_t *req, struct nfs3_fh *fh, offset3 offset,  nfs3err:          if (ret < 0) { -                nfs3_log_common_res (rpcsvc_request_xid (req), "COMMIT", +                nfs3_log_common_res (rpcsvc_request_xid (req), NFS3_COMMIT,                                       stat, -ret);                  nfs3_commit_reply (req, stat, 0, NULL, NULL);                  nfs3_call_state_wipe (cs);  | 
