summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2015-03-30 16:56:59 +0530
committerKaleb KEITHLEY <kkeithle@redhat.com>2015-04-30 04:51:46 -0700
commit2bf85951c6c25aa17acc591fabc3b3927b6dc82f (patch)
tree8db692b3c4f833f3a075cb5fb58195dda9004280 /rpc
parent288e02853d913b96e4d6bce9afb16da7d891546f (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 'rpc')
-rw-r--r--rpc/rpc-lib/src/protocol-common.h4
-rw-r--r--rpc/xdr/src/glusterfs3-xdr.x3
-rw-r--r--rpc/xdr/src/glusterfs3.h54
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 60697b8fa66..3b964331892 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 */