dlm: interface for purge
David Teigland
maintainerPATCH 2/2 dlm: interface for purge
Add code to accept purge commands from userland.
Signed-off-by David Teigland <[email protected]>
fs/dlm/lock.h +2 -0
@@ -41,6 +41,8 @@ uint32_t flags, uint32_t lkid, char *lvb_in);int dlm_user_cancel (struct dlm_ls *ls,struct dlm_user_args *ua_tmp,uint32_t flags,uint32_t lkid); +int dlm_user_purge (struct dlm_ls *ls,struct dlm_user_proc *proc, +int nodeid,int pid);void dlm_clear_proc_locks (struct dlm_ls *ls,struct dlm_user_proc *proc);static inline int is_master (struct dlm_rsb *r)
fs/dlm/user.c +28 -0
@@ -56,6 +56,7 @@union {struct dlm_lock_params32 lock;struct dlm_lspace_params lspace; +struct dlm_purge_params purge; } i; };
@@ -92,6 +93,9 @@ kb->i.lspace.flags = kb32->i.lspace.flags; kb->i.lspace.minor = kb32->i.lspace.minor;strcpy (kb->i.lspace.name, kb32->i.lspace.name); + }else if (kb->cmd ==DLM_USER_PURGE ) { + kb->i.purge.nodeid = kb32->i.purge.nodeid; + kb->i.purge.pid = kb32->i.purge.pid; }else { kb->i.lock.mode = kb32->i.lock.mode; kb->i.lock.namelen = kb32->i.lock.namelen;
@@ -297,6 +301,22 @@return error; } +static int device_user_purge (struct dlm_user_proc *proc, +struct dlm_purge_params *params) +{ +struct dlm_ls *ls; +int error; + + ls =dlm_find_lockspace_local (proc->lockspace); +if (!ls) +return -ENOENT ; + + error =dlm_user_purge (ls, proc, params->nodeid, params->pid); + +dlm_put_lockspace (ls); +return error; +} +static int device_create_lockspace (struct dlm_lspace_params *params) {dlm_lockspace_t *lockspace;
@@ -508,6 +528,14 @@ error =device_remove_lockspace (&kbuf->i.lspace);break ; +case DLM_USER_PURGE : +if (!proc) { +log_print ("no locking on control device" ); + goto out_sig; + } + error =device_user_purge (proc, &kbuf->i.purge); +break ; +default :log_print ("Unknown command passed to DLM device : %d\n" , kbuf->cmd);
include/linux/dlm_device.h +8 -1
@@ -19,7 +19,7 @@/* Version of the device interface */ #define DLM_DEVICE_VERSION_MAJOR 5 -#define DLM_DEVICE_VERSION_MINOR 0 +#define DLM_DEVICE_VERSION_MINOR 1#define DLM_DEVICE_VERSION_PATCH 0/* struct passed to the lock write */
@@ -44,6 +44,11 @@char name[0 ]; }; +struct dlm_purge_params { +__u32 nodeid; +__u32 pid; +}; +struct dlm_write_request {__u32 version[3 ];__u8 cmd;
@@ -53,6 +58,7 @@union {struct dlm_lock_params lock;struct dlm_lspace_params lspace; +struct dlm_purge_params purge; } i; };
@@ -76,6 +82,7 @@#define DLM_USER_QUERY 3#define DLM_USER_CREATE_LOCKSPACE 4#define DLM_USER_REMOVE_LOCKSPACE 5 +#define DLM_USER_PURGE 6/* Arbitrary length restriction */ #define MAX_LS_NAME_LEN 64
Hi,
Now pushed to the -nmw git tree. Thanks,
Steve.
Quoted 118 lines · David Teigland
Add code to accept purge commands from userland.
Signed-off-by David Teigland <[email protected]>Index:
linux-2.6.21-rc5-quilt/fs/dlm/lock.h
===================================================================fs/dlm/lock.h +2
-0@@ -41,6 +41,8 @@ uint32_t flags, uint32_t lkid, char *lvb_in);int dlm_user_cancel (struct dlm_ls *ls,struct dlm_user_args *ua_tmp,uint32_t flags,uint32_t lkid); +int dlm_user_purge (struct dlm_ls *ls,struct dlm_user_proc *proc, +int nodeid,int pid);void dlm_clear_proc_locks (struct dlm_ls *ls,struct dlm_user_proc *proc);static inline int is_master (struct dlm_rsb *r)Index:
linux-2.6.21-rc5-quilt/fs/dlm/user.c
===================================================================fs/dlm/user.c +28
-0@@ -56,6 +56,7 @@union {struct dlm_lock_params32 lock;struct dlm_lspace_params lspace; +struct dlm_purge_params purge; } i; };@@ -92,6 +93,9 @@ kb->i.lspace.flags = kb32->i.lspace.flags; kb->i.lspace.minor = kb32->i.lspace.minor;strcpy (kb->i.lspace.name, kb32->i.lspace.name); + }else if (kb->cmd ==DLM_USER_PURGE ) { + kb->i.purge.nodeid = kb32->i.purge.nodeid; + kb->i.purge.pid = kb32->i.purge.pid; }else { kb->i.lock.mode = kb32->i.lock.mode; kb->i.lock.namelen = kb32->i.lock.namelen;@@ -297,6 +301,22 @@return error; } +static int device_user_purge (struct dlm_user_proc *proc, +struct dlm_purge_params *params) +{ +struct dlm_ls *ls; +int error; + + ls =dlm_find_lockspace_local (proc->lockspace); +if (!ls) +return -ENOENT ; + + error =dlm_user_purge (ls, proc, params->nodeid, params->pid); + +dlm_put_lockspace (ls); +return error; +} +static int device_create_lockspace (struct dlm_lspace_params *params) {dlm_lockspace_t *lockspace;@@ -508,6 +528,14 @@ error =device_remove_lockspace (&kbuf->i.lspace);break ; +case DLM_USER_PURGE : +if (!proc) { +log_print ("no locking on control device" ); + goto out_sig; + } + error =device_user_purge (proc, &kbuf->i.purge); +break ; +default :log_print ("Unknown command passed to DLM device : %d\n" , kbuf->cmd);Index:
linux-2.6.21-rc5-quilt/include/linux/dlm_device.h
===================================================================include/linux/dlm_device.h +8
-1@@ -19,7 +19,7 @@/* Version of the device interface */ #define DLM_DEVICE_VERSION_MAJOR 5 -#define DLM_DEVICE_VERSION_MINOR 0 +#define DLM_DEVICE_VERSION_MINOR 1#define DLM_DEVICE_VERSION_PATCH 0/* struct passed to the lock write */ @@ -44,6 +44,11 @@char name[0 ]; }; +struct dlm_purge_params { +__u32 nodeid; +__u32 pid; +}; +struct dlm_write_request {__u32 version[3 ];__u8 cmd;@@ -53,6 +58,7 @@union {struct dlm_lock_params lock;struct dlm_lspace_params lspace; +struct dlm_purge_params purge; } i; };@@ -76,6 +82,7 @@#define DLM_USER_QUERY 3#define DLM_USER_CREATE_LOCKSPACE 4#define DLM_USER_REMOVE_LOCKSPACE 5 +#define DLM_USER_PURGE 6/* Arbitrary length restriction */ #define MAX_LS_NAME_LEN 64