summaryrefslogtreecommitdiffstats
path: root/api/src/glfs-handleops.c
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2015-03-30 16:56:59 +0530
committerVijay Bellur <vbellur@redhat.com>2015-05-07 04:19:16 -0700
commitea8d9ebafa4a6afb99721022e638292fd475ed62 (patch)
tree3419bbcd116abd6b8361a3b0a997081cddc82139 /api/src/glfs-handleops.c
parent14011cb0383ac19b98b02f0caec5a1977ecd7c35 (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: 1217711 Change-Id: I0f5e53d6f5ece16aecb514a0a426dca40fa1c755 Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/10049 Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Reviewed-on: http://review.gluster.org/10562 Tested-by: NetBSD Build System Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'api/src/glfs-handleops.c')
-rw-r--r--api/src/glfs-handleops.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c
index fd14b4cf70c..e22b541b4ac 100644
--- a/api/src/glfs-handleops.c
+++ b/api/src/glfs-handleops.c
@@ -1692,15 +1692,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;
@@ -1740,7 +1742,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;
}
@@ -1758,12 +1760,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;
@@ -1771,10 +1780,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);
}