From 9d3af972f516b6ba38d2736ce2016e34a452d569 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Tue, 20 Mar 2012 17:22:24 +0530 Subject: core: adding extra data for fops with this change, the xlator APIs will have a dictionary as extra argument, which is passed between all the layers. This can be utilized for overloading in some of the operations. Change-Id: I58a8186b3ef647650280e63f3e5e9b9de7827b40 Signed-off-by: Amar Tumballi BUG: 782265 Reviewed-on: http://review.gluster.com/2960 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/cluster/afr/src/afr-dir-write.c | 115 +++++++++++++++++++------------- 1 file changed, 70 insertions(+), 45 deletions(-) (limited to 'xlators/cluster/afr/src/afr-dir-write.c') diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c index 1cd447e750f..37d86ee5c31 100644 --- a/xlators/cluster/afr/src/afr-dir-write.c +++ b/xlators/cluster/afr/src/afr-dir-write.c @@ -106,7 +106,8 @@ afr_create_unwind (call_frame_t *frame, xlator_t *this) local->cont.create.fd, local->cont.create.inode, unwind_buf, &local->cont.create.preparent, - &local->cont.create.postparent); + &local->cont.create.postparent, + NULL); } return 0; @@ -117,7 +118,8 @@ int afr_create_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode, struct iatt *buf, - struct iatt *preparent, struct iatt *postparent) + struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { afr_local_t *local = NULL; afr_private_t *priv = NULL; @@ -235,8 +237,9 @@ afr_create_wind (call_frame_t *frame, xlator_t *this) &local->loc, local->cont.create.flags, local->cont.create.mode, + local->umask, local->cont.create.fd, - local->cont.create.params); + local->xdata_req); if (!--call_count) break; } @@ -264,7 +267,7 @@ afr_create_done (call_frame_t *frame, xlator_t *this) int afr_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, mode_t mode, - fd_t *fd, dict_t *params) + mode_t umask, fd_t *fd, dict_t *params) { afr_private_t *priv = NULL; afr_local_t *local = NULL; @@ -305,8 +308,9 @@ afr_create (call_frame_t *frame, xlator_t *this, local->cont.create.flags = flags; local->cont.create.mode = mode; local->cont.create.fd = fd_ref (fd); + local->umask = umask; if (params) - local->cont.create.params = dict_ref (params); + local->xdata_req = dict_ref (params); local->transaction.fop = afr_create_wind; local->transaction.done = afr_create_done; @@ -328,7 +332,7 @@ out: if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (create, frame, -1, op_errno, - NULL, NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL, NULL); } return 0; @@ -367,7 +371,8 @@ afr_mknod_unwind (call_frame_t *frame, xlator_t *this) local->op_ret, local->op_errno, local->cont.mknod.inode, unwind_buf, &local->cont.mknod.preparent, - &local->cont.mknod.postparent); + &local->cont.mknod.postparent, + NULL); } return 0; @@ -378,7 +383,7 @@ int afr_mknod_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, inode_t *inode, struct iatt *buf, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t *local = NULL; afr_private_t *priv = NULL; @@ -463,7 +468,8 @@ afr_mknod_wind (call_frame_t *frame, xlator_t *this) priv->children[i]->fops->mknod, &local->loc, local->cont.mknod.mode, local->cont.mknod.dev, - local->cont.mknod.params); + local->umask, + local->xdata_req); if (!--call_count) break; } @@ -488,8 +494,8 @@ afr_mknod_done (call_frame_t *frame, xlator_t *this) int -afr_mknod (call_frame_t *frame, xlator_t *this, - loc_t *loc, mode_t mode, dev_t dev, dict_t *params) +afr_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode, + dev_t dev, mode_t umask, dict_t *params) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -529,8 +535,9 @@ afr_mknod (call_frame_t *frame, xlator_t *this, local->cont.mknod.mode = mode; local->cont.mknod.dev = dev; + local->umask = umask; if (params) - local->cont.mknod.params = dict_ref (params); + local->xdata_req = dict_ref (params); local->transaction.fop = afr_mknod_wind; local->transaction.done = afr_mknod_done; @@ -552,7 +559,7 @@ out: if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (mknod, frame, -1, op_errno, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } return 0; @@ -592,7 +599,8 @@ afr_mkdir_unwind (call_frame_t *frame, xlator_t *this) local->op_ret, local->op_errno, local->cont.mkdir.inode, unwind_buf, &local->cont.mkdir.preparent, - &local->cont.mkdir.postparent); + &local->cont.mkdir.postparent, + NULL); } return 0; @@ -603,7 +611,7 @@ int afr_mkdir_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, inode_t *inode, struct iatt *buf, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t *local = NULL; afr_private_t *priv = NULL; @@ -688,7 +696,8 @@ afr_mkdir_wind (call_frame_t *frame, xlator_t *this) priv->children[i], priv->children[i]->fops->mkdir, &local->loc, local->cont.mkdir.mode, - local->cont.mkdir.params); + local->umask, + local->xdata_req); if (!--call_count) break; } @@ -715,7 +724,7 @@ afr_mkdir_done (call_frame_t *frame, xlator_t *this) int afr_mkdir (call_frame_t *frame, xlator_t *this, - loc_t *loc, mode_t mode, dict_t *params) + loc_t *loc, mode_t mode, mode_t umask, dict_t *params) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -754,8 +763,9 @@ afr_mkdir (call_frame_t *frame, xlator_t *this, UNLOCK (&priv->read_child_lock); local->cont.mkdir.mode = mode; + local->umask = umask; if (params) - local->cont.mkdir.params = dict_ref (params); + local->xdata_req = dict_ref (params); local->transaction.fop = afr_mkdir_wind; local->transaction.done = afr_mkdir_done; @@ -778,7 +788,7 @@ out: AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (mkdir, frame, -1, op_errno, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } return 0; @@ -818,7 +828,8 @@ afr_link_unwind (call_frame_t *frame, xlator_t *this) local->op_ret, local->op_errno, local->cont.link.inode, unwind_buf, &local->cont.link.preparent, - &local->cont.link.postparent); + &local->cont.link.postparent, + NULL); } return 0; @@ -829,7 +840,7 @@ int afr_link_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, inode_t *inode, struct iatt *buf, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t *local = NULL; afr_private_t *priv = NULL; @@ -914,7 +925,7 @@ afr_link_wind (call_frame_t *frame, xlator_t *this) priv->children[i], priv->children[i]->fops->link, &local->loc, - &local->newloc); + &local->newloc, local->xdata_req); if (!--call_count) break; @@ -940,7 +951,7 @@ afr_link_done (call_frame_t *frame, xlator_t *this) int afr_link (call_frame_t *frame, xlator_t *this, - loc_t *oldloc, loc_t *newloc) + loc_t *oldloc, loc_t *newloc, dict_t *xdata) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -971,6 +982,8 @@ afr_link (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, oldloc); loc_copy (&local->newloc, newloc); + if (xdata) + local->xdata_req = dict_ref (xdata); LOCK (&priv->read_child_lock); { @@ -999,7 +1012,7 @@ out: if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (link, frame, -1, op_errno, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } return 0; @@ -1039,7 +1052,8 @@ afr_symlink_unwind (call_frame_t *frame, xlator_t *this) local->op_ret, local->op_errno, local->cont.symlink.inode, unwind_buf, &local->cont.symlink.preparent, - &local->cont.symlink.postparent); + &local->cont.symlink.postparent, + NULL); } return 0; @@ -1050,7 +1064,7 @@ int afr_symlink_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, inode_t *inode, struct iatt *buf, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t *local = NULL; afr_private_t *priv = NULL; @@ -1136,7 +1150,8 @@ afr_symlink_wind (call_frame_t *frame, xlator_t *this) priv->children[i]->fops->symlink, local->cont.symlink.linkpath, &local->loc, - local->cont.symlink.params); + local->umask, + local->xdata_req); if (!--call_count) break; @@ -1163,7 +1178,7 @@ afr_symlink_done (call_frame_t *frame, xlator_t *this) int afr_symlink (call_frame_t *frame, xlator_t *this, - const char *linkpath, loc_t *loc, dict_t *params) + const char *linkpath, loc_t *loc, mode_t umask, dict_t *params) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -1202,8 +1217,9 @@ afr_symlink (call_frame_t *frame, xlator_t *this, UNLOCK (&priv->read_child_lock); local->cont.symlink.linkpath = gf_strdup (linkpath); + local->umask = umask; if (params) - local->cont.symlink.params = dict_ref (params); + local->xdata_req = dict_ref (params); local->transaction.fop = afr_symlink_wind; local->transaction.done = afr_symlink_done; @@ -1225,7 +1241,7 @@ out: if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (symlink, frame, -1, op_errno, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } return 0; @@ -1266,7 +1282,8 @@ afr_rename_unwind (call_frame_t *frame, xlator_t *this) &local->cont.rename.preoldparent, &local->cont.rename.postoldparent, &local->cont.rename.prenewparent, - &local->cont.rename.postnewparent); + &local->cont.rename.postnewparent, + NULL); } return 0; @@ -1277,7 +1294,8 @@ int afr_rename_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, struct iatt *buf, struct iatt *preoldparent, struct iatt *postoldparent, - struct iatt *prenewparent, struct iatt *postnewparent) + struct iatt *prenewparent, struct iatt *postnewparent, + dict_t *xdata) { afr_local_t * local = NULL; int call_count = -1; @@ -1356,7 +1374,7 @@ afr_rename_wind (call_frame_t *frame, xlator_t *this) priv->children[i], priv->children[i]->fops->rename, &local->loc, - &local->newloc); + &local->newloc, NULL); if (!--call_count) break; } @@ -1381,7 +1399,7 @@ afr_rename_done (call_frame_t *frame, xlator_t *this) int afr_rename (call_frame_t *frame, xlator_t *this, - loc_t *oldloc, loc_t *newloc) + loc_t *oldloc, loc_t *newloc, dict_t *xdata) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -1441,7 +1459,7 @@ out: AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (rename, frame, -1, op_errno, - NULL, NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL, NULL); } return 0; @@ -1472,7 +1490,8 @@ afr_unlink_unwind (call_frame_t *frame, xlator_t *this) AFR_STACK_UNWIND (unlink, main_frame, local->op_ret, local->op_errno, &local->cont.unlink.preparent, - &local->cont.unlink.postparent); + &local->cont.unlink.postparent, + NULL); } return 0; @@ -1482,7 +1501,7 @@ afr_unlink_unwind (call_frame_t *frame, xlator_t *this) int afr_unlink_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t * local = NULL; int call_count = -1; @@ -1557,7 +1576,8 @@ afr_unlink_wind (call_frame_t *frame, xlator_t *this) (void *) (long) i, priv->children[i], priv->children[i]->fops->unlink, - &local->loc); + &local->loc, local->xflag, + local->xdata_req); if (!--call_count) break; @@ -1583,7 +1603,7 @@ afr_unlink_done (call_frame_t *frame, xlator_t *this) int32_t afr_unlink (call_frame_t *frame, xlator_t *this, - loc_t *loc) + loc_t *loc, int xflag, dict_t *xdata) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -1613,6 +1633,9 @@ afr_unlink (call_frame_t *frame, xlator_t *this, goto out; loc_copy (&local->loc, loc); + local->xflag = xflag; + if (xdata) + local->xdata_req = dict_ref (xdata); local->transaction.fop = afr_unlink_wind; local->transaction.done = afr_unlink_done; @@ -1634,7 +1657,7 @@ out: if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); AFR_STACK_UNWIND (unlink, frame, -1, op_errno, - NULL, NULL); + NULL, NULL, NULL); } return 0; @@ -1667,7 +1690,8 @@ afr_rmdir_unwind (call_frame_t *frame, xlator_t *this) AFR_STACK_UNWIND (rmdir, main_frame, local->op_ret, local->op_errno, &local->cont.rmdir.preparent, - &local->cont.rmdir.postparent); + &local->cont.rmdir.postparent, + NULL); } return 0; @@ -1677,7 +1701,7 @@ afr_rmdir_unwind (call_frame_t *frame, xlator_t *this) int afr_rmdir_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, int32_t op_errno, struct iatt *preparent, - struct iatt *postparent) + struct iatt *postparent, dict_t *xdata) { afr_local_t * local = NULL; int call_count = -1; @@ -1753,7 +1777,8 @@ afr_rmdir_wind (call_frame_t *frame, xlator_t *this) (void *) (long) i, priv->children[i], priv->children[i]->fops->rmdir, - &local->loc, local->cont.rmdir.flags); + &local->loc, local->cont.rmdir.flags, + NULL); if (!--call_count) break; @@ -1779,7 +1804,7 @@ afr_rmdir_done (call_frame_t *frame, xlator_t *this) int afr_rmdir (call_frame_t *frame, xlator_t *this, - loc_t *loc, int flags) + loc_t *loc, int flags, dict_t *xdata) { afr_private_t * priv = NULL; afr_local_t * local = NULL; @@ -1830,7 +1855,7 @@ out: if (ret < 0) { if (transaction_frame) AFR_STACK_DESTROY (transaction_frame); - AFR_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL); + AFR_STACK_UNWIND (rmdir, frame, -1, op_errno, NULL, NULL, NULL); } return 0; -- cgit