diff options
Diffstat (limited to 'xlators/nfs/server')
-rw-r--r-- | xlators/nfs/server/src/mount3.c | 15 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-fops.c | 432 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-fops.h | 115 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-generics.c | 904 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-generics.h | 88 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-inodes.c | 115 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs-inodes.h | 28 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs.c | 36 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs3-helpers.c | 40 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs3.c | 120 |
10 files changed, 475 insertions, 1418 deletions
diff --git a/xlators/nfs/server/src/mount3.c b/xlators/nfs/server/src/mount3.c index dc880508590..db4a88e3d69 100644 --- a/xlators/nfs/server/src/mount3.c +++ b/xlators/nfs/server/src/mount3.c @@ -219,7 +219,6 @@ mnt3svc_lookup_mount_cbk (call_frame_t *frame, void *cookie, rpcsvc_request_t *req = NULL; struct nfs3_fh fh = {{0}, }; struct mount3_state *ms = NULL; - xlator_t *exportxl = NULL; mountstat3 status = 0; int autharr[10]; int autharrlen = 0; @@ -243,15 +242,13 @@ mnt3svc_lookup_mount_cbk (call_frame_t *frame, void *cookie, if (status != MNT3_OK) goto xmit_res; - exportxl = (xlator_t *)cookie; - fh = nfs3_fh_build_root_fh (ms->nfsx->children, exportxl, *buf); - mnt3svc_update_mountlist (ms, req, exportxl); + fh = nfs3_fh_build_root_fh (ms->nfsx->children, this, *buf); + mnt3svc_update_mountlist (ms, req, this); xmit_res: gf_log (GF_MNT, GF_LOG_DEBUG, "Mount reply status: %d", status); if (op_ret == 0) { svc = rpcsvc_request_service (req); - autharrlen = rpcsvc_auth_array (svc, exportxl->name, autharr, - 10); + autharrlen = rpcsvc_auth_array (svc, this->name, autharr, 10); } res = mnt3svc_set_mountres3 (status, &fh, autharr, autharrlen); @@ -263,7 +260,7 @@ xmit_res: int -mnt3svc_mount (rpcsvc_request_t *req, xlator_t * xl) +mnt3svc_mount (rpcsvc_request_t *req, xlator_t *nfsx, xlator_t * xl) { loc_t oploc = {0, }; int ret = -1; @@ -279,7 +276,7 @@ mnt3svc_mount (rpcsvc_request_t *req, xlator_t * xl) * used to build the root fh sent to the client. */ nfs_request_user_init (&nfu, req); - ret = nfs_lookup (xl, &nfu, &oploc, mnt3svc_lookup_mount_cbk, + ret = nfs_lookup (nfsx, xl, &nfu, &oploc, mnt3svc_lookup_mount_cbk, (void *)req); nfs_loc_wipe (&oploc); @@ -346,7 +343,7 @@ mnt3svc_mnt (rpcsvc_request_t *req) goto rpcerr; } - mnt3svc_mount (req, targetxl); + mnt3svc_mount (req, ms->nfsx, targetxl); mnterr: if (ret == -1) { mnt3svc_mnt_error_reply (req, mntstat); diff --git a/xlators/nfs/server/src/nfs-fops.c b/xlators/nfs/server/src/nfs-fops.c index 3d4968a8b17..e7505b5dcdd 100644 --- a/xlators/nfs/server/src/nfs-fops.c +++ b/xlators/nfs/server/src/nfs-fops.c @@ -43,29 +43,28 @@ struct nfs_fop_local * -nfs_fop_local_init (xlator_t *xl) +nfs_fop_local_init (xlator_t *nfsx) { struct nfs_fop_local *l = NULL; - struct nfs_state *nfs = NULL; - if (!xl) + + if (!nfsx) return NULL; - nfs = xlator_top_private (xl); - l = mem_get (nfs->foppool); + l = mem_get (nfs_fop_mempool (nfsx)); memset (l, 0, sizeof (*l)); return l; } void -nfs_fop_local_wipe (xlator_t *xl, struct nfs_fop_local *l) +nfs_fop_local_wipe (xlator_t *nfsx, struct nfs_fop_local *l) { struct nfs_state *nfs = NULL; - if ((!xl) || (!l)) + if ((!nfsx) || (!l)) return; - nfs = xlator_top_private (xl); + nfs = nfsx->private; if (l->iobref) iobref_unref (l->iobref); @@ -211,17 +210,6 @@ err: * callback is responsible for doing the relevant GlusterFS state * maintenance operations on the data returned in the callbacks. * - * nfs_fop_<fopname>_sync - * These are synchronous versions of the above fops. The idea is that - * if the user wants to wait for the fop to complete, this is the interface to - * use. The caller is responsible for doing the relevant GlusterFS - * state maintenance operations on the call_stub_t that is returned, including - * calling call_stub_destroy. - * - * nfs_<fopname>_sync - * This is help callers avoid the need to pass a pathloc to the - * nfs_fop_<fopname>_sync versions of the same fops. - * * nfs_<fopname> * Unlike the nfs_fop_<fopname> variety, this is the stateful type of fop, in * that it silently performs all the relevant GlusterFS state maintainence @@ -243,7 +231,7 @@ nfs_fop_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *local = NULL; fop_lookup_cbk_t progcbk; - nfl_to_prog_data (this, local, progcbk, frame); + nfl_to_prog_data (local, progcbk, frame); nfs_fop_restore_root_ino (local, buf, NULL, NULL, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, @@ -255,7 +243,7 @@ nfs_fop_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_lookup (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_fop_lookup (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_lookup_cbk_t cbk, void *local) { call_frame_t *frame = NULL; @@ -267,11 +255,11 @@ nfs_fop_lookup (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, gf_log (GF_NFS, GF_LOG_TRACE, "Lookup: %s", loc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, loc); - STACK_WIND_COOKIE (frame, nfs_fop_lookup_cbk, xl, xl, xl->fops->lookup, - loc, NULL); + STACK_WIND_COOKIE (frame, nfs_fop_lookup_cbk, nfsx, xl, + xl->fops->lookup, loc, NULL); ret = 0; err: @@ -291,7 +279,7 @@ nfs_fop_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_stat_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, buf); @@ -302,7 +290,7 @@ nfs_fop_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_stat (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_fop_stat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_stat_cbk_t cbk, void *local) { call_frame_t *frame = NULL; @@ -314,10 +302,10 @@ nfs_fop_stat (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, gf_log (GF_NFS, GF_LOG_TRACE, "Stat: %s", loc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, loc); - STACK_WIND_COOKIE (frame, nfs_fop_stat_cbk, xl, xl, xl->fops->stat, + STACK_WIND_COOKIE (frame, nfs_fop_stat_cbk, nfsx, xl, xl->fops->stat, loc); ret = 0; err: @@ -337,7 +325,7 @@ nfs_fop_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_fstat_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, buf); @@ -348,22 +336,22 @@ nfs_fop_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_fstat (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, +nfs_fop_fstat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_fstat_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!fd) || (!nfu)) + if ((!nfsx) || (!xl) || (!fd) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "FStat"); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_fd_ino (nfl, fd); - STACK_WIND_COOKIE (frame, nfs_fop_fstat_cbk, xl, xl, xl->fops->fstat, + STACK_WIND_COOKIE (frame, nfs_fop_fstat_cbk, nfsx, xl, xl->fops->fstat, fd); ret = 0; @@ -384,7 +372,7 @@ nfs_fop_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_opendir_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd); nfs_stack_destroy (frame); @@ -393,21 +381,21 @@ nfs_fop_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_opendir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc,fd_t *dirfd, - fop_opendir_cbk_t cbk, void *local) +nfs_fop_opendir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + fd_t *dirfd, fop_opendir_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!dirfd) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!dirfd) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Opendir: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); - STACK_WIND_COOKIE (frame, nfs_fop_opendir_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_opendir_cbk, nfsx, xl, xl->fops->opendir, pathloc, dirfd); ret = 0; @@ -427,7 +415,7 @@ nfs_fop_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_flush_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno); @@ -437,20 +425,20 @@ nfs_fop_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_flush (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, +nfs_fop_flush (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_flush_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!fd) || (!nfu)) + if ((!nfsx) || (!xl) || (!fd) || (!nfu)) return ret; nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); - STACK_WIND_COOKIE (frame, nfs_fop_flush_cbk, xl, xl, xl->fops->flush, + STACK_WIND_COOKIE (frame, nfs_fop_flush_cbk, nfsx, xl, xl->fops->flush, fd); ret = 0; err: @@ -470,7 +458,7 @@ nfs_fop_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_readdirp_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, entries); @@ -481,7 +469,7 @@ nfs_fop_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_readdirp (xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, +nfs_fop_readdirp (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, size_t bufsize, off_t offset, fop_readdirp_cbk_t cbk, void *local) { @@ -489,14 +477,14 @@ nfs_fop_readdirp (xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!dirfd) || (!nfu)) + if ((!nfsx) || (!xl) || (!dirfd) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "readdir"); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); - STACK_WIND_COOKIE (frame, nfs_fop_readdirp_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_readdirp_cbk, nfsx, xl, xl->fops->readdirp, dirfd, bufsize, offset); ret = 0; @@ -518,7 +506,7 @@ nfs_fop_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_statfs_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, buf); @@ -528,22 +516,22 @@ nfs_fop_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_statfs (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_statfs (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_statfs_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Statfs: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); - STACK_WIND_COOKIE (frame, nfs_fop_statfs_cbk, xl, xl, xl->fops->statfs - ,pathloc); + STACK_WIND_COOKIE (frame, nfs_fop_statfs_cbk, nfsx, xl, + xl->fops->statfs, pathloc); ret = 0; err: if (ret < 0) { @@ -564,7 +552,7 @@ nfs_fop_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_create_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd, inode, buf, @@ -576,22 +564,23 @@ nfs_fop_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - mode_t mode, fd_t *fd, fop_create_cbk_t cbk, void *local) +nfs_fop_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int flags, mode_t mode, fd_t *fd, fop_create_cbk_t cbk, + void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Create: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_create_cbk, xl, xl, xl->fops->create + STACK_WIND_COOKIE (frame, nfs_fop_create_cbk, nfsx, xl,xl->fops->create , pathloc, flags, mode, fd); ret = 0; err: @@ -612,7 +601,7 @@ nfs_fop_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_setattr_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, pre, post, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, pre, post); @@ -623,7 +612,7 @@ nfs_fop_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_setattr (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_setattr (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, struct iatt *buf, int32_t valid, fop_setattr_cbk_t cbk, void *local) { @@ -631,15 +620,15 @@ nfs_fop_setattr (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Setattr: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_setattr_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_setattr_cbk, nfsx, xl, xl->fops->setattr, pathloc, buf, valid); ret = 0; err: @@ -661,7 +650,7 @@ nfs_fop_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_mkdir_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, @@ -672,22 +661,22 @@ nfs_fop_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - fop_mkdir_cbk_t cbk, void *local) +nfs_fop_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, fop_mkdir_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Mkdir: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_mkdir_cbk, xl, xl, xl->fops->mkdir, + STACK_WIND_COOKIE (frame, nfs_fop_mkdir_cbk, nfsx, xl, xl->fops->mkdir, pathloc, mode); ret = 0; err: @@ -709,7 +698,7 @@ nfs_fop_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_symlink_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, @@ -719,22 +708,22 @@ nfs_fop_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } int -nfs_fop_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, +nfs_fop_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *pathloc, fop_symlink_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!target) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!target) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Symlink: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_symlink_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_symlink_cbk, nfsx, xl, xl->fops->symlink, target, pathloc); ret = 0; err: @@ -755,7 +744,7 @@ nfs_fop_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_readlink_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, path, buf); @@ -765,22 +754,22 @@ nfs_fop_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_readlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_readlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, size_t size, fop_readlink_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Readlink: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_readlink_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_readlink_cbk, nfsx, xl, xl->fops->readlink, pathloc, size); ret = 0; err: @@ -802,7 +791,7 @@ nfs_fop_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_mknod_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, @@ -813,22 +802,22 @@ nfs_fop_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - dev_t dev, fop_mknod_cbk_t cbk, void *local) +nfs_fop_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Mknod: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_mknod_cbk, xl, xl, xl->fops->mknod, + STACK_WIND_COOKIE (frame, nfs_fop_mknod_cbk, nfsx, xl, xl->fops->mknod, pathloc, mode, dev); ret = 0; err: @@ -838,7 +827,6 @@ err: } return ret; - } int32_t @@ -849,7 +837,7 @@ nfs_fop_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = frame->local; fop_rmdir_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, NULL, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, preparent, @@ -861,22 +849,22 @@ nfs_fop_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_rmdir_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Rmdir: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_rmdir_cbk, xl, xl, xl->fops->rmdir, + STACK_WIND_COOKIE (frame, nfs_fop_rmdir_cbk, nfsx, xl, xl->fops->rmdir, pathloc); ret = 0; err: @@ -898,7 +886,7 @@ nfs_fop_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = frame->local; fop_unlink_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, NULL, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, preparent, @@ -909,23 +897,23 @@ nfs_fop_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Unlink: %s", pathloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, pathloc); - STACK_WIND_COOKIE (frame, nfs_fop_unlink_cbk, xl, xl, xl->fops->unlink, - pathloc); + STACK_WIND_COOKIE (frame, nfs_fop_unlink_cbk, nfsx, xl, + xl->fops->unlink, pathloc); ret = 0; err: if (ret < 0) { @@ -947,7 +935,7 @@ nfs_fop_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_link_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, buf, NULL, preparent, postparent); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, @@ -959,23 +947,23 @@ nfs_fop_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_link_cbk_t cbk, void *local) +nfs_fop_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_link_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!oldloc) || (!newloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Link: %s -> %s", newloc->path, oldloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, newloc); - STACK_WIND_COOKIE (frame, nfs_fop_link_cbk, xl, xl, xl->fops->link, + STACK_WIND_COOKIE (frame, nfs_fop_link_cbk, nfsx, xl, xl->fops->link, oldloc, newloc); ret = 0; err: @@ -998,7 +986,7 @@ nfs_fop_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_rename_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); /* The preattr arg needs to be NULL instead of @buf because it is * possible that the new parent is not root whereas the source dir * could've been. That is handled in the next macro. @@ -1016,25 +1004,25 @@ nfs_fop_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_fop_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_rename_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!oldloc) || (!newloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Rename: %s -> %s", oldloc->path, newloc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, oldloc); nfs_fop_newloc_save_root_ino (nfl, newloc); - STACK_WIND_COOKIE (frame, nfs_fop_rename_cbk, xl, xl, xl->fops->rename, - oldloc, newloc); + STACK_WIND_COOKIE (frame, nfs_fop_rename_cbk, nfsx, xl, + xl->fops->rename, oldloc, newloc); ret = 0; err: if (ret < 0) { @@ -1053,7 +1041,7 @@ nfs_fop_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_open_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd); nfs_stack_destroy (frame); @@ -1062,21 +1050,22 @@ nfs_fop_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } int -nfs_fop_open (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, int32_t flags, - fd_t *fd, int32_t wbflags, fop_open_cbk_t cbk, void *local) +nfs_fop_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + int32_t flags, fd_t *fd, int32_t wbflags, fop_open_cbk_t cbk, + void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!loc) || (!fd) || (!nfu)) + if ((!nfsx) || (!xl) || (!loc) || (!fd) || (!nfu)) return ret; gf_log (GF_NFS, GF_LOG_TRACE, "Open: %s", loc->path); nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); - STACK_WIND_COOKIE (frame, nfs_fop_open_cbk, xl, xl, xl->fops->open, + STACK_WIND_COOKIE (frame, nfs_fop_open_cbk, nfsx, xl, xl->fops->open, loc, flags, fd, wbflags); ret = 0; err: @@ -1086,7 +1075,6 @@ err: } return ret; - } @@ -1098,7 +1086,7 @@ nfs_fop_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_writev_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, prebuf, postbuf, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, prebuf,postbuf); @@ -1110,19 +1098,19 @@ nfs_fop_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_write (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, - struct iovec *vector, int32_t count, off_t offset, - fop_writev_cbk_t cbk, void *local) +nfs_fop_write (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + struct iobuf *srciob, struct iovec *vector, int32_t count, + off_t offset, fop_writev_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!fd) || (!vector) || (!nfu) || (!srciob)) + if ((!nfsx) || (!xl) || (!fd) || (!vector) || (!nfu) || (!srciob)) return ret; nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_fd_ino (nfl, fd); nfl->iobref = iobref_new (); @@ -1133,14 +1121,14 @@ nfs_fop_write (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, } iobref_add (nfl->iobref, srciob); - STACK_WIND_COOKIE (frame, nfs_fop_writev_cbk, xl, xl, xl->fops->writev + STACK_WIND_COOKIE (frame, nfs_fop_writev_cbk, nfsx, xl,xl->fops->writev , fd, vector, count, offset, nfl->iobref); ret = 0; err: if (ret < 0) { if (frame) nfs_stack_destroy (frame); - nfs_fop_local_wipe (xl, nfl); + nfs_fop_local_wipe (nfsx, nfl); } return ret; @@ -1155,7 +1143,7 @@ nfs_fop_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_fsync_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, prebuf, postbuf, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, prebuf,postbuf); @@ -1166,21 +1154,21 @@ nfs_fop_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_fsync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync, - fop_fsync_cbk_t cbk, void *local) +nfs_fop_fsync (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + int32_t datasync, fop_fsync_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!fd)) + if ((!nfsx) || (!xl) || (!fd)) return ret; nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_fd_ino (nfl, fd); - STACK_WIND_COOKIE (frame, nfs_fop_fsync_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_fsync_cbk, nfsx, xl, xl->fops->fsync, fd, datasync); ret = 0; err: @@ -1201,7 +1189,7 @@ nfs_fop_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_readv_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, stbuf, NULL, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, vector, count, @@ -1213,8 +1201,8 @@ nfs_fop_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_read (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, - off_t offset, fop_readv_cbk_t cbk, void *local) +nfs_fop_read (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + size_t size, off_t offset, fop_readv_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; @@ -1224,11 +1212,11 @@ nfs_fop_read (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, return ret; nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_fd_ino (nfl, fd); - STACK_WIND_COOKIE (frame, nfs_fop_readv_cbk, xl, xl, xl->fops->readv, fd - , size, offset); + STACK_WIND_COOKIE (frame, nfs_fop_readv_cbk, nfsx, xl, xl->fops->readv, + fd, size, offset); ret = 0; err: if (ret < 0) { @@ -1248,7 +1236,7 @@ nfs_fop_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, struct nfs_fop_local *nfl = NULL; fop_truncate_cbk_t progcbk = NULL; - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); nfs_fop_restore_root_ino (nfl, prebuf, postbuf, NULL, NULL); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, prebuf,postbuf); @@ -1259,21 +1247,21 @@ nfs_fop_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_fop_truncate (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, off_t offset, - fop_truncate_cbk_t cbk, void *local) +nfs_fop_truncate (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + off_t offset, fop_truncate_cbk_t cbk, void *local) { call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; - if ((!xl) || (!loc) || (!nfu)) + if ((!nfsx) || (!xl) || (!loc) || (!nfu)) return ret; nfs_fop_handle_frame_create (frame, xl, nfu, ret, err); - nfs_fop_handle_local_init (frame, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, loc); - STACK_WIND_COOKIE (frame, nfs_fop_truncate_cbk, xl, xl, + STACK_WIND_COOKIE (frame, nfs_fop_truncate_cbk, nfsx, xl, xl->fops->truncate, loc, offset); ret = 0; @@ -1285,157 +1273,3 @@ err: return ret; } - - -int -nfs_fop_lookup_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, inode_t *inode, - struct iatt *buf, dict_t *xattr, - struct iatt *postparent) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync lookup failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync lookup done"); - - sf->replystub = fop_lookup_cbk_stub (frame, NULL, op_ret, op_errno, - inode, buf, xattr, postparent); - nfs_syncfop_notify (sf); - return 0; -} - - -call_stub_t * -nfs_fop_lookup_sync (xlator_t *xl, nfs_user_t *nfu, loc_t *loc) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!loc) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_fop_lookup (xl, nfu, loc, nfs_fop_lookup_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Sync lookup failed"); - goto err; - } - - reply = nfs_syncfop_wait (sf); - -err: - return reply; -} - - - -int32_t -nfs_fop_readdirp_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - gf_dirent_t *entries) -{ - nfs_syncfop_t *sf = frame->local; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync readdir failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync readdir done"); - - sf->replystub = fop_readdirp_cbk_stub (frame, NULL, op_ret, op_errno, - entries); - - nfs_syncfop_notify (sf); - return 0; -} - - -/* This function does not update or map the st_dev in the d_stat of all the - * entries that were read. That mapping for the sync version of readdiring - * happens in the dcache. - */ -call_stub_t * -nfs_fop_readdirp_sync (xlator_t *fopxl, nfs_user_t *nfu, fd_t *dirfd, - off_t offset, size_t bufsize) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!fopxl) || (!nfu) || (!dirfd)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "sync fop local init failed"); - goto ret; - } - - ret = nfs_fop_readdirp (fopxl, nfu, dirfd, bufsize, offset, - nfs_fop_readdirp_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Fop readdir failed: %s", - strerror (-ret)); - goto ret; - } - - reply = nfs_syncfop_wait (sf); - -ret: - return reply; -} - - - -nfs_syncfop_t * -nfs_syncfop_init () -{ - nfs_syncfop_t *sfl = NULL; - - sfl = CALLOC (1, sizeof (*sfl)); - if (!sfl) { - gf_log (GF_NFS, GF_LOG_ERROR, "Memory allocation failed"); - return NULL; - } - - sem_init (&sfl->replysig, 0, 0); - - return sfl; -} - - -call_stub_t * -nfs_syncfop_wait (nfs_syncfop_t *s) -{ - call_stub_t *replystub = NULL; - - gf_log (GF_NFS, GF_LOG_TRACE, "Waiting for sync fop"); - sem_wait (&s->replysig); - gf_log (GF_NFS, GF_LOG_TRACE, "Sync fop notification received"); - replystub = s->replystub; - FREE (s); - return replystub; -} - - -void -nfs_syncfop_notify (nfs_syncfop_t *s) -{ - sem_post (&s->replysig); - gf_log (GF_NFS, GF_LOG_TRACE, "Sync fop notified"); -} - - - diff --git a/xlators/nfs/server/src/nfs-fops.h b/xlators/nfs/server/src/nfs-fops.h index 8b12777d7b4..24fa0b99b2d 100644 --- a/xlators/nfs/server/src/nfs-fops.h +++ b/xlators/nfs/server/src/nfs-fops.h @@ -98,6 +98,7 @@ struct nfs_fop_local { char path[NFS_NAME_MAX]; char newpath[NFS_NAME_MAX]; + xlator_t *nfsx; }; extern struct nfs_fop_local * @@ -106,32 +107,34 @@ nfs_fop_local_init (xlator_t *xl); extern void nfs_fop_local_wipe (xlator_t *xl, struct nfs_fop_local *l); -#define xlator_top_private(xl) ((struct nfs_state *)((xlator_t *)(xl)->ctx->top)->private) +#define nfs_state(nfsxl) (nfsxl)->private +#define nfs_fop_mempool(nfxl) (((struct nfs_state *)nfs_state(nfxl))->foppool) -#define prog_data_to_nfl(xla, nflocal, fram, pcbk, plocal) \ +#define prog_data_to_nfl(nf,nflocal, fram, pcbk, plocal) \ do { \ - nflocal = nfs_fop_local_init (xla); \ + nflocal = nfs_fop_local_init (nf); \ if (nflocal) { \ nflocal->proglocal = plocal; \ nflocal->progcbk = pcbk; \ + nflocal->nfsx = nf; \ if (fram) \ - ((call_frame_t *)fram)->local = nflocal; \ + ((call_frame_t *)fram)->local = nflocal;\ } \ } while (0) \ -#define nfl_to_prog_data(xla, nflocal, pcbk, fram) \ +#define nfl_to_prog_data(nflocal, pcbk, fram) \ do { \ nflocal = fram->local; \ fram->local = nflocal->proglocal; \ pcbk = nflocal->progcbk; \ - nfs_fop_local_wipe (xla, nflocal); \ + nfs_fop_local_wipe (nflocal->nfsx, nflocal); \ } while (0) \ -#define nfs_fop_handle_local_init(fram, xla, nfloc, cbck,prgloc,retval,lab) \ +#define nfs_fop_handle_local_init(fram,nfx, nfloc, cbck,prgloc,retval,lab) \ do { \ - prog_data_to_nfl (xla, nfloc, fram, cbck, prgloc); \ + prog_data_to_nfl (nfx, nfloc, fram, cbck, prgloc); \ if (!nfloc) { \ gf_log (GF_NFS,GF_LOG_ERROR,"Failed to init local");\ retval = -ENOMEM; \ @@ -140,120 +143,94 @@ nfs_fop_local_wipe (xlator_t *xl, struct nfs_fop_local *l); } while (0) \ extern int -nfs_fop_fstat (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, +nfs_fop_fstat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_stat_cbk_t cbk, void *local); extern int -nfs_fop_readdirp (xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, +nfs_fop_readdirp (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, size_t bufsize, off_t offset, fop_readdir_cbk_t cbk, void *local); extern int -nfs_fop_lookup (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_fop_lookup (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_lookup_cbk_t cbk, void *local); extern int -nfs_fop_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - mode_t mode, fd_t *fd, fop_create_cbk_t cbk, void *local); +nfs_fop_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int flags, mode_t mode, fd_t *fd, fop_create_cbk_t cbk, + void *local); extern int -nfs_fop_flush (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, +nfs_fop_flush (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_flush_cbk_t cbk, void *local); extern int -nfs_fop_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - fop_mkdir_cbk_t cbk, void *local); +nfs_fop_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, fop_mkdir_cbk_t cbk, void *local); extern int -nfs_fop_truncate (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, off_t offset, - fop_truncate_cbk_t cbk, void *local); +nfs_fop_truncate (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + off_t offset, fop_truncate_cbk_t cbk, void *local); extern int -nfs_fop_read (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, - off_t offset, fop_readv_cbk_t cbk, void *local); +nfs_fop_read (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + size_t size, off_t offset, fop_readv_cbk_t cbk, void *local); extern int -nfs_fop_fsync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync, - fop_fsync_cbk_t cbk, void *local); +nfs_fop_fsync (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + int32_t datasync, fop_fsync_cbk_t cbk, void *local); extern int -nfs_fop_write (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, - struct iovec *vector, int32_t count, off_t offset, - fop_writev_cbk_t cbk, void *local); +nfs_fop_write (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + struct iobuf *srciob, struct iovec *vector, int32_t count, + off_t offset, fop_writev_cbk_t cbk, void *local); extern int -nfs_fop_open (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, int32_t flags, - fd_t *fd, int32_t wbflags, fop_open_cbk_t cbk, void *local); +nfs_fop_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + int32_t flags, fd_t *fd, int32_t wbflags, fop_open_cbk_t cbk, + void *local); extern int -nfs_fop_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_fop_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_rename_cbk_t cbk, void *local); extern int -nfs_fop_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_link_cbk_t cbk, void *local); +nfs_fop_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_link_cbk_t cbk, void *local); extern int -nfs_fop_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local); extern int -nfs_fop_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_rmdir_cbk_t cbk, void *local); extern int -nfs_fop_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - dev_t dev, fop_mknod_cbk_t cbk, void *local); +nfs_fop_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local); extern int -nfs_fop_readlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_readlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, size_t size, fop_readlink_cbk_t cbk, void *local); extern int -nfs_fop_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, +nfs_fop_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *pathloc, fop_symlink_cbk_t cbk, void *local); extern int -nfs_fop_setattr (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_setattr (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, struct iatt *buf, int32_t valid, fop_setattr_cbk_t cbk, void *local); extern int -nfs_fop_statfs (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_fop_statfs (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_statfs_cbk_t cbk, void *local); extern int -nfs_fop_opendir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc,fd_t *dirfd, - fop_opendir_cbk_t cbk, void *local); +nfs_fop_opendir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + fd_t *dirfd, fop_opendir_cbk_t cbk, void *local); extern int -nfs_fop_stat (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_fop_stat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_stat_cbk_t cbk, void *local); -/* Synchronous equivalents of some of the fops above. - */ - -/* sfl = sync fop local - * Structure used to turn async fops into sync calls for certain NFS ops - * that need blocking operations. - */ -typedef struct nfs_syncfop { - sem_t replysig; - call_stub_t *replystub; -} nfs_syncfop_t; - -extern nfs_syncfop_t * -nfs_syncfop_init (); - -extern call_stub_t * -nfs_syncfop_wait (nfs_syncfop_t *s); - -extern void -nfs_syncfop_notify (nfs_syncfop_t *s); - -extern call_stub_t * -nfs_fop_lookup_sync (xlator_t *xl, nfs_user_t *nfu, loc_t *loc); - -extern call_stub_t * -nfs_fop_readdirp_sync (xlator_t *fopxl, nfs_user_t *nfu, fd_t *dirfd, - off_t offset, size_t bufsize); - #endif diff --git a/xlators/nfs/server/src/nfs-generics.c b/xlators/nfs/server/src/nfs-generics.c index f83a7c86814..b248c28755b 100644 --- a/xlators/nfs/server/src/nfs-generics.c +++ b/xlators/nfs/server/src/nfs-generics.c @@ -34,184 +34,182 @@ int -nfs_fstat (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_stat_cbk_t cbk, - void *local) +nfs_fstat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + fop_stat_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!fd) || (!nfu)) + if ((!nfsx) || (!xl) || (!fd) || (!nfu)) return ret; - ret = nfs_fop_fstat (xl, nfu, fd, cbk, local); + ret = nfs_fop_fstat (nfsx, xl, nfu, fd, cbk, local); return ret; } int -nfs_stat (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_stat_cbk_t cbk, - void *local) +nfs_stat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + fop_stat_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_fop_stat (xl, nfu, pathloc, cbk, local); + ret = nfs_fop_stat (nfsx, xl, nfu, pathloc, cbk, local); return ret; } - int -nfs_readdirp (xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, size_t bufsize, - off_t offset, fop_readdir_cbk_t cbk, void *local) +nfs_readdirp (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, + size_t bufsize, off_t offset, fop_readdir_cbk_t cbk, void *local) { - if ((!xl) || (!dirfd) || (!nfu)) + if ((!nfsx) || (!xl) || (!dirfd) || (!nfu)) return -EFAULT; - return nfs_fop_readdirp (xl, nfu, dirfd, bufsize, offset, cbk, + return nfs_fop_readdirp (nfsx, xl, nfu, dirfd, bufsize, offset, cbk, local); } - int -nfs_lookup (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_lookup (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_lookup_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_fop_lookup (xl, nfu, pathloc, cbk, local); + ret = nfs_fop_lookup (nfsx, xl, nfu, pathloc, cbk, local); return ret; } int -nfs_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - mode_t mode, fop_create_cbk_t cbk, void *local) +nfs_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int flags, mode_t mode, fop_create_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_inode_create (xl, nfu, pathloc, flags, mode, cbk,local); + ret = nfs_inode_create (nfsx, xl, nfu, pathloc, flags, mode, cbk,local); return ret; } int -nfs_flush (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_flush_cbk_t cbk, - void *local) +nfs_flush (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + fop_flush_cbk_t cbk, void *local) { - return nfs_fop_flush (xl, nfu, fd, cbk, local); + return nfs_fop_flush (nfsx, xl, nfu, fd, cbk, local); } int -nfs_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - fop_mkdir_cbk_t cbk, void *local) +nfs_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, fop_mkdir_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_inode_mkdir (xl, nfu, pathloc, mode, cbk, local); + ret = nfs_inode_mkdir (nfsx, xl, nfu, pathloc, mode, cbk, local); return ret; } int -nfs_truncate (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, off_t offset, - fop_truncate_cbk_t cbk, void *local) +nfs_truncate (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + off_t offset, fop_truncate_cbk_t cbk, void *local) { int ret = -EFAULT; if ((!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_fop_truncate (xl, nfu, pathloc, offset, cbk, local); + ret = nfs_fop_truncate (nfsx, xl, nfu, pathloc, offset, cbk, local); return ret; } int -nfs_read (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, +nfs_read (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, off_t offset, fop_readv_cbk_t cbk, void *local) { - return nfs_fop_read (xl, nfu, fd, size, offset, cbk, local); + return nfs_fop_read (nfsx, xl, nfu, fd, size, offset, cbk, local); } int -nfs_fsync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync, - fop_fsync_cbk_t cbk, void *local) +nfs_fsync (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + int32_t datasync, fop_fsync_cbk_t cbk, void *local) { - return nfs_fop_fsync (xl, nfu, fd, datasync, cbk, local); + return nfs_fop_fsync (nfsx, xl, nfu, fd, datasync, cbk, local); } int -nfs_write (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, - struct iovec *vector, int32_t count, off_t offset, - fop_writev_cbk_t cbk, void *local) +nfs_write (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + struct iobuf *srciob, struct iovec *vector, int32_t count, + off_t offset, fop_writev_cbk_t cbk, void *local) { - return nfs_fop_write (xl, nfu, fd, srciob, vector, count, offset, cbk, - local); + return nfs_fop_write (nfsx, xl, nfu, fd, srciob, vector, count, offset, + cbk, local); } int -nfs_open (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int32_t flags, - fop_open_cbk_t cbk, void *local) +nfs_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int32_t flags, fop_open_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_inode_open (xl, nfu, pathloc, flags, GF_OPEN_NOWB, cbk, + ret = nfs_inode_open (nfsx, xl, nfu, pathloc, flags, GF_OPEN_NOWB, cbk, local); return ret; } int -nfs_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_rename_cbk_t cbk, void *local) +nfs_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_rename_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!oldloc) || (!newloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc) || (!nfu)) return ret; - ret = nfs_inode_rename (xl, nfu, oldloc, newloc, cbk, local); + ret = nfs_inode_rename (nfsx, xl, nfu, oldloc, newloc, cbk, local); return ret; } int -nfs_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_link_cbk_t cbk, void *local) +nfs_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_link_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!oldloc) || (!newloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc) || (!nfu)) return ret; - ret = nfs_inode_link (xl, nfu, oldloc, newloc, cbk, local); + ret = nfs_inode_link (nfsx, xl, nfu, oldloc, newloc, cbk, local); return ret; } int -nfs_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local) { int ret = -EFAULT; @@ -219,849 +217,103 @@ nfs_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, if ((!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_inode_unlink (xl, nfu, pathloc, cbk, local); + ret = nfs_inode_unlink (nfsx, xl, nfu, pathloc, cbk, local); return ret; } int -nfs_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *path, fop_rmdir_cbk_t cbk, - void *local) +nfs_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *path, + fop_rmdir_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!path) || (!nfu)) + if ((!nfsx) || (!xl) || (!path) || (!nfu)) return ret; - ret = nfs_inode_rmdir (xl, nfu, path, cbk, local); + ret = nfs_inode_rmdir (nfsx, xl, nfu, path, cbk, local); return ret; } int -nfs_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - dev_t dev, fop_mknod_cbk_t cbk, void *local) +nfs_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_inode_mknod (xl, nfu, pathloc, mode, dev, cbk, local); + ret = nfs_inode_mknod (nfsx, xl, nfu, pathloc, mode, dev, cbk, local); return ret; } int -nfs_readlink (xlator_t *xl, nfs_user_t *nfu, loc_t *linkloc, +nfs_readlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *linkloc, fop_readlink_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!linkloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!linkloc) || (!nfu)) return ret; - ret = nfs_fop_readlink (xl, nfu, linkloc, NFS_PATH_MAX, cbk, local); + ret = nfs_fop_readlink (nfsx, xl, nfu, linkloc, NFS_PATH_MAX, cbk, + local); return ret; } - int -nfs_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *linkloc, - fop_symlink_cbk_t cbk, void *local) +nfs_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, + loc_t *linkloc, fop_symlink_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!linkloc) || (!target) || (!nfu)) + if ((!nfsx) || (!xl) || (!linkloc) || (!target) || (!nfu)) return ret; - ret = nfs_inode_symlink (xl, nfu, target, linkloc, cbk, local); + ret = nfs_inode_symlink (nfsx, xl, nfu, target, linkloc, cbk, local); return ret; } int -nfs_setattr (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_setattr (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, struct iatt *buf, int32_t valid, fop_setattr_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_fop_setattr (xl, nfu, pathloc, buf, valid, cbk, local); + ret = nfs_fop_setattr (nfsx, xl, nfu, pathloc, buf, valid, cbk, local); return ret; } int -nfs_statfs (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_statfs (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_statfs_cbk_t cbk, void *local) { int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - ret = nfs_fop_statfs (xl, nfu, pathloc, cbk, local); + ret = nfs_fop_statfs (nfsx, xl, nfu, pathloc, cbk, local); return ret; } - -int -nfs_open_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, fd_t *fd) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync open failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync open done"); - - sf->replystub = fop_open_cbk_stub (frame, NULL, op_ret, op_errno, fd); - - nfs_syncfop_notify (sf); - return 0; -} - - -call_stub_t * -nfs_open_sync (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int32_t flags) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!pathloc) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_open (xl, nfu, pathloc, flags, nfs_open_sync_cbk, sf); - if (ret < 0) - goto err; - - reply = nfs_syncfop_wait (sf); - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - - - int -nfs_fdctx_alloc (fd_t *fd, xlator_t *xl) -{ - nfs_fdctx_t *fdctx = NULL; - int ret = -EFAULT; - - if ((!fd) || (!xl)) - return ret; - - fdctx = CALLOC (1, sizeof (*fdctx)); - if (!fdctx) { - gf_log (GF_NFS, GF_LOG_ERROR, "Memory allocation failure"); - ret = -ENOMEM; - goto err; - } - - pthread_mutex_init (&fdctx->lock, NULL); - - ret = fd_ctx_set (fd, xl, (uint64_t)fdctx); - if (ret == -1) { - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to set fd context"); - ret = -EFAULT; - goto free_ctx; - } - - ret = 0; - -free_ctx: - if (ret < 0) - FREE (fdctx); - -err: - return ret; -} - - -void -nfs_fdctx_del (fd_t *fd, xlator_t *xl) -{ - nfs_fdctx_t *fdctx = NULL; - uint64_t ctxaddr = 0; - int ret = -1; - - if ((!fd) || (!xl)) - return; - - ret = fd_ctx_del (fd, xl, &ctxaddr); - if (ret == -1) - goto err; - - fdctx = (nfs_fdctx_t *)ctxaddr; - FREE (fdctx); - -err: - return; -} - - -nfs_fdctx_t * -nfs_fdctx_get (fd_t *fd, xlator_t *xl) -{ - nfs_fdctx_t *fdctx = NULL; - int ret = -1; - uint64_t ctxptr = 0; - - if ((!fd) || (!xl)) - return NULL; - - ret = fd_ctx_get (fd, xl, &ctxptr); - if (ret == -1) { - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to get fd context"); - goto err; - } - - fdctx = (nfs_fdctx_t *)ctxptr; -err: - return fdctx; -} - - -int -nfs_dir_fdctx_init (fd_t *dirfd, xlator_t *xl, xlator_t *fopxl, size_t bufsize) -{ - int ret = -EFAULT; - nfs_fdctx_t *fdctx = NULL; - - if ((!dirfd) || (!xl)) - return ret; - - ret = nfs_fdctx_alloc (dirfd, xl); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to alloc dir fd context"); - goto err; - } - - fdctx = nfs_fdctx_get (dirfd, xl); - if (!fdctx) { - ret = -EFAULT; - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to get dir fd context"); - goto err; - } - - fdctx->dcache = CALLOC (1, sizeof (struct nfs_direntcache)); - if (!fdctx->dcache) { - ret = -ENOMEM; - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to allocate dirent" - " cache"); - goto free_ctx; - } - - INIT_LIST_HEAD (&fdctx->dcache->entries.list); - fdctx->dirent_bufsize = bufsize; - fdctx->dirvol = fopxl; - - ret = 0; - -free_ctx: - if (ret < 0) - nfs_fdctx_del (dirfd, xl); -err: - return ret; -} - - - - -/* Dirent caching code copied from libglusterfsclient. - * Please duplicate enhancements and bug fixes there too. - */ -void -nfs_dcache_invalidate (xlator_t *nfsx, fd_t *fd) -{ - nfs_fdctx_t *fd_ctx = NULL; - - if (!fd) - return; - - fd_ctx = nfs_fdctx_get (fd, nfsx); - if (!fd_ctx) { - gf_log (GF_NFS, GF_LOG_ERROR, "No fd context present"); - return; - } - - if (!fd_ctx->dcache) { - gf_log (GF_NFS, GF_LOG_TRACE, "No dirent cache present"); - return; - } - - if (!list_empty (&fd_ctx->dcache->entries.list)) { - gf_log (GF_NFS, GF_LOG_TRACE, "Freeing dirents"); - gf_dirent_free (&fd_ctx->dcache->entries); - } - - INIT_LIST_HEAD (&fd_ctx->dcache->entries.list); - - fd_ctx->dcache->next = NULL; - fd_ctx->dcache->prev_off = 0; - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache invalidated"); - - return; -} - -/* Dirent caching code copied from libglusterfsclient. - * Please duplicate enhancements and bug fixes there too. - */ -/* The first entry in the entries is always a placeholder - * or the list head. The real entries begin from entries->next. - */ -int -nfs_dcache_update (xlator_t *nfsx, fd_t *fd, gf_dirent_t *entries) -{ - nfs_fdctx_t *fdctx = NULL; - int ret = -EFAULT; - - if ((!fd) || (!entries)) - return ret; - - fdctx = nfs_fdctx_get (fd, nfsx); - if (!fdctx) { - gf_log (GF_NFS, GF_LOG_ERROR, "No fd context present"); - return ret; - } - - /* dcache is not enabled. */ - if (!fdctx->dcache) { - gf_log (GF_NFS, GF_LOG_TRACE, "No dirent cache present"); - return ret; - } - - /* If we're updating, we must begin with invalidating any previous - * entries. - */ - nfs_dcache_invalidate (nfsx, fd); - - fdctx->dcache->next = entries->next; - /* We still need to store a pointer to the head - * so we start free'ing from the head when invalidation - * is required. - * - * Need to delink the entries from the list - * given to us by an underlying translators. Most translators will - * free this list after this call so we must preserve the dirents in - * order to cache them. - */ - list_splice_init (&entries->list, &fdctx->dcache->entries.list); - ret = 0; - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache updated"); - - return ret; -} - -/* Dirent caching code copied from libglusterfsclient. - * Please duplicate enhancements and bug fixes there too. - */ -int -nfs_dcache_readdir (xlator_t *nfsx, fd_t *fd, gf_dirent_t *dirp, off_t *offset) -{ - nfs_fdctx_t *fdctx = NULL; - int cachevalid = 0; - - if ((!fd) || (!dirp) || (!offset)) - return 0; - - fdctx = nfs_fdctx_get (fd, nfsx); - if (!fdctx) { - gf_log (GF_NFS, GF_LOG_ERROR, "No fd context present"); - goto out; - } - - if (!fdctx->dcache) { - gf_log (GF_NFS, GF_LOG_TRACE, "No dirent cache present"); - goto out; - } - - /* We've either run out of entries in the cache - * or the cache is empty. - */ - if (!fdctx->dcache->next) { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache is empty"); - goto out; - } - - /* The dirent list is created as a circular linked list - * so this check is needed to ensure, we dont start - * reading old entries again. - * If we're reached this situation, the cache is exhausted - * and we'll need to pre-fetch more entries to continue serving. - */ - if (fdctx->dcache->next == &fdctx->dcache->entries) { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache was exhausted"); - goto out; - } - - /* During sequential reading we generally expect that the offset - * requested is the same as the offset we served in the previous call - * to readdir. But, seekdir, rewinddir and libgf_dcache_invalidate - * require special handling because seekdir/rewinddir change the offset - * in the fd_ctx and libgf_dcache_invalidate changes the prev_off. - */ - if (*offset != fdctx->dcache->prev_off) { - /* For all cases of the if branch above, we know that the - * cache is now invalid except for the case below. It handles - * the case where the two offset values above are different - * but different because the previous readdir block was - * exhausted, resulting in a prev_off being set to 0 in - * libgf_dcache_invalidate, while the requested offset is non - * zero because that is what we returned for the last dirent - * of the previous readdir block. - */ - if ((*offset != 0) && (fdctx->dcache->prev_off == 0)) { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache was" - " exhausted"); - cachevalid = 1; - } else - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache is" - " invalid"); - } else { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent cache is valid"); - cachevalid = 1; - } - - if (!cachevalid) - goto out; - - dirp->d_ino = fdctx->dcache->next->d_ino; - strncpy (dirp->d_name, fdctx->dcache->next->d_name, - fdctx->dcache->next->d_len + 1); - dirp->d_len = fdctx->dcache->next->d_len; - dirp->d_stat = fdctx->dcache->next->d_stat; -// nfs_map_dev (fdctx->dirvol, &dirp->d_stat.st_dev); - - *offset = fdctx->dcache->next->d_off; - dirp->d_off = *offset; - fdctx->dcache->prev_off = fdctx->dcache->next->d_off; - fdctx->dcache->next = fdctx->dcache->next->next; - -out: - return cachevalid; -} - -int -__nfs_readdir_sync (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, - fd_t *dirfd, off_t *offset, gf_dirent_t *entry, - size_t bufsize) -{ - int ret = -1; - call_stub_t *reply = NULL; - - if ((!fopxl) || (!dirfd) || (!entry)) - return ret; - - ret = nfs_dcache_readdir (nfsx, dirfd, entry, offset); - if (ret) { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent served from cache"); - ret = 0; - goto err; - } - - reply = nfs_fop_readdirp_sync (fopxl, nfu, dirfd, *offset,bufsize); - if (!reply) { - ret = -1; - gf_log (GF_NFS, GF_LOG_ERROR, "Sync readdir failed"); - goto err; - } - - if (reply->args.readdir_cbk.op_ret <= 0) { - ret = -1; - goto err; - } - - ret = nfs_dcache_update (nfsx, dirfd, &reply->args.readdir_cbk.entries); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Failed to update dirent cache"); - goto err; - } - - ret = nfs_dcache_readdir (nfsx, dirfd, entry, offset); - if (ret) { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent served from cache," - " after updating from server"); - ret = 0; - } else { - gf_log (GF_NFS, GF_LOG_TRACE, "Dirent still not served from" - " cache, even after updating from server"); - ret = -1; - } - -err: - if (reply) - call_stub_destroy (reply); - return ret; -} - - - -int -nfs_readdir_sync (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, - fd_t *dirfd, gf_dirent_t *entry) -{ - int ret = -EFAULT; - nfs_fdctx_t *fdctx = NULL; - - if ((!nfsx) || (!fopxl) || (!dirfd) || (!entry) || (!nfu)) - return ret; - - fdctx = nfs_fdctx_get (dirfd, nfsx); - if (!fdctx) { - gf_log (GF_NFS, GF_LOG_ERROR, "No fd context present"); - goto err; - } - - pthread_mutex_lock (&fdctx->lock); - { - ret = __nfs_readdir_sync (nfsx, fopxl, nfu, dirfd, - &fdctx->offset, entry, - fdctx->dirent_bufsize); - } - pthread_mutex_unlock (&fdctx->lock); - - if (ret < 0) - gf_log (GF_NFS, GF_LOG_ERROR, "Sync readdir failed: %s", - strerror (-ret)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Entry read: %s: len %d, ino %" - PRIu64", igen: %"PRIu64, entry->d_name, entry->d_len, - entry->d_ino, entry->d_stat.ia_dev); - -err: - return ret; -} - - -int32_t -nfs_flush_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync open failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync open done"); - - sf->replystub = fop_flush_cbk_stub (frame, NULL, op_ret, op_errno); - - nfs_syncfop_notify (sf); - return 0; -} - - -call_stub_t * -nfs_flush_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!fd) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_flush (xl, nfu, fd, nfs_flush_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Sync flush failed: %s", - strerror (-ret)); - goto err; - } - - reply = nfs_syncfop_wait (sf); - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - - -int32_t -nfs_writev_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prebuf, - struct iatt *postbuf) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync write failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync write done"); - - sf->replystub = fop_writev_cbk_stub (frame, NULL, op_ret, op_errno, - prebuf, postbuf); - - nfs_syncfop_notify (sf); - return 0; -} - - - -call_stub_t * -nfs_write_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, - struct iovec *vec, int count, off_t offset) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!fd) || (!vec) || (!nfu) || (!srciob)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_write (xl, nfu, fd, srciob, vec, count, offset, - nfs_writev_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Sync flush failed: %s", - strerror (-ret)); - goto err; - } - - reply = nfs_syncfop_wait (sf); - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - - - -int32_t -nfs_fsync_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prebuf, - struct iatt *postbuf) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync fsync failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync fsync done"); - - sf->replystub = fop_fsync_cbk_stub (frame, NULL, op_ret, op_errno, - prebuf, postbuf); - - nfs_syncfop_notify (sf); - return 0; -} - - - -call_stub_t * -nfs_fsync_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!fd) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_fsync (xl, nfu, fd, datasync, nfs_fsync_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Sync fsync failed: %s", - strerror (-ret)); - goto err; - } - - reply = nfs_syncfop_wait (sf); - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - -int32_t -nfs_read_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iovec *vector, - int32_t count, struct iatt *buf, struct iobref *iobref) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync read failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync read done"); - - sf->replystub = fop_readv_cbk_stub (frame, NULL, op_ret, op_errno, - vector, count, buf, iobref); - - nfs_syncfop_notify (sf); - return 0; -} - - - -call_stub_t * -nfs_read_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, - off_t offset) -{ - nfs_syncfop_t *sf = NULL; - call_stub_t *reply = NULL; - int ret = -1; - - if ((!xl) || (!fd) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - goto err; - } - - ret = nfs_read (xl, nfu, fd, size, offset, nfs_read_sync_cbk, sf); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "Sync read failed: %s", - strerror (-ret)); - goto err; - } - - reply = nfs_syncfop_wait (sf); - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - - -int32_t -nfs_opendir_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, fd_t *fd) -{ - nfs_syncfop_t *sf = frame->local; - - if (!sf) - return -1; - - if (op_ret == -1) - gf_log (GF_NFS, GF_LOG_TRACE, "Sync opendir failed: %s", - strerror (op_errno)); - else - gf_log (GF_NFS, GF_LOG_TRACE, "Sync opendir done"); - - sf->replystub = fop_opendir_cbk_stub (frame, NULL, op_ret, op_errno,fd); - - nfs_syncfop_notify (sf); - return 0; -} - - -call_stub_t * -nfs_opendir_sync (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, - loc_t *pathloc, size_t bufsize) -{ - int ret = -EFAULT; - call_stub_t *reply = NULL; - nfs_syncfop_t *sf = NULL; - fd_t *dirfd = NULL; - - if ((!nfsx) || (!fopxl) || (!pathloc) || (!nfu)) - return NULL; - - sf = nfs_syncfop_init (); - if (!sf) { - gf_log (GF_NFS, GF_LOG_ERROR, "synclocal init failed"); - ret = -ENOMEM; - goto err; - } - - ret = nfs_inode_opendir (fopxl, nfu, pathloc, nfs_opendir_sync_cbk, sf); - if (ret < 0) - goto err; - - reply = nfs_syncfop_wait (sf); - if (!reply) { - ret = -EFAULT; - goto err; - } - - dirfd = reply->args.opendir_cbk.fd; - ret = nfs_dir_fdctx_init (dirfd, nfsx, fopxl, bufsize); - if (ret < 0) { - gf_log (GF_NFS, GF_LOG_ERROR, "fd context allocation failed"); - goto err; - } - - ret = 0; - -err: - if (ret < 0) - FREE (sf); - - return reply; -} - - -int -nfs_opendir (xlator_t *fopxl, nfs_user_t *nfu, loc_t *pathloc, +nfs_opendir (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, loc_t *pathloc, fop_opendir_cbk_t cbk, void *local) { - if ((!fopxl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!fopxl) || (!pathloc) || (!nfu)) return -EFAULT; - return nfs_inode_opendir (fopxl, nfu, pathloc, cbk, local); + return nfs_inode_opendir (nfsx, fopxl, nfu, pathloc, cbk, local); } diff --git a/xlators/nfs/server/src/nfs-generics.h b/xlators/nfs/server/src/nfs-generics.h index 980e73020d4..55740f7b2f4 100644 --- a/xlators/nfs/server/src/nfs-generics.h +++ b/xlators/nfs/server/src/nfs-generics.h @@ -54,91 +54,91 @@ typedef struct nfs_fop_fdcontext { } nfs_fdctx_t; extern int -nfs_fstat (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_stat_cbk_t cbk, - void *local); +nfs_fstat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + fop_stat_cbk_t cbk, void *local); extern int -nfs_readdirp (xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, size_t bufsize, - off_t offset, fop_readdir_cbk_t cbk, void *local); +nfs_readdirp (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *dirfd, + size_t bufsize, off_t offset, fop_readdir_cbk_t cbk, void *local); extern int -nfs_lookup (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_lookup (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_lookup_cbk_t cbk, void *local); extern int -nfs_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - mode_t mode, fop_create_cbk_t cbk, void *local); +nfs_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int flags, mode_t mode, fop_create_cbk_t cbk, void *local); extern int -nfs_flush (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, fop_flush_cbk_t cbk, - void *local); +nfs_flush (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + fop_flush_cbk_t cbk, void *local); extern int -nfs_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - fop_mkdir_cbk_t cbk, void *local); +nfs_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, fop_mkdir_cbk_t cbk, void *local); extern int -nfs_truncate (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, off_t offset, - fop_truncate_cbk_t cbk, void *local); +nfs_truncate (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + off_t offset, fop_truncate_cbk_t cbk, void *local); extern int -nfs_read (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, +nfs_read (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, off_t offset, fop_readv_cbk_t cbk, void *local); extern int -nfs_fsync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync, - fop_fsync_cbk_t cbk, void *local); +nfs_fsync (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + int32_t datasync, fop_fsync_cbk_t cbk, void *local); extern int -nfs_write (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, - struct iovec *vector, int32_t count, off_t offset, - fop_writev_cbk_t cbk, void *local); +nfs_write (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd, + struct iobuf *srciob, struct iovec *vector, int32_t count, + off_t offset, fop_writev_cbk_t cbk, void *local); extern int -nfs_open (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int32_t flags, - fop_open_cbk_t cbk, void *local); +nfs_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int32_t flags, fop_open_cbk_t cbk, void *local); extern int -nfs_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_rename_cbk_t cbk, void *local); +nfs_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_rename_cbk_t cbk, void *local); extern int -nfs_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, - fop_link_cbk_t cbk, void *local); +nfs_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, + loc_t *newloc, fop_link_cbk_t cbk, void *local); extern int -nfs_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local); extern int -nfs_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_rmdir_cbk_t cbk, void *local); extern int -nfs_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, - dev_t dev, fop_mknod_cbk_t cbk, void *local); +nfs_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local); extern int -nfs_readlink (xlator_t *xl, nfs_user_t *nfu, loc_t *linkloc, +nfs_readlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *linkloc, fop_readlink_cbk_t cbk, void *local); extern int -nfs_setattr (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_setattr (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, struct iatt *buf, int32_t valid, fop_setattr_cbk_t cbk, void *local); extern int -nfs_statfs (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_statfs (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_statfs_cbk_t cbk, void *local); extern int -nfs_stat (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_stat_cbk_t cbk - , void *local); +nfs_stat (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + fop_stat_cbk_t cbk, void *local); extern int -nfs_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *linkloc, - fop_symlink_cbk_t cbk, void *local); +nfs_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, + loc_t *linkloc, fop_symlink_cbk_t cbk, void *local); /* Synchronous equivalents */ @@ -146,29 +146,15 @@ extern call_stub_t * nfs_open_sync (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int32_t flags); -extern int -nfs_readdir_sync (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, - fd_t *dirfd, gf_dirent_t *entry); - -extern call_stub_t * -nfs_flush_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd); - extern call_stub_t * nfs_write_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, struct iobuf *srciob, struct iovec *vec, int count, off_t offset); extern call_stub_t * -nfs_fsync_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, int32_t datasync); - -extern call_stub_t * nfs_read_sync (xlator_t *xl, nfs_user_t *nfu, fd_t *fd, size_t size, off_t offset); -extern call_stub_t * -nfs_opendir_sync (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, - loc_t *dirloc, size_t bufsize); - extern int -nfs_opendir (xlator_t *fopxl, nfs_user_t *nfu, loc_t *pathloc, +nfs_opendir (xlator_t *nfsx, xlator_t *fopxl, nfs_user_t *nfu, loc_t *pathloc, fop_opendir_cbk_t cbk, void *local); #endif diff --git a/xlators/nfs/server/src/nfs-inodes.c b/xlators/nfs/server/src/nfs-inodes.c index 69bad072484..4b8bad71789 100644 --- a/xlators/nfs/server/src/nfs-inodes.c +++ b/xlators/nfs/server/src/nfs-inodes.c @@ -78,7 +78,7 @@ do_not_link: */ fd_unref (fd); - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd, inode, buf, preparent, postparent); @@ -87,17 +87,18 @@ do_not_link: int -nfs_inode_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - int mode, fop_create_cbk_t cbk, void *local) +nfs_inode_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, + loc_t *pathloc, int flags, int mode, fop_create_cbk_t cbk, + void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; fd_t *newfd = NULL; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); newfd = fd_create (pathloc->inode, 0); if (!newfd) { @@ -111,7 +112,7 @@ nfs_inode_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, */ nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_create (xl, nfu, pathloc, flags, mode, newfd, + ret = nfs_fop_create (nfsx, xl, nfu, pathloc, flags, mode, newfd, nfs_inode_create_cbk, nfl); wipe_nfl: if (ret < 0) @@ -137,7 +138,7 @@ nfs_inode_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_link (inode, nfl->parent, nfl->path, buf); do_not_link: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, preparent, postparent); @@ -145,23 +146,24 @@ do_not_link: return 0; } + int -nfs_inode_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int mode, - fop_mkdir_cbk_t cbk, void *local) +nfs_inode_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int mode, fop_mkdir_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_mkdir (xl, nfu, pathloc, mode, nfs_inode_mkdir_cbk, + ret = nfs_fop_mkdir (nfsx, xl, nfu, pathloc, mode, nfs_inode_mkdir_cbk, nfl); if (ret < 0) - nfs_fop_local_wipe (xl, nfl); + nfs_fop_local_wipe (nfsx, nfl); err: return ret; @@ -184,7 +186,7 @@ nfs_inode_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, /* else fd_bind (fd); */ - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd); return 0; @@ -192,14 +194,14 @@ nfs_inode_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_inode_open (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, int32_t flags, - int32_t wbflags, fop_open_cbk_t cbk, void *local) +nfs_inode_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + int32_t flags, int32_t wbflags, fop_open_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; fd_t *newfd = NULL; int ret = -EFAULT; - if ((!xl) || (!loc) || (!nfu)) + if ((!nfsx) || (!xl) || (!loc) || (!nfu)) return ret; newfd = fd_create (loc->inode, 0); @@ -209,8 +211,8 @@ nfs_inode_open (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, int32_t flags, goto err; } - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, fd_err); - ret = nfs_fop_open (xl, nfu, loc, flags, newfd, wbflags, + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, fd_err); + ret = nfs_fop_open (nfsx, xl, nfu, loc, flags, newfd, wbflags, nfs_inode_open_cbk, nfl); if (ret < 0) @@ -245,7 +247,7 @@ nfs_inode_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, nfl->newpath, nfl->inode, buf); do_not_link: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, buf, preoldparent, postoldparent, prenewparent, @@ -255,19 +257,19 @@ do_not_link: int -nfs_inode_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_inode_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_rename_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!oldloc) || (!newloc)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, oldloc->inode, oldloc->parent, newloc->parent, oldloc->name, newloc->name); - ret = nfs_fop_rename (xl, nfu, oldloc, newloc, nfs_inode_rename_cbk + ret = nfs_fop_rename (nfsx,xl, nfu, oldloc, newloc, nfs_inode_rename_cbk , nfl); err: @@ -294,7 +296,7 @@ nfs_inode_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_link (inode, nfl->newparent, nfl->path, buf); do_not_link: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, preparent, postparent); @@ -303,18 +305,18 @@ do_not_link: int -nfs_inode_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_inode_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_link_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!oldloc) || (!newloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!oldloc) || (!newloc) || (!nfu)) return -EFAULT; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, NULL, NULL, newloc->parent, newloc->name, NULL); - ret = nfs_fop_link (xl, nfu, oldloc, newloc, nfs_inode_link_cbk, + ret = nfs_fop_link (nfsx, xl, nfu, oldloc, newloc, nfs_inode_link_cbk, nfl); err: @@ -341,7 +343,7 @@ nfs_inode_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_unlink (nfl->inode, nfl->parent, nfl->path); do_not_unlink: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, preparent, postparent); @@ -350,19 +352,19 @@ do_not_unlink: int -nfs_inode_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return -EFAULT; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_unlink (xl, nfu, pathloc, nfs_inode_unlink_cbk, nfl); + ret = nfs_fop_unlink (nfsx, xl, nfu, pathloc, nfs_inode_unlink_cbk,nfl); err: if (ret < 0) @@ -388,7 +390,7 @@ nfs_inode_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_unlink (nfl->inode, nfl->parent, nfl->path); do_not_unlink: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, preparent, postparent); @@ -398,20 +400,20 @@ do_not_unlink: int -nfs_inode_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_rmdir_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_rmdir (xl, nfu, pathloc, nfs_inode_rmdir_cbk, nfl); + ret = nfs_fop_rmdir (nfsx, xl, nfu, pathloc, nfs_inode_rmdir_cbk, nfl); err: if (ret < 0) @@ -437,7 +439,7 @@ nfs_inode_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_link (inode, nfl->parent, nfl->path, buf); do_not_link: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, preparent, postparent); @@ -446,21 +448,21 @@ do_not_link: int -nfs_inode_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!pathloc) || (!nfu)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_mknod (xl, nfu, pathloc, mode, dev, nfs_inode_mknod_cbk, - nfl); + ret = nfs_fop_mknod (nfsx, xl, nfu, pathloc, mode, dev, + nfs_inode_mknod_cbk, nfl); err: if (ret < 0) @@ -486,7 +488,7 @@ nfs_inode_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, inode_link (inode, nfl->parent, nfl->path, buf); do_not_link: - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, inode, buf, preparent, postparent); @@ -496,20 +498,20 @@ do_not_link: int -nfs_inode_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, +nfs_inode_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *pathloc, fop_symlink_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; int ret = -EFAULT; - if ((!xl) || (!target) || (!pathloc) || (!nfu)) + if ((!nfsx) || (!xl) || (!target) || (!pathloc) || (!nfu)) return ret; - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); nfl_inodes_init (nfl, pathloc->inode, pathloc->parent, NULL, pathloc->name, NULL); - ret = nfs_fop_symlink (xl, nfu, target, pathloc, nfs_inode_symlink_cbk, - nfl); + ret = nfs_fop_symlink (nfsx, xl, nfu, target, pathloc, + nfs_inode_symlink_cbk, nfl); err: if (ret < 0) @@ -531,7 +533,7 @@ nfs_inode_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, else fd_bind (fd); - nfl_to_prog_data (this, nfl, progcbk, frame); + nfl_to_prog_data (nfl, progcbk, frame); if (progcbk) progcbk (frame, cookie, this, op_ret, op_errno, fd); @@ -540,14 +542,14 @@ nfs_inode_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int -nfs_inode_opendir (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_inode_opendir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_opendir_cbk_t cbk, void *local) { struct nfs_fop_local *nfl = NULL; fd_t *newfd = NULL; int ret = -EFAULT; - if ((!xl) || (!loc) || (!nfu)) + if ((!nfsx) || (!xl) || (!loc) || (!nfu)) return ret; newfd = fd_create (loc->inode, 0); @@ -557,8 +559,9 @@ nfs_inode_opendir (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, goto err; } - nfs_fop_handle_local_init (NULL, xl, nfl, cbk, local, ret, err); - ret = nfs_fop_opendir (xl, nfu, loc, newfd, nfs_inode_opendir_cbk, nfl); + nfs_fop_handle_local_init (NULL, nfsx, nfl, cbk, local, ret, err); + ret = nfs_fop_opendir (nfsx, xl, nfu, loc, newfd, + nfs_inode_opendir_cbk, nfl); err: if (ret < 0) { diff --git a/xlators/nfs/server/src/nfs-inodes.h b/xlators/nfs/server/src/nfs-inodes.h index 04d3eba6662..51a23faef27 100644 --- a/xlators/nfs/server/src/nfs-inodes.h +++ b/xlators/nfs/server/src/nfs-inodes.h @@ -38,43 +38,45 @@ nfs_link_inode (inode_t *newi, inode_t *parent, char *name, struct iatt *newstat); extern int -nfs_inode_create (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int flags, - int mode, fop_create_cbk_t cbk, void *local); +nfs_inode_create (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, + loc_t *pathloc, int flags, int mode, fop_create_cbk_t cbk, + void *local); extern int -nfs_inode_mkdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, int mode, - fop_mkdir_cbk_t cbk, void *local); +nfs_inode_mkdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, + int mode, fop_mkdir_cbk_t cbk, void *local); extern int -nfs_inode_open (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, int32_t flags, - int32_t wbflags, fop_open_cbk_t cbk, void *local); +nfs_inode_open (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, + int32_t flags, int32_t wbflags, fop_open_cbk_t cbk, + void *local); extern int -nfs_inode_rename (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_inode_rename (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_rename_cbk_t cbk, void *local); extern int -nfs_inode_link (xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, +nfs_inode_link (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *oldloc, loc_t *newloc, fop_link_cbk_t cbk, void *local); extern int -nfs_inode_unlink (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_unlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_unlink_cbk_t cbk, void *local); extern int -nfs_inode_rmdir (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_rmdir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, fop_rmdir_cbk_t cbk, void *local); extern int -nfs_inode_symlink (xlator_t *xl, nfs_user_t *nfu, char *target, +nfs_inode_symlink (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, char *target, loc_t *pathloc, fop_symlink_cbk_t cbk, void *local); extern int -nfs_inode_opendir (xlator_t *xl, nfs_user_t *nfu, loc_t *loc, +nfs_inode_opendir (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, fop_opendir_cbk_t cbk, void *local); extern int -nfs_inode_mknod (xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, +nfs_inode_mknod (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *pathloc, mode_t mode, dev_t dev, fop_mknod_cbk_t cbk, void *local); extern int diff --git a/xlators/nfs/server/src/nfs.c b/xlators/nfs/server/src/nfs.c index 488ece419cb..14d82fc286c 100644 --- a/xlators/nfs/server/src/nfs.c +++ b/xlators/nfs/server/src/nfs.c @@ -225,41 +225,36 @@ nfs_start_subvol_lookup_cbk (call_frame_t *frame, void *cookie, inode_t *inode, struct iatt *buf, dict_t *xattr, struct iatt *postparent) { - struct nfs_state *nfs = NULL; - xlator_t *startedxl = NULL; - if (op_ret == -1) { gf_log (GF_NFS, GF_LOG_CRITICAL, "Failed to lookup root: %s", strerror (op_errno)); goto err; } - nfs = frame->local; - startedxl = cookie; - gf_log (GF_NFS, GF_LOG_TRACE, "Started %s", startedxl->name); + gf_log (GF_NFS, GF_LOG_TRACE, "Started %s", this->name); err: return 0; } int -nfs_startup_subvolume (struct nfs_state *nfs, xlator_t *xl) +nfs_startup_subvolume (xlator_t *nfsx, xlator_t *xl) { int ret = -1; loc_t rootloc = {0, }; nfs_user_t nfu = {0, }; - if ((!nfs) || (!xl)) + if ((!nfsx) || (!xl)) return -1; - if (nfs_subvolume_started (nfs, xl)) { + if (nfs_subvolume_started (nfsx->private, xl)) { gf_log (GF_NFS,GF_LOG_TRACE, "Subvolume already started: %s", xl->name); ret = 0; goto err; } - nfs_subvolume_set_started (nfs, xl); + nfs_subvolume_set_started (nfsx->private, xl); ret = nfs_inode_loc_fill (xl->itable->root, &rootloc); if (ret == -1) { gf_log (GF_NFS, GF_LOG_CRITICAL, "Failed to init root loc"); @@ -267,8 +262,9 @@ nfs_startup_subvolume (struct nfs_state *nfs, xlator_t *xl) } nfs_user_root_create (&nfu); - ret = nfs_fop_lookup (xl, &nfu, &rootloc, nfs_start_subvol_lookup_cbk, - (void *)nfs); + ret = nfs_fop_lookup (nfsx, xl, &nfu, &rootloc, + nfs_start_subvol_lookup_cbk, + (void *)nfsx->private); if (ret < 0) { gf_log (GF_NFS, GF_LOG_CRITICAL, "Failed to lookup root: %s", strerror (-ret)); @@ -282,18 +278,21 @@ err: } int -nfs_startup_subvolumes (struct nfs_state *nfs) +nfs_startup_subvolumes (xlator_t *nfsx) { - int ret = -1; - xlator_list_t *cl = NULL; - if (!nfs) + int ret = -1; + xlator_list_t *cl = NULL; + struct nfs_state *nfs = NULL; + + if (!nfsx) return -1; + nfs = nfsx->private; cl = nfs->subvols; while (cl) { gf_log (GF_NFS, GF_LOG_DEBUG, "Starting subvolume: %s", cl->xlator->name); - ret = nfs_startup_subvolume (nfs, cl->xlator); + ret = nfs_startup_subvolume (nfsx, cl->xlator); if (ret == -1) { gf_log (GF_NFS, GF_LOG_CRITICAL, "Failed to start-up " "xlator: %s", cl->xlator->name); @@ -519,7 +518,7 @@ notify (xlator_t *this, int32_t event, void *data, ...) { case GF_EVENT_CHILD_UP: { - nfs_startup_subvolume (nfs, subvol); + nfs_startup_subvolume (this, subvol); if ((nfs->upsubvols == nfs->allsubvols) && (!nfs->subvols_started)) { nfs->subvols_started = 1; @@ -540,6 +539,7 @@ notify (xlator_t *this, int32_t event, void *data, ...) break; } } + return 0; } diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c index 5b2fdaca4ca..04454ee192c 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -1664,8 +1664,8 @@ __nfs3_dir_open_and_resume (nfs3_call_state_t *cs) return ret; nfs_user_root_create (&nfu); - ret = nfs_opendir (cs->vol, &nfu, &cs->resolvedloc, nfs3_dir_open_cbk, - cs); + ret = nfs_opendir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_dir_open_cbk, cs); return ret; } @@ -1963,7 +1963,7 @@ __nfs3_file_open_and_resume (nfs3_call_state_t *cs) nfs_user_root_create (&nfu); gf_log (GF_NFS3, GF_LOG_TRACE, "Opening uncached fd"); - ret = nfs_open (cs->vol, &nfu, &cs->resolvedloc, O_RDWR, + ret = nfs_open (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, O_RDWR, nfs3_file_open_cbk, cs); out: return ret; @@ -2383,9 +2383,9 @@ nfs3_fh_resolve_found_entry (nfs3_call_state_t *cs, gf_dirent_t *candidate) gf_log (GF_NFS3, GF_LOG_TRACE, "Entry not in itable, needs" " lookup"); nfs_user_root_create (&nfu); - ret = nfs_fop_lookup (cs->vol, &nfu, &cs->resolvedloc, - nfs3_fh_resolve_entry_lookup_cbk, - cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fh_resolve_entry_lookup_cbk, + cs); } else { gf_log (GF_NFS3, GF_LOG_TRACE, "Entry got from itable"); nfs3_call_resume (cs); @@ -2445,9 +2445,9 @@ nfs3_fh_resolve_found_parent (nfs3_call_state_t *cs, gf_dirent_t *candidate) NFS_RESOLVE_CREATE); if (ret == -ENOENT) { nfs_user_root_create (&nfu); - ret = nfs_fop_lookup (cs->vol, &nfu, &cs->resolvedloc, - nfs3_fh_resolve_parent_lookup_cbk, - cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fh_resolve_parent_lookup_cbk, + cs); } else nfs3_fh_resolve_entry_hard (cs); @@ -2505,7 +2505,7 @@ nfs3_fh_resolve_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, fd_unref (cs->resolve_dir_fd); cs->resolve_dir_fd = fd_ref (fd); - ret = nfs_readdirp (cs->vol, &nfu, fd, GF_NFS3_DTPREF, 0, + ret = nfs_readdirp (cs->nfsx, cs->vol, &nfu, fd, GF_NFS3_DTPREF, 0, nfs3_fh_resolve_readdir_cbk, cs); err: @@ -2536,7 +2536,7 @@ nfs3_fh_resolve_dir_lookup_cbk (call_frame_t *frame, void *cookie, nfs_user_root_create (&nfu); inode_link (inode, cs->resolvedloc.parent, cs->resolvedloc.name, buf); - nfs_opendir (cs->vol, &nfu, &cs->resolvedloc, + nfs_opendir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3_fh_resolve_opendir_cbk, cs); err: @@ -2575,13 +2575,13 @@ nfs3_fh_resolve_dir_hard (nfs3_call_state_t *cs, uint64_t ino, uint64_t gen, if (ret == 0) { gf_log (GF_NFS3, GF_LOG_TRACE, "Dir will be opened: %s", cs->resolvedloc.path); - ret = nfs_opendir (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_opendir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3_fh_resolve_opendir_cbk, cs); } else if (ret == -ENOENT) { gf_log (GF_NFS3, GF_LOG_TRACE, "Dir needs lookup: %s", cs->resolvedloc.path); - ret = nfs_fop_lookup (cs->vol, &nfu, &cs->resolvedloc, - nfs3_fh_resolve_dir_lookup_cbk, cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fh_resolve_dir_lookup_cbk, cs); } out: return ret; @@ -2610,7 +2610,7 @@ nfs3_fh_resolve_check_response (nfs3_call_state_t *cs, gf_dirent_t *candidate, nfs3_fh_resolve_found (cs, candidate); else if (response == GF_NFS3_FHRESOLVE_NOTFOUND) { nfs_user_root_create (&nfu); - ret = nfs_readdirp (cs->vol, &nfu, cs->resolve_dir_fd, + ret = nfs_readdirp (cs->nfsx, cs->vol, &nfu, cs->resolve_dir_fd, GF_NFS3_DTPREF, last_offt, nfs3_fh_resolve_readdir_cbk, cs); } @@ -2702,13 +2702,13 @@ nfs3_fh_resolve_inode_hard (nfs3_call_state_t *cs) if (ret == 0) { gf_log (GF_NFS3, GF_LOG_TRACE, "Dir will be opened: %s", cs->resolvedloc.path); - ret = nfs_opendir (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_opendir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3_fh_resolve_opendir_cbk, cs); } else if (ret == -ENOENT) { gf_log (GF_NFS3, GF_LOG_TRACE, "Dir needs lookup: %s", cs->resolvedloc.path); - ret = nfs_fop_lookup (cs->vol, &nfu, &cs->resolvedloc, - nfs3_fh_resolve_dir_lookup_cbk, cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fh_resolve_dir_lookup_cbk, cs); } out: @@ -2739,8 +2739,8 @@ nfs3_fh_resolve_entry_hard (nfs3_call_state_t *cs) if (ret == -2) { gf_log (GF_NFS3, GF_LOG_TRACE, "Entry needs lookup: %s", cs->resolvedloc.path); - ret = nfs_fop_lookup (cs->vol, &nfu, &cs->resolvedloc, - nfs3_fh_resolve_entry_lookup_cbk, cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fh_resolve_entry_lookup_cbk, cs); ret = 0; } else if (ret == -1) { gf_log (GF_NFS3, GF_LOG_TRACE, "Entry needs parent lookup: %s", diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c index 41e474b396d..4129a188015 100644 --- a/xlators/nfs/server/src/nfs3.c +++ b/xlators/nfs/server/src/nfs3.c @@ -466,10 +466,10 @@ nfs3_getattr_resume (void *carg) * expects even the root inode to have been looked up. */ if (cs->resolvedloc.inode->ino == 1) - ret = nfs_lookup (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_getattr_lookup_cbk, cs); else - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_getattr_stat_cbk, cs); if (ret < 0) { @@ -642,7 +642,7 @@ nfs3svc_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if ((gf_attr_size_set (cs->setattr_valid)) && (!IA_ISDIR (postop->ia_type))) { nfs_request_user_init (&nfu, cs->req); - ret = nfs_truncate (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_truncate (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, cs->stbuf.ia_size, nfs3svc_truncate_cbk,cs); if (ret < 0) @@ -690,7 +690,7 @@ nfs3svc_setattr_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, /* Not a clean way but no motivation to add a new member to local. */ cs->preparent = *buf; nfs_request_user_init (&nfu, cs->req); - ret = nfs_setattr (cs->vol, &nfu, &cs->resolvedloc, &cs->stbuf, + 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); @@ -723,11 +723,12 @@ nfs3_setattr_resume (void *carg) 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->vol, &nfu, &cs->resolvedloc, + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_setattr_stat_cbk, cs); else - ret = nfs_setattr (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); @@ -933,7 +934,7 @@ nfs3_lookup_parentdir_resume (void *carg) if (ret < 0) goto errtostat; - ret = nfs_lookup (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_lookup_parentdir_cbk, cs); errtostat: if (ret < 0) @@ -969,8 +970,8 @@ nfs3_lookup_resume (void *carg) nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); cs->parent = cs->resolvefh; - ret = nfs_lookup (cs->vol, &nfu, &cs->resolvedloc, nfs3svc_lookup_cbk, - cs); + ret = nfs_lookup (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3svc_lookup_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -1133,7 +1134,8 @@ nfs3_access_resume (void *carg) nfs3_check_fh_resolve_status (cs, stat, nfs3err); cs->fh = cs->resolvefh; nfs_request_user_init (&nfu, cs->req); - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc, nfs3svc_access_cbk,cs); + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3svc_access_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -1271,7 +1273,7 @@ nfs3_readlink_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_readlink (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_readlink (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_readlink_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -1433,8 +1435,8 @@ nfs3_read_fd_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_read (cs->vol, &nfu, cs->fd, cs->datacount, cs->dataoffset, - nfs3svc_read_cbk, cs); + ret = nfs_read (cs->nfsx, cs->vol, &nfu, cs->fd, cs->datacount, + cs->dataoffset, nfs3svc_read_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); nfs3err: @@ -1620,7 +1622,8 @@ nfs3svc_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this, * the write fop happened before the fsync. */ cs->stbuf = *prebuf; - ret = nfs_fsync (cs->vol, &nfu, cs->fd, 0, nfs3svc_write_fsync_cbk, cs); + ret = nfs_fsync (cs->nfsx, cs->vol, &nfu, cs->fd, 0, + nfs3svc_write_fsync_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -1661,8 +1664,8 @@ __nfs3_write_resume (nfs3_call_state_t *cs) * opaque data buffers to multiples of 4 bytes. */ cs->datavec.iov_len = cs->datacount; - ret = nfs_write (cs->vol, &nfu, cs->fd, cs->iob, &cs->datavec, 1, - cs->dataoffset, nfs3svc_write_cbk, cs); + ret = nfs_write (cs->nfsx, cs->vol, &nfu, cs->fd, cs->iob, &cs->datavec, + 1, cs->dataoffset, nfs3svc_write_cbk, cs); return ret; } @@ -1960,7 +1963,7 @@ 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); - ret = nfs_setattr (cs->vol, &nfu, &cs->resolvedloc, &cs->stbuf, + 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); @@ -1999,12 +2002,12 @@ nfs3_create_common (nfs3_call_state_t *cs) */ if (cs->setattr_valid & GF_SET_ATTR_MODE) { cs->setattr_valid &= ~GF_SET_ATTR_MODE; - ret = nfs_create (cs->vol, &nfu, &cs->resolvedloc, flags, - cs->mode, nfs3svc_create_cbk, cs); + ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + flags, cs->mode, nfs3svc_create_cbk, cs); } else - ret = nfs_create (cs->vol, &nfu, &cs->resolvedloc, flags, - NFS_DEFAULT_CREATE_MODE, nfs3svc_create_cbk, - cs); + ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + flags, NFS_DEFAULT_CREATE_MODE, + nfs3svc_create_cbk, cs); return ret; } @@ -2064,17 +2067,17 @@ nfs3_create_exclusive (nfs3_call_state_t *cs) */ if ((cs->resolve_ret == 0) || ((cs->resolve_ret == -1) && (cs->resolve_errno != ENOENT))) { - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_create_stat_cbk, cs); goto nfs3err; } if (cs->setattr_valid & GF_SET_ATTR_MODE) { cs->setattr_valid &= ~GF_SET_ATTR_MODE; - ret = nfs_create (cs->vol, &nfu, &cs->resolvedloc, O_RDWR, - cs->mode, nfs3svc_create_cbk, cs); + ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + O_RDWR, cs->mode, nfs3svc_create_cbk, cs); } else - ret = nfs_create (cs->vol, &nfu, &cs->oploc, O_RDWR, + ret = nfs_create (cs->nfsx, cs->vol, &nfu, &cs->oploc, O_RDWR, NFS_DEFAULT_CREATE_MODE, nfs3svc_create_cbk, cs); @@ -2259,7 +2262,7 @@ nfs3svc_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, cs->preparent = *preparent; cs->postparent = *postparent; nfs_request_user_init (&nfu, cs->req); - ret = nfs_setattr (cs->vol, &nfu, &cs->resolvedloc, &cs->stbuf, + ret = nfs_setattr (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc,&cs->stbuf, cs->setattr_valid, nfs3svc_mkdir_setattr_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -2294,10 +2297,10 @@ nfs3_mkdir_resume (void *carg) if (gf_attr_mode_set (cs->setattr_valid)) { cs->setattr_valid &= ~GF_SET_ATTR_MODE; - ret = nfs_mkdir (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_mkdir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, cs->mode, nfs3svc_mkdir_cbk, cs); } else - ret = nfs_mkdir (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_mkdir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, cs->mode, nfs3svc_mkdir_cbk, cs); if (ret < 0) @@ -2445,8 +2448,8 @@ nfs3_symlink_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_new_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_symlink (cs->vol, &nfu, cs->pathname, &cs->resolvedloc, - nfs3svc_symlink_cbk, cs); + ret = nfs_symlink (cs->nfsx, cs->vol, &nfu, cs->pathname, + &cs->resolvedloc, nfs3svc_symlink_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -2612,7 +2615,7 @@ nfs3svc_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, cs->preparent = *preparent; cs->postparent = *postparent; nfs_request_user_init (&nfu, cs->req); - ret = nfs_setattr (cs->vol, &nfu, &cs->resolvedloc, &cs->stbuf, + ret = nfs_setattr (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc,&cs->stbuf, cs->setattr_valid, nfs3svc_mknod_setattr_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -2650,11 +2653,11 @@ nfs3_mknod_device (nfs3_call_state_t *cs) if (gf_attr_mode_set (cs->setattr_valid)) { cs->setattr_valid &= ~GF_SET_ATTR_MODE; mode |= cs->mode; - ret = nfs_mknod (cs->vol, &nfu, &cs->resolvedloc, mode, devnum, - nfs3svc_mknod_cbk, cs); + ret = nfs_mknod (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + mode, devnum, nfs3svc_mknod_cbk, cs); } else - ret = nfs_mknod (cs->vol, &nfu, &cs->resolvedloc, mode, devnum, - nfs3svc_mknod_cbk, cs); + ret = nfs_mknod (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + mode, devnum, nfs3svc_mknod_cbk, cs); return ret; } @@ -2674,12 +2677,11 @@ nfs3_mknod_fifo (nfs3_call_state_t *cs) if (gf_attr_mode_set (cs->setattr_valid)) { cs->setattr_valid &= ~GF_SET_ATTR_MODE; mode |= cs->mode; - ret = nfs_mknod (cs->vol, &nfu, &cs->resolvedloc, mode, 0, - nfs3svc_mknod_cbk, cs); + ret = nfs_mknod (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + mode, 0, nfs3svc_mknod_cbk, cs); } else - ret = nfs_mknod (cs->vol, &nfu, &cs->resolvedloc, mode, 0, - nfs3svc_mknod_cbk, cs); - + ret = nfs_mknod (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + mode, 0, nfs3svc_mknod_cbk, cs); return ret; } @@ -2886,10 +2888,10 @@ __nfs3_remove (nfs3_call_state_t *cs) type = cs->resolvedloc.inode->ia_type; nfs_request_user_init (&nfu, cs->req); if (IA_ISDIR (type)) - ret = nfs_rmdir (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_rmdir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_remove_cbk, cs); else - ret = nfs_unlink (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_unlink (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3svc_remove_cbk, cs); return ret; @@ -3048,7 +3050,8 @@ nfs3_rmdir_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_rmdir (cs->vol, &nfu, &cs->resolvedloc, nfs3svc_rmdir_cbk,cs); + ret = nfs_rmdir (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3svc_rmdir_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -3197,7 +3200,7 @@ nfs3_rename_resume_dst (void *carg) nfs3_check_new_fh_resolve_status (cs, stat, nfs3err); cs->parent = cs->resolvefh; nfs_request_user_init (&nfu, cs->req); - ret = nfs_rename (cs->vol, &nfu, &cs->oploc, &cs->resolvedloc, + ret = nfs_rename (cs->nfsx, cs->vol, &nfu, &cs->oploc, &cs->resolvedloc, nfs3svc_rename_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -3394,7 +3397,7 @@ nfs3_link_resume_lnk (void *carg) nfs3_check_new_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_link (cs->vol, &nfu, &cs->oploc, &cs->resolvedloc, + ret = nfs_link (cs->nfsx, cs->vol, &nfu, &cs->oploc, &cs->resolvedloc, nfs3svc_link_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -3629,7 +3632,8 @@ nfs3svc_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, cs->operrno = op_errno; list_splice_init (&entries->list, &cs->entries.list); nfs_request_user_init (&nfu, cs->req); - ret = nfs_fstat (cs->vol, &nfu, cs->fd, nfs3svc_readdir_fstat_cbk, cs); + ret = nfs_fstat (cs->nfsx, cs->vol, &nfu, cs->fd, + nfs3svc_readdir_fstat_cbk, cs); if (ret < 0) { op_ret = -1; stat = nfs3_errno_to_nfsstat3 (-ret); @@ -3671,8 +3675,8 @@ nfs3_readdir_process (nfs3_call_state_t *cs) return ret; nfs_request_user_init (&nfu, cs->req); - ret = nfs_readdirp (cs->vol, &nfu, cs->fd, cs->dircount, cs->cookie, - nfs3svc_readdir_cbk, cs); + ret = nfs_readdirp (cs->nfsx, cs->vol, &nfu, cs->fd, cs->dircount, + cs->cookie, nfs3svc_readdir_cbk, cs); return ret; } @@ -3926,8 +3930,8 @@ nfs3_fsstat_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, */ cs->fsstat = *buf; nfs_request_user_init (&nfu, cs->req); - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc, nfs3_fsstat_stat_cbk, - cs); + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3_fsstat_stat_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -3958,7 +3962,7 @@ nfs3_fsstat_resume (void *carg) nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); /* First, we need to get the statvfs for the subvol */ - ret = nfs_statfs (cs->vol, &nfu, &cs->resolvedloc, + ret = nfs_statfs (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, nfs3_fsstat_statfs_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -4101,7 +4105,8 @@ nfs3_fsinfo_resume (void *carg) nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc,nfs3svc_fsinfo_cbk, cs); + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3svc_fsinfo_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); @@ -4239,8 +4244,8 @@ nfs3_pathconf_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_stat (cs->vol, &nfu, &cs->resolvedloc, nfs3svc_pathconf_cbk, - cs); + ret = nfs_stat (cs->nfsx, cs->vol, &nfu, &cs->resolvedloc, + nfs3svc_pathconf_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); nfs3err: @@ -4375,7 +4380,8 @@ nfs3_commit_resume (void *carg) cs = (nfs3_call_state_t *)carg; nfs3_check_fh_resolve_status (cs, stat, nfs3err); nfs_request_user_init (&nfu, cs->req); - ret = nfs_fsync (cs->vol, &nfu, cs->fd, 0, nfs3svc_commit_cbk, cs); + ret = nfs_fsync (cs->nfsx, cs->vol, &nfu, cs->fd, 0, + nfs3svc_commit_cbk, cs); if (ret < 0) stat = nfs3_errno_to_nfsstat3 (-ret); |