diff options
Diffstat (limited to 'rpc/xdr/src')
| -rw-r--r-- | rpc/xdr/src/glusterfs3-xdr.x | 3 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3.h | 54 | 
2 files changed, 40 insertions, 17 deletions
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 */  | 
