diff options
Diffstat (limited to 'xlators/nfs/server/src/nfs-fops.c')
-rw-r--r-- | xlators/nfs/server/src/nfs-fops.c | 432 |
1 files changed, 133 insertions, 299 deletions
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"); -} - - - |