summaryrefslogtreecommitdiffstats
path: root/api/src/glfs-internal.h
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2018-04-27 15:12:08 +0530
committerPoornima G <pgurusid@redhat.com>2018-05-04 17:12:19 +0000
commitb04066721bf4a240f61b83bd87bbb27437c5fe4f (patch)
treedd1a4c7dcfe372f3182e51a5d8f1dba6af82ea94 /api/src/glfs-internal.h
parentb42a048d3a76c7f377399f18d30f0a8a930f9d05 (diff)
gfapi : RECALL_LEASE implementation
Right now there are two types of upcalls * poll method * registering callback But callback can be registered per fs and same callback fn shall be used for any lease recall with object handle as argument as done for cache invalidation. TODO: RECALL LEASE for each glfd (for future reference) (may be needed fo Samba as they do not deal with object handles. In case of RECALL_LEASE, we could associate separate cbk function for each glfd either by - extending pub_glfs_lease to accept new args (recall_cbk_fn, cookie) - or by defining new API "glfs_register_recall_cbk_fn (glfd, recall_cbk_fn, cookie) . In such cases, flag it and instead of calling below upcall functions, define a new one to go through the glfd list and invoke each of theirs recall_cbk_fn. Plus added following as well * passed lease id to dict in required arguments * added flag check in pub_glfs_open Updates: #350 Change-Id: I07a971f0f26ec6aae0b9f9a5613504317dee153b Signed-off-by: Soumya Koduri <skoduri@redhat.com> Signed-off-by: Poornima G <pgurusid@redhat.com> Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
Diffstat (limited to 'api/src/glfs-internal.h')
-rw-r--r--api/src/glfs-internal.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/api/src/glfs-internal.h b/api/src/glfs-internal.h
index 145509c3caf..788c6b00545 100644
--- a/api/src/glfs-internal.h
+++ b/api/src/glfs-internal.h
@@ -213,6 +213,7 @@ enum glfs_fd_state {
struct glfs_fd {
struct list_head openfds;
+ struct list_head list;
GF_REF_DECL;
struct glfs *fs;
enum glfs_fd_state state;
@@ -224,6 +225,8 @@ struct glfs_fd {
gf_lkowner_t lk_owner;
glfs_leaseid_t lease_id; /* Stores lease_id of client in glfd */
gf_lock_t lock; /* lock taken before updating fd state */
+ glfs_recall_cbk cbk;
+ void *cookie;
};
/* glfs object handle introduced for the alternate gfapi implementation based
@@ -254,6 +257,16 @@ struct glfs_upcall_inode {
struct stat oldp_buf; /* Latest stat of old parent dir handle */
};
+struct glfs_upcall_lease {
+ struct glfs_object *object; /* Object which need to be acted upon */
+ uint32_t lease_type; /* Lease type to which client can downgrade to*/
+};
+
+struct glfs_upcall_lease_fd {
+ uint32_t lease_type; /* Lease type to which client can downgrade to*/
+ void *fd_cookie; /* Object which need to be acted upon */
+};
+
struct glfs_xreaddirp_stat {
struct stat st; /* Stat for that dirent - corresponds to GFAPI_XREADDIRP_STAT */
struct glfs_object *object; /* handled for GFAPI_XREADDIRP_HANDLE */
@@ -614,4 +627,16 @@ void
glfs_lease_to_gf_lease (struct glfs_lease *lease, struct gf_lease *gf_lease);
void glfs_release_upcall (void *ptr);
+
+int
+get_fop_attr_glfd (dict_t **fop_attr, struct glfs_fd *glfd);
+
+int
+set_fop_attr_glfd (struct glfs_fd *glfd);
+
+int
+get_fop_attr_thrd_key (dict_t **fop_attr);
+
+void
+unset_fop_attr (dict_t **fop_attr);
#endif /* !_GLFS_INTERNAL_H */