diff options
Diffstat (limited to 'api/src/glfs.c')
| -rw-r--r-- | api/src/glfs.c | 103 | 
1 files changed, 101 insertions, 2 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 6724534fb31..da6bc3a07ba 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -578,7 +578,7 @@ pub_glfs_setfsleaseid (glfs_leaseid_t leaseid)          GF_VALIDATE_OR_GOTO (THIS->name, leaseid, out); -        gleaseid = glusterfs_leaseid_buf_get(); +        gleaseid = gf_leaseid_get();          if (gleaseid) {                  memcpy (gleaseid, leaseid, LEASE_ID_SIZE);                  ret = 0; @@ -589,6 +589,87 @@ out:  GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_setfsleaseid, 4.0.0); +int +get_fop_attr_glfd (dict_t **fop_attr, struct glfs_fd *glfd) +{ +        char *leaseid            = NULL; +        int   ret                = 0; +        gf_boolean_t dict_create = _gf_false; + +        leaseid = GF_CALLOC (1, LEASE_ID_SIZE, gf_common_mt_char); +        GF_CHECK_ALLOC_AND_LOG("gfapi", leaseid, ret, "lease id alloc failed", out); +        memcpy (leaseid, glfd->lease_id, LEASE_ID_SIZE); +        if (*fop_attr == NULL) { +                *fop_attr = dict_new (); +                dict_create = _gf_true; +        } +        GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out); +        ret = dict_set_static_bin (*fop_attr, "lease-id", leaseid, LEASE_ID_SIZE); +out: +        if (ret) { +                GF_FREE (leaseid); +                if (dict_create) { +                        if (*fop_attr) +                                dict_unref (*fop_attr); +                        *fop_attr = NULL; +                } +        } +        return ret; +} + +int +set_fop_attr_glfd (struct glfs_fd *glfd) +{ +        char     *lease_id = NULL; +        int       ret      = -1; + +        lease_id = gf_existing_leaseid (); +        if (lease_id) { +                memcpy (glfd->lease_id, lease_id, LEASE_ID_SIZE); +                ret = 0; +        } +        return ret; +} + +int +get_fop_attr_thrd_key (dict_t **fop_attr) +{ +        char     *lease_id       = NULL; +        int       ret            = 0; +        gf_boolean_t dict_create = _gf_false; + +        lease_id = gf_existing_leaseid (); +        if (lease_id) { +                if (*fop_attr == NULL) { +                        *fop_attr = dict_new (); +                        dict_create = _gf_true; +                } +                GF_CHECK_ALLOC_AND_LOG("gfapi", *fop_attr, ret, "dict_new failed", out); +                ret = dict_set_bin (*fop_attr, "lease-id", gf_strdup (lease_id), +                                    LEASE_ID_SIZE); +        } + +out: +        if (ret && dict_create) { +                if (*fop_attr) +                        dict_unref (*fop_attr); +                *fop_attr = NULL; +        } +        return ret; +} + +void +unset_fop_attr (dict_t **fop_attr) +{ +        char     *lease_id = NULL; +        lease_id = gf_existing_leaseid (); +        if (lease_id) +                memset (lease_id, 0, LEASE_ID_SIZE); +        if (*fop_attr) { +                dict_unref (*fop_attr); +                *fop_attr = NULL; +        } +}  struct glfs *  pub_glfs_from_glfd (struct glfs_fd *glfd)  { @@ -1486,6 +1567,22 @@ pub_glfs_upcall_inode_get_oldpstat (struct glfs_upcall_inode *arg)  GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_inode_get_oldpstat, 3.7.16); +/*struct glfs_object* +pub_glfs_upcall_lease_get_object (struct glfs_upcall_recall_inode *arg) +{ +        return arg->object; +} + +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_lease_get_object, 4.0.0); +*/ + +uint32_t +pub_glfs_upcall_lease_get_lease_type (struct glfs_upcall_lease *arg) +{ +        return arg->lease_type; +} +GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_upcall_lease_get_lease_type, 4.0.0); +  /* definitions of the GLFS_SYSRQ_* chars are in glfs.h */  static struct glfs_sysrq_help {          char  sysrq; @@ -1578,8 +1675,10 @@ glfs_upcall_register (struct glfs *fs, uint32_t event_list,                           */                          fs->upcall_events |=  GF_UPCALL_CACHE_INVALIDATION;                          ret |= GF_UPCALL_CACHE_INVALIDATION; +                } else if (event_list & GLFS_EVENT_INODE_INVALIDATE) { +                        fs->upcall_events |=  GF_UPCALL_RECALL_LEASE; +                        ret |= GF_UPCALL_RECALL_LEASE;                  } -                  /* Override cbk function if existing */                  fs->up_cbk = cbk;                  fs->up_data = data;  | 
