libglusterfs: Added support to set 'frame->root->lkowner'

This support can be used by the clients using SYNCOP framework,
to pass unique owners for various locks taken on a file, so that
the glusterfs-server can treat them as being locks from different owners.

Change-Id: Ie88014053af40fc7913ad6c1f7730d54cc44ddab
BUG: 1186713
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: http://review.gluster.org/9482
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
Soumya Koduri 2015-01-27 16:53:35 +05:30 committed by Niels de Vos
parent 30357bcfcd
commit bf22868f82
2 changed files with 46 additions and 0 deletions

View File

@ -209,6 +209,46 @@ out:
return ret;
}
int
syncopctx_setfslkowner (gf_lkowner_t *lk_owner)
{
struct syncopctx *opctx = NULL;
int ret = 0;
/* In args check */
if (!lk_owner) {
ret = -1;
errno = EINVAL;
goto out;
}
opctx = syncopctx_getctx ();
/* alloc for this thread the first time */
if (!opctx) {
opctx = GF_CALLOC (1, sizeof (*opctx), gf_common_mt_syncopctx);
if (!opctx) {
ret = -1;
goto out;
}
ret = syncopctx_setctx (opctx);
if (ret != 0) {
GF_FREE (opctx);
opctx = NULL;
goto out;
}
}
out:
if (opctx && lk_owner) {
opctx->lk_owner = *lk_owner;
opctx->valid |= SYNCOPCTX_LKOWNER;
}
return ret;
}
static void
__run (struct synctask *task)
{

View File

@ -32,6 +32,7 @@
#define SYNCOPCTX_GID 0x00000002
#define SYNCOPCTX_GROUPS 0x00000004
#define SYNCOPCTX_PID 0x00000008
#define SYNCOPCTX_LKOWNER 0x00000010
struct synctask;
struct syncproc;
@ -167,6 +168,7 @@ struct syncopctx {
int ngrps;
gid_t *groups;
pid_t pid;
gf_lkowner_t lk_owner;
};
#define __yawn(args) do { \
@ -264,6 +266,7 @@ int syncopctx_setfsuid (void *uid);
int syncopctx_setfsgid (void *gid);
int syncopctx_setfsgroups (int count, const void *groups);
int syncopctx_setfspid (void *pid);
int syncopctx_setfslkowner (gf_lkowner_t *lk_owner);
static inline call_frame_t *
syncop_create_frame (xlator_t *this)
@ -324,6 +327,9 @@ syncop_create_frame (xlator_t *this)
}
}
if (opctx && (opctx->valid & SYNCOPCTX_LKOWNER))
frame->root->lk_owner = opctx->lk_owner;
return frame;
}