diff options
author | Soumya Koduri <skoduri@redhat.com> | 2015-03-30 16:56:59 +0530 |
---|---|---|
committer | Kaleb KEITHLEY <kkeithle@redhat.com> | 2015-04-30 04:51:46 -0700 |
commit | 2bf85951c6c25aa17acc591fabc3b3927b6dc82f (patch) | |
tree | 8db692b3c4f833f3a075cb5fb58195dda9004280 /api/src/glfs-handleops.c | |
parent | 288e02853d913b96e4d6bce9afb16da7d891546f (diff) |
Upcall: Process each of the upcall events separately
As suggested during the code-review of Bug1200262, have modified
GF_CBK_UPCALL to be exlusively GF_CBK_CACHE_INVALIDATION.
Thus, for any new upcall event, a new CBK procedure will be added.
Also made changes to store upcall data separately based on the
upcall event type received.
BUG: 1200262
Change-Id: I0f5e53d6f5ece16aecb514a0a426dca40fa1c755
Signed-off-by: Soumya Koduri <skoduri@redhat.com>
Reviewed-on: http://review.gluster.org/10049
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'api/src/glfs-handleops.c')
-rw-r--r-- | api/src/glfs-handleops.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c index ee8ea626c51..b3f65e05fef 100644 --- a/api/src/glfs-handleops.c +++ b/api/src/glfs-handleops.c @@ -1641,15 +1641,17 @@ GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_h_rename, 3.4.2); int pub_glfs_h_poll_upcall (struct glfs *fs, struct callback_arg *up_arg) { - struct glfs_object *object = NULL; - uuid_t gfid; - upcall_entry *u_list = NULL; - upcall_entry *tmp = NULL; - xlator_t *subvol = NULL; - int found = 0; - int reason = 0; - glusterfs_ctx_t *ctx = NULL; - int ret = -1; + struct glfs_object *object = NULL; + uuid_t gfid; + upcall_entry *u_list = NULL; + upcall_entry *tmp = NULL; + xlator_t *subvol = NULL; + int found = 0; + int reason = 0; + glusterfs_ctx_t *ctx = NULL; + int ret = -1; + struct gf_upcall *upcall_data = NULL; + struct gf_upcall_cache_invalidation *ca_data = NULL; if (!fs || !up_arg) { errno = EINVAL; @@ -1689,7 +1691,7 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct callback_arg *up_arg) list_for_each_entry_safe (u_list, tmp, &fs->upcall_list, upcall_list) { - gf_uuid_copy (gfid, u_list->gfid); + gf_uuid_copy (gfid, u_list->upcall_data.gfid); found = 1; break; } @@ -1707,12 +1709,19 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct callback_arg *up_arg) goto out; } - switch (u_list->event_type) { - case CACHE_INVALIDATION: + upcall_data = &u_list->upcall_data; + + switch (upcall_data->event_type) { + case GF_UPCALL_CACHE_INVALIDATION: /* XXX: Need to revisit this to support * GFAPI_INODE_UPDATE if required. */ + ca_data = upcall_data->data; + GF_VALIDATE_OR_GOTO ("glfs_h_poll_upcall", + ca_data, out); reason = GFAPI_INODE_INVALIDATE; + up_arg->flags = ca_data->flags; + up_arg->expire_time_attr = ca_data->expire_time_attr; break; default: break; @@ -1720,10 +1729,9 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct callback_arg *up_arg) up_arg->object = object; up_arg->reason = reason; - up_arg->flags = u_list->flags; - up_arg->expire_time_attr = u_list->expire_time_attr; list_del_init (&u_list->upcall_list); + GF_FREE (u_list->upcall_data.data); GF_FREE (u_list); } |