Loading fs/ocfs2/dlmglue.c +33 −0 Original line number Original line Diff line number Diff line Loading @@ -75,6 +75,8 @@ static void ocfs2_super_bast_func(void *opaque, int level); int level); static void ocfs2_rename_bast_func(void *opaque, static void ocfs2_rename_bast_func(void *opaque, int level); int level); static struct ocfs2_super *ocfs2_get_dentry_osb(struct ocfs2_lock_res *lockres); static struct ocfs2_super *ocfs2_get_inode_osb(struct ocfs2_lock_res *lockres); /* /* * Return value from ocfs2_convert_worker_t functions. * Return value from ocfs2_convert_worker_t functions. Loading Loading @@ -116,6 +118,11 @@ static void ocfs2_dentry_post_unlock(struct ocfs2_super *osb, * These fine tune the behavior of the generic dlmglue locking infrastructure. * These fine tune the behavior of the generic dlmglue locking infrastructure. */ */ struct ocfs2_lock_res_ops { struct ocfs2_lock_res_ops { /* * Translate an ocfs2_lock_res * into an ocfs2_super *. Define * this callback if ->l_priv is not an ocfs2_super pointer */ struct ocfs2_super * (*get_osb)(struct ocfs2_lock_res *); void (*bast)(void *, int); void (*bast)(void *, int); int (*unblock)(struct ocfs2_lock_res *, struct ocfs2_unblock_ctl *); int (*unblock)(struct ocfs2_lock_res *, struct ocfs2_unblock_ctl *); void (*post_unlock)(struct ocfs2_super *, struct ocfs2_lock_res *); void (*post_unlock)(struct ocfs2_super *, struct ocfs2_lock_res *); Loading Loading @@ -144,18 +151,21 @@ static int ocfs2_generic_unblock_lock(struct ocfs2_super *osb, ocfs2_convert_worker_t *worker); ocfs2_convert_worker_t *worker); static struct ocfs2_lock_res_ops ocfs2_inode_rw_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_rw_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_inode_lock, .unblock = ocfs2_unblock_inode_lock, .flags = 0, .flags = 0, }; }; static struct ocfs2_lock_res_ops ocfs2_inode_meta_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_meta_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_meta, .unblock = ocfs2_unblock_meta, .flags = LOCK_TYPE_REQUIRES_REFRESH, .flags = LOCK_TYPE_REQUIRES_REFRESH, }; }; static struct ocfs2_lock_res_ops ocfs2_inode_data_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_data_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_data, .unblock = ocfs2_unblock_data, .flags = 0, .flags = 0, Loading @@ -174,6 +184,7 @@ static struct ocfs2_lock_res_ops ocfs2_rename_lops = { }; }; static struct ocfs2_lock_res_ops ocfs2_dentry_lops = { static struct ocfs2_lock_res_ops ocfs2_dentry_lops = { .get_osb = ocfs2_get_dentry_osb, .bast = ocfs2_dentry_bast_func, .bast = ocfs2_dentry_bast_func, .unblock = ocfs2_unblock_dentry_lock, .unblock = ocfs2_unblock_dentry_lock, .post_unlock = ocfs2_dentry_post_unlock, .post_unlock = ocfs2_dentry_post_unlock, Loading Loading @@ -219,6 +230,14 @@ static inline struct ocfs2_dentry_lock *ocfs2_lock_res_dl(struct ocfs2_lock_res return (struct ocfs2_dentry_lock *)lockres->l_priv; return (struct ocfs2_dentry_lock *)lockres->l_priv; } } static inline struct ocfs2_super *ocfs2_get_lockres_osb(struct ocfs2_lock_res *lockres) { if (lockres->l_ops->get_osb) return lockres->l_ops->get_osb(lockres); return (struct ocfs2_super *)lockres->l_priv; } static int ocfs2_lock_create(struct ocfs2_super *osb, static int ocfs2_lock_create(struct ocfs2_super *osb, struct ocfs2_lock_res *lockres, struct ocfs2_lock_res *lockres, int level, int level, Loading Loading @@ -352,6 +371,13 @@ void ocfs2_inode_lock_res_init(struct ocfs2_lock_res *res, ocfs2_lock_res_init_common(OCFS2_SB(inode->i_sb), res, type, ops, inode); ocfs2_lock_res_init_common(OCFS2_SB(inode->i_sb), res, type, ops, inode); } } static struct ocfs2_super *ocfs2_get_inode_osb(struct ocfs2_lock_res *lockres) { struct inode *inode = ocfs2_lock_res_inode(lockres); return OCFS2_SB(inode->i_sb); } static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) { { __be64 inode_blkno_be; __be64 inode_blkno_be; Loading @@ -362,6 +388,13 @@ static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) return be64_to_cpu(inode_blkno_be); return be64_to_cpu(inode_blkno_be); } } static struct ocfs2_super *ocfs2_get_dentry_osb(struct ocfs2_lock_res *lockres) { struct ocfs2_dentry_lock *dl = lockres->l_priv; return OCFS2_SB(dl->dl_inode->i_sb); } void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl, void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl, u64 parent, struct inode *inode) u64 parent, struct inode *inode) { { Loading Loading
fs/ocfs2/dlmglue.c +33 −0 Original line number Original line Diff line number Diff line Loading @@ -75,6 +75,8 @@ static void ocfs2_super_bast_func(void *opaque, int level); int level); static void ocfs2_rename_bast_func(void *opaque, static void ocfs2_rename_bast_func(void *opaque, int level); int level); static struct ocfs2_super *ocfs2_get_dentry_osb(struct ocfs2_lock_res *lockres); static struct ocfs2_super *ocfs2_get_inode_osb(struct ocfs2_lock_res *lockres); /* /* * Return value from ocfs2_convert_worker_t functions. * Return value from ocfs2_convert_worker_t functions. Loading Loading @@ -116,6 +118,11 @@ static void ocfs2_dentry_post_unlock(struct ocfs2_super *osb, * These fine tune the behavior of the generic dlmglue locking infrastructure. * These fine tune the behavior of the generic dlmglue locking infrastructure. */ */ struct ocfs2_lock_res_ops { struct ocfs2_lock_res_ops { /* * Translate an ocfs2_lock_res * into an ocfs2_super *. Define * this callback if ->l_priv is not an ocfs2_super pointer */ struct ocfs2_super * (*get_osb)(struct ocfs2_lock_res *); void (*bast)(void *, int); void (*bast)(void *, int); int (*unblock)(struct ocfs2_lock_res *, struct ocfs2_unblock_ctl *); int (*unblock)(struct ocfs2_lock_res *, struct ocfs2_unblock_ctl *); void (*post_unlock)(struct ocfs2_super *, struct ocfs2_lock_res *); void (*post_unlock)(struct ocfs2_super *, struct ocfs2_lock_res *); Loading Loading @@ -144,18 +151,21 @@ static int ocfs2_generic_unblock_lock(struct ocfs2_super *osb, ocfs2_convert_worker_t *worker); ocfs2_convert_worker_t *worker); static struct ocfs2_lock_res_ops ocfs2_inode_rw_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_rw_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_inode_lock, .unblock = ocfs2_unblock_inode_lock, .flags = 0, .flags = 0, }; }; static struct ocfs2_lock_res_ops ocfs2_inode_meta_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_meta_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_meta, .unblock = ocfs2_unblock_meta, .flags = LOCK_TYPE_REQUIRES_REFRESH, .flags = LOCK_TYPE_REQUIRES_REFRESH, }; }; static struct ocfs2_lock_res_ops ocfs2_inode_data_lops = { static struct ocfs2_lock_res_ops ocfs2_inode_data_lops = { .get_osb = ocfs2_get_inode_osb, .bast = ocfs2_inode_bast_func, .bast = ocfs2_inode_bast_func, .unblock = ocfs2_unblock_data, .unblock = ocfs2_unblock_data, .flags = 0, .flags = 0, Loading @@ -174,6 +184,7 @@ static struct ocfs2_lock_res_ops ocfs2_rename_lops = { }; }; static struct ocfs2_lock_res_ops ocfs2_dentry_lops = { static struct ocfs2_lock_res_ops ocfs2_dentry_lops = { .get_osb = ocfs2_get_dentry_osb, .bast = ocfs2_dentry_bast_func, .bast = ocfs2_dentry_bast_func, .unblock = ocfs2_unblock_dentry_lock, .unblock = ocfs2_unblock_dentry_lock, .post_unlock = ocfs2_dentry_post_unlock, .post_unlock = ocfs2_dentry_post_unlock, Loading Loading @@ -219,6 +230,14 @@ static inline struct ocfs2_dentry_lock *ocfs2_lock_res_dl(struct ocfs2_lock_res return (struct ocfs2_dentry_lock *)lockres->l_priv; return (struct ocfs2_dentry_lock *)lockres->l_priv; } } static inline struct ocfs2_super *ocfs2_get_lockres_osb(struct ocfs2_lock_res *lockres) { if (lockres->l_ops->get_osb) return lockres->l_ops->get_osb(lockres); return (struct ocfs2_super *)lockres->l_priv; } static int ocfs2_lock_create(struct ocfs2_super *osb, static int ocfs2_lock_create(struct ocfs2_super *osb, struct ocfs2_lock_res *lockres, struct ocfs2_lock_res *lockres, int level, int level, Loading Loading @@ -352,6 +371,13 @@ void ocfs2_inode_lock_res_init(struct ocfs2_lock_res *res, ocfs2_lock_res_init_common(OCFS2_SB(inode->i_sb), res, type, ops, inode); ocfs2_lock_res_init_common(OCFS2_SB(inode->i_sb), res, type, ops, inode); } } static struct ocfs2_super *ocfs2_get_inode_osb(struct ocfs2_lock_res *lockres) { struct inode *inode = ocfs2_lock_res_inode(lockres); return OCFS2_SB(inode->i_sb); } static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) { { __be64 inode_blkno_be; __be64 inode_blkno_be; Loading @@ -362,6 +388,13 @@ static __u64 ocfs2_get_dentry_lock_ino(struct ocfs2_lock_res *lockres) return be64_to_cpu(inode_blkno_be); return be64_to_cpu(inode_blkno_be); } } static struct ocfs2_super *ocfs2_get_dentry_osb(struct ocfs2_lock_res *lockres) { struct ocfs2_dentry_lock *dl = lockres->l_priv; return OCFS2_SB(dl->dl_inode->i_sb); } void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl, void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl, u64 parent, struct inode *inode) u64 parent, struct inode *inode) { { Loading