diff options
author | Soumya Koduri <skoduri@redhat.com> | 2015-03-30 16:56:59 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-05-07 04:19:16 -0700 |
commit | ea8d9ebafa4a6afb99721022e638292fd475ed62 (patch) | |
tree | 3419bbcd116abd6b8361a3b0a997081cddc82139 /rpc | |
parent | 14011cb0383ac19b98b02f0caec5a1977ecd7c35 (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 'rpc')
-rw-r--r-- | rpc/rpc-lib/src/protocol-common.h | 4 | ||||
-rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.x | 3 | ||||
-rw-r--r-- | rpc/xdr/src/glusterfs3.h | 54 |
3 files changed, 41 insertions, 20 deletions
diff --git a/rpc/rpc-lib/src/protocol-common.h b/rpc/rpc-lib/src/protocol-common.h index e2c8443a7fb..2f7f23f3b45 100644 --- a/rpc/rpc-lib/src/protocol-common.h +++ b/rpc/rpc-lib/src/protocol-common.h @@ -132,9 +132,7 @@ enum gf_cbk_procnum { GF_CBK_INO_FLUSH, GF_CBK_EVENT_NOTIFY, GF_CBK_GET_SNAPS, - /* XXX: Have separate events for each - * UPCALL event - BZ 1200268) */ - GF_CBK_UPCALL, + GF_CBK_CACHE_INVALIDATION, GF_CBK_MAXVALUE, }; diff --git a/rpc/xdr/src/glusterfs3-xdr.x b/rpc/xdr/src/glusterfs3-xdr.x index 0136aec2b08..f0cd4cbc953 100644 --- a/rpc/xdr/src/glusterfs3-xdr.x +++ b/rpc/xdr/src/glusterfs3-xdr.x @@ -44,12 +44,13 @@ struct gf_iatt { }; -struct gfs3_upcall_req { +struct gfs3_cbk_cache_invalidation_req { opaque gfid[16]; unsigned int event_type; /* Upcall event type */ unsigned int flags; /* or mask of events incase of inotify */ unsigned int expire_time_attr; /* the amount of time which client * can cache this entry */ + opaque xdata<>; /* Extra data */ }; struct gfs3_stat_req { diff --git a/rpc/xdr/src/glusterfs3.h b/rpc/xdr/src/glusterfs3.h index c2fa15f9e79..2acdfc756c4 100644 --- a/rpc/xdr/src/glusterfs3.h +++ b/rpc/xdr/src/glusterfs3.h @@ -268,28 +268,50 @@ gf_stat_from_iatt (struct gf_iatt *gf_stat, struct iatt *iatt) } static inline void -gf_proto_upcall_from_upcall (gfs3_upcall_req *gf_up_req, - struct gf_upcall *gf_up_data) +gf_proto_cache_invalidation_from_upcall (gfs3_cbk_cache_invalidation_req *gf_c_req, + struct gf_upcall *gf_up_data) { - if (!gf_up_req || !gf_up_data) - return; + struct gf_upcall_cache_invalidation *gf_c_data = NULL; + int is_cache_inval = 0; + + GF_VALIDATE_OR_GOTO(THIS->name, gf_c_req, out); + GF_VALIDATE_OR_GOTO(THIS->name, gf_up_data, out); + + is_cache_inval = ((gf_up_data->event_type == + GF_UPCALL_CACHE_INVALIDATION) ? 1 : 0); + GF_VALIDATE_OR_GOTO(THIS->name, is_cache_inval, out); + + gf_c_data = (struct gf_upcall_cache_invalidation *)gf_up_data->data; + GF_VALIDATE_OR_GOTO(THIS->name, gf_c_data, out); + + memcpy (gf_c_req->gfid, gf_up_data->gfid, 16); + gf_c_req->event_type = gf_up_data->event_type; + gf_c_req->flags = gf_c_data->flags; + gf_c_req->expire_time_attr = gf_c_data->expire_time_attr; - memcpy (gf_up_req->gfid, gf_up_data->gfid, 16); - gf_up_req->event_type = gf_up_data->event_type; - gf_up_req->flags = gf_up_data->flags; - gf_up_req->expire_time_attr = gf_up_data->expire_time_attr; +out: + return; } static inline void -gf_proto_upcall_to_upcall (gfs3_upcall_req *gf_up_req, - struct gf_upcall *gf_up_data) +gf_proto_cache_invalidation_to_upcall (gfs3_cbk_cache_invalidation_req *gf_c_req, + struct gf_upcall *gf_up_data) { - if (!gf_up_req || !gf_up_data) - return; + struct gf_upcall_cache_invalidation *gf_c_data = NULL; + + GF_VALIDATE_OR_GOTO(THIS->name, gf_c_req, out); + GF_VALIDATE_OR_GOTO(THIS->name, gf_up_data, out); + + gf_c_data = (struct gf_upcall_cache_invalidation *)gf_up_data->data; + GF_VALIDATE_OR_GOTO(THIS->name, gf_c_data, out); + + memcpy (gf_up_data->gfid, gf_c_req->gfid, 16); + gf_up_data->event_type = gf_c_req->event_type; + + gf_c_data->flags = gf_c_req->flags; + gf_c_data->expire_time_attr = gf_c_req->expire_time_attr; - memcpy (gf_up_data->gfid, gf_up_req->gfid, 16); - gf_up_data->event_type = gf_up_req->event_type; - gf_up_data->flags = gf_up_req->flags; - gf_up_data->expire_time_attr = gf_up_req->expire_time_attr; +out: + return; } #endif /* !_GLUSTERFS3_H */ |