1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2006-2010 Red Hat, Inc. All rights reserved.
6 #include <linux/miscdevice.h>
7 #include <linux/init.h>
8 #include <linux/wait.h>
9 #include <linux/file.h>
11 #include <linux/poll.h>
12 #include <linux/signal.h>
13 #include <linux/spinlock.h>
14 #include <linux/dlm.h>
15 #include <linux/dlm_device.h>
16 #include <linux/slab.h>
17 #include <linux/sched/signal.h>
19 #include <trace/events/dlm.h>
21 #include "dlm_internal.h"
22 #include "lockspace.h"
24 #include "lvb_table.h"
29 static const char name_prefix[] = "dlm";
30 static const struct file_operations device_fops;
31 static atomic_t dlm_monitor_opened;
32 static int dlm_monitor_unused = 1;
36 struct dlm_lock_params32 {
50 char lvb[DLM_USER_LVB_LEN];
54 struct dlm_write_request32 {
61 struct dlm_lock_params32 lock;
62 struct dlm_lspace_params lspace;
63 struct dlm_purge_params purge;
74 struct dlm_lock_result32 {
80 struct dlm_lksb32 lksb;
83 /* Offsets may be zero if no data is present */
87 static void compat_input(struct dlm_write_request *kb,
88 struct dlm_write_request32 *kb32,
91 kb->version[0] = kb32->version[0];
92 kb->version[1] = kb32->version[1];
93 kb->version[2] = kb32->version[2];
96 kb->is64bit = kb32->is64bit;
97 if (kb->cmd == DLM_USER_CREATE_LOCKSPACE ||
98 kb->cmd == DLM_USER_REMOVE_LOCKSPACE) {
99 kb->i.lspace.flags = kb32->i.lspace.flags;
100 kb->i.lspace.minor = kb32->i.lspace.minor;
101 memcpy(kb->i.lspace.name, kb32->i.lspace.name, namelen);
102 } else if (kb->cmd == DLM_USER_PURGE) {
103 kb->i.purge.nodeid = kb32->i.purge.nodeid;
104 kb->i.purge.pid = kb32->i.purge.pid;
106 kb->i.lock.mode = kb32->i.lock.mode;
107 kb->i.lock.namelen = kb32->i.lock.namelen;
108 kb->i.lock.flags = kb32->i.lock.flags;
109 kb->i.lock.lkid = kb32->i.lock.lkid;
110 kb->i.lock.parent = kb32->i.lock.parent;
111 kb->i.lock.xid = kb32->i.lock.xid;
112 kb->i.lock.timeout = kb32->i.lock.timeout;
113 kb->i.lock.castparam = (__user void *)(long)kb32->i.lock.castparam;
114 kb->i.lock.castaddr = (__user void *)(long)kb32->i.lock.castaddr;
115 kb->i.lock.bastparam = (__user void *)(long)kb32->i.lock.bastparam;
116 kb->i.lock.bastaddr = (__user void *)(long)kb32->i.lock.bastaddr;
117 kb->i.lock.lksb = (__user void *)(long)kb32->i.lock.lksb;
118 memcpy(kb->i.lock.lvb, kb32->i.lock.lvb, DLM_USER_LVB_LEN);
119 memcpy(kb->i.lock.name, kb32->i.lock.name, namelen);
123 static void compat_output(struct dlm_lock_result *res,
124 struct dlm_lock_result32 *res32)
126 memset(res32, 0, sizeof(*res32));
128 res32->version[0] = res->version[0];
129 res32->version[1] = res->version[1];
130 res32->version[2] = res->version[2];
132 res32->user_astaddr = (__u32)(__force long)res->user_astaddr;
133 res32->user_astparam = (__u32)(__force long)res->user_astparam;
134 res32->user_lksb = (__u32)(__force long)res->user_lksb;
135 res32->bast_mode = res->bast_mode;
137 res32->lvb_offset = res->lvb_offset;
138 res32->length = res->length;
140 res32->lksb.sb_status = res->lksb.sb_status;
141 res32->lksb.sb_flags = res->lksb.sb_flags;
142 res32->lksb.sb_lkid = res->lksb.sb_lkid;
143 res32->lksb.sb_lvbptr = (__u32)(long)res->lksb.sb_lvbptr;
147 /* Figure out if this lock is at the end of its life and no longer
148 available for the application to use. The lkb still exists until
149 the final ast is read. A lock becomes EOL in three situations:
150 1. a noqueue request fails with EAGAIN
151 2. an unlock completes with EUNLOCK
152 3. a cancel of a waiting request completes with ECANCEL/EDEADLK
153 An EOL lock needs to be removed from the process's list of locks.
154 And we can't allow any new operation on an EOL lock. This is
155 not related to the lifetime of the lkb struct which is managed
156 entirely by refcount. */
158 static int lkb_is_endoflife(int mode, int status)
167 if (mode == DLM_LOCK_IV)
174 /* we could possibly check if the cancel of an orphan has resulted in the lkb
175 being removed and then remove that lkb from the orphans list and free it */
177 void dlm_user_add_ast(struct dlm_lkb *lkb, uint32_t flags, int mode,
178 int status, uint32_t sbflags, uint64_t seq)
181 struct dlm_user_args *ua;
182 struct dlm_user_proc *proc;
185 if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD))
188 ls = lkb->lkb_resource->res_ls;
189 spin_lock(&ls->ls_clear_proc_locks);
191 /* If ORPHAN/DEAD flag is set, it means the process is dead so an ast
192 can't be delivered. For ORPHAN's, dlm_clear_proc_locks() freed
193 lkb->ua so we can't try to use it. This second check is necessary
194 for cases where a completion ast is received for an operation that
195 began before clear_proc_locks did its cancel/unlock. */
197 if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD))
200 DLM_ASSERT(lkb->lkb_ua, dlm_print_lkb(lkb););
204 if ((flags & DLM_CB_BAST) && ua->bastaddr == NULL)
207 if ((flags & DLM_CB_CAST) && lkb_is_endoflife(mode, status))
208 lkb->lkb_flags |= DLM_IFL_ENDOFLIFE;
210 spin_lock(&proc->asts_spin);
212 rv = dlm_add_lkb_callback(lkb, flags, mode, status, sbflags, seq);
214 spin_unlock(&proc->asts_spin);
218 if (list_empty(&lkb->lkb_cb_list)) {
219 kref_get(&lkb->lkb_ref);
220 list_add_tail(&lkb->lkb_cb_list, &proc->asts);
221 wake_up_interruptible(&proc->wait);
223 spin_unlock(&proc->asts_spin);
225 if (lkb->lkb_flags & DLM_IFL_ENDOFLIFE) {
226 /* N.B. spin_lock locks_spin, not asts_spin */
227 spin_lock(&proc->locks_spin);
228 if (!list_empty(&lkb->lkb_ownqueue)) {
229 list_del_init(&lkb->lkb_ownqueue);
232 spin_unlock(&proc->locks_spin);
235 spin_unlock(&ls->ls_clear_proc_locks);
238 static int device_user_lock(struct dlm_user_proc *proc,
239 struct dlm_lock_params *params)
242 struct dlm_user_args *ua;
246 ls = dlm_find_lockspace_local(proc->lockspace);
250 if (!params->castaddr || !params->lksb) {
255 #ifdef CONFIG_DLM_DEPRECATED_API
257 pr_warn_once("========================================================\n"
258 "WARNING: the lkb timeout feature is being deprecated and\n"
259 " will be removed in v6.2!\n"
260 "========================================================\n");
263 ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
267 ua->user_lksb = params->lksb;
268 ua->castparam = params->castparam;
269 ua->castaddr = params->castaddr;
270 ua->bastparam = params->bastparam;
271 ua->bastaddr = params->bastaddr;
272 ua->xid = params->xid;
274 if (params->flags & DLM_LKF_CONVERT) {
275 #ifdef CONFIG_DLM_DEPRECATED_API
276 error = dlm_user_convert(ls, ua,
277 params->mode, params->flags,
278 params->lkid, params->lvb,
279 (unsigned long) params->timeout);
281 error = dlm_user_convert(ls, ua,
282 params->mode, params->flags,
283 params->lkid, params->lvb);
285 } else if (params->flags & DLM_LKF_ORPHAN) {
286 error = dlm_user_adopt_orphan(ls, ua,
287 params->mode, params->flags,
288 params->name, params->namelen,
293 #ifdef CONFIG_DLM_DEPRECATED_API
294 error = dlm_user_request(ls, ua,
295 params->mode, params->flags,
296 params->name, params->namelen,
297 (unsigned long) params->timeout);
299 error = dlm_user_request(ls, ua,
300 params->mode, params->flags,
301 params->name, params->namelen);
304 error = ua->lksb.sb_lkid;
307 dlm_put_lockspace(ls);
311 static int device_user_unlock(struct dlm_user_proc *proc,
312 struct dlm_lock_params *params)
315 struct dlm_user_args *ua;
318 ls = dlm_find_lockspace_local(proc->lockspace);
322 ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
326 ua->user_lksb = params->lksb;
327 ua->castparam = params->castparam;
328 ua->castaddr = params->castaddr;
330 if (params->flags & DLM_LKF_CANCEL)
331 error = dlm_user_cancel(ls, ua, params->flags, params->lkid);
333 error = dlm_user_unlock(ls, ua, params->flags, params->lkid,
336 dlm_put_lockspace(ls);
340 static int device_user_deadlock(struct dlm_user_proc *proc,
341 struct dlm_lock_params *params)
346 ls = dlm_find_lockspace_local(proc->lockspace);
350 error = dlm_user_deadlock(ls, params->flags, params->lkid);
352 dlm_put_lockspace(ls);
356 static int dlm_device_register(struct dlm_ls *ls, char *name)
360 /* The device is already registered. This happens when the
361 lockspace is created multiple times from userspace. */
362 if (ls->ls_device.name)
366 len = strlen(name) + strlen(name_prefix) + 2;
367 ls->ls_device.name = kzalloc(len, GFP_NOFS);
368 if (!ls->ls_device.name)
371 snprintf((char *)ls->ls_device.name, len, "%s_%s", name_prefix,
373 ls->ls_device.fops = &device_fops;
374 ls->ls_device.minor = MISC_DYNAMIC_MINOR;
376 error = misc_register(&ls->ls_device);
378 kfree(ls->ls_device.name);
379 /* this has to be set to NULL
380 * to avoid a double-free in dlm_device_deregister
382 ls->ls_device.name = NULL;
388 int dlm_device_deregister(struct dlm_ls *ls)
390 /* The device is not registered. This happens when the lockspace
391 was never used from userspace, or when device_create_lockspace()
392 calls dlm_release_lockspace() after the register fails. */
393 if (!ls->ls_device.name)
396 misc_deregister(&ls->ls_device);
397 kfree(ls->ls_device.name);
401 static int device_user_purge(struct dlm_user_proc *proc,
402 struct dlm_purge_params *params)
407 ls = dlm_find_lockspace_local(proc->lockspace);
411 error = dlm_user_purge(ls, proc, params->nodeid, params->pid);
413 dlm_put_lockspace(ls);
417 static int device_create_lockspace(struct dlm_lspace_params *params)
419 dlm_lockspace_t *lockspace;
423 if (!capable(CAP_SYS_ADMIN))
426 error = dlm_new_user_lockspace(params->name, dlm_config.ci_cluster_name,
427 params->flags, DLM_USER_LVB_LEN, NULL,
428 NULL, NULL, &lockspace);
432 ls = dlm_find_lockspace_local(lockspace);
436 error = dlm_device_register(ls, params->name);
437 dlm_put_lockspace(ls);
440 dlm_release_lockspace(lockspace, 0);
442 error = ls->ls_device.minor;
447 static int device_remove_lockspace(struct dlm_lspace_params *params)
449 dlm_lockspace_t *lockspace;
451 int error, force = 0;
453 if (!capable(CAP_SYS_ADMIN))
456 ls = dlm_find_lockspace_device(params->minor);
460 if (params->flags & DLM_USER_LSFLG_FORCEFREE)
463 lockspace = ls->ls_local_handle;
464 dlm_put_lockspace(ls);
466 /* The final dlm_release_lockspace waits for references to go to
467 zero, so all processes will need to close their device for the
468 ls before the release will proceed. release also calls the
469 device_deregister above. Converting a positive return value
470 from release to zero means that userspace won't know when its
471 release was the final one, but it shouldn't need to know. */
473 error = dlm_release_lockspace(lockspace, force);
479 /* Check the user's version matches ours */
480 static int check_version(struct dlm_write_request *req)
482 if (req->version[0] != DLM_DEVICE_VERSION_MAJOR ||
483 (req->version[0] == DLM_DEVICE_VERSION_MAJOR &&
484 req->version[1] > DLM_DEVICE_VERSION_MINOR)) {
486 printk(KERN_DEBUG "dlm: process %s (%d) version mismatch "
487 "user (%d.%d.%d) kernel (%d.%d.%d)\n",
489 task_pid_nr(current),
493 DLM_DEVICE_VERSION_MAJOR,
494 DLM_DEVICE_VERSION_MINOR,
495 DLM_DEVICE_VERSION_PATCH);
505 * dlm_user_request -> request_lock
506 * dlm_user_convert -> convert_lock
509 * dlm_user_unlock -> unlock_lock
510 * dlm_user_cancel -> cancel_lock
512 * device_create_lockspace
515 * device_remove_lockspace
516 * dlm_release_lockspace
519 /* a write to a lockspace device is a lock or unlock request, a write
520 to the control device is to create/remove a lockspace */
522 static ssize_t device_write(struct file *file, const char __user *buf,
523 size_t count, loff_t *ppos)
525 struct dlm_user_proc *proc = file->private_data;
526 struct dlm_write_request *kbuf;
530 if (count < sizeof(struct dlm_write_request32))
532 if (count < sizeof(struct dlm_write_request))
537 * can't compare against COMPAT/dlm_write_request32 because
538 * we don't yet know if is64bit is zero
540 if (count > sizeof(struct dlm_write_request) + DLM_RESNAME_MAXLEN)
543 kbuf = memdup_user_nul(buf, count);
545 return PTR_ERR(kbuf);
547 if (check_version(kbuf)) {
553 if (!kbuf->is64bit) {
554 struct dlm_write_request32 *k32buf;
557 if (count > sizeof(struct dlm_write_request32))
558 namelen = count - sizeof(struct dlm_write_request32);
560 k32buf = (struct dlm_write_request32 *)kbuf;
562 /* add 1 after namelen so that the name string is terminated */
563 kbuf = kzalloc(sizeof(struct dlm_write_request) + namelen + 1,
571 set_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags);
573 compat_input(kbuf, k32buf, namelen);
578 /* do we really need this? can a write happen after a close? */
579 if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) &&
580 (proc && test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))) {
591 log_print("no locking on control device");
594 error = device_user_lock(proc, &kbuf->i.lock);
597 case DLM_USER_UNLOCK:
599 log_print("no locking on control device");
602 error = device_user_unlock(proc, &kbuf->i.lock);
605 case DLM_USER_DEADLOCK:
607 log_print("no locking on control device");
610 error = device_user_deadlock(proc, &kbuf->i.lock);
613 case DLM_USER_CREATE_LOCKSPACE:
615 log_print("create/remove only on control device");
618 error = device_create_lockspace(&kbuf->i.lspace);
621 case DLM_USER_REMOVE_LOCKSPACE:
623 log_print("create/remove only on control device");
626 error = device_remove_lockspace(&kbuf->i.lspace);
631 log_print("no locking on control device");
634 error = device_user_purge(proc, &kbuf->i.purge);
638 log_print("Unknown command passed to DLM device : %d\n",
647 /* Every process that opens the lockspace device has its own "proc" structure
648 hanging off the open file that's used to keep track of locks owned by the
649 process and asts that need to be delivered to the process. */
651 static int device_open(struct inode *inode, struct file *file)
653 struct dlm_user_proc *proc;
656 ls = dlm_find_lockspace_device(iminor(inode));
660 proc = kzalloc(sizeof(struct dlm_user_proc), GFP_NOFS);
662 dlm_put_lockspace(ls);
666 proc->lockspace = ls->ls_local_handle;
667 INIT_LIST_HEAD(&proc->asts);
668 INIT_LIST_HEAD(&proc->locks);
669 INIT_LIST_HEAD(&proc->unlocking);
670 spin_lock_init(&proc->asts_spin);
671 spin_lock_init(&proc->locks_spin);
672 init_waitqueue_head(&proc->wait);
673 file->private_data = proc;
678 static int device_close(struct inode *inode, struct file *file)
680 struct dlm_user_proc *proc = file->private_data;
683 ls = dlm_find_lockspace_local(proc->lockspace);
687 set_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags);
689 dlm_clear_proc_locks(ls, proc);
691 /* at this point no more lkb's should exist for this lockspace,
692 so there's no chance of dlm_user_add_ast() being called and
693 looking for lkb->ua->proc */
696 file->private_data = NULL;
698 dlm_put_lockspace(ls);
699 dlm_put_lockspace(ls); /* for the find in device_open() */
701 /* FIXME: AUTOFREE: if this ls is no longer used do
702 device_remove_lockspace() */
707 static int copy_result_to_user(struct dlm_user_args *ua, int compat,
708 uint32_t flags, int mode, int copy_lvb,
709 char __user *buf, size_t count)
712 struct dlm_lock_result32 result32;
714 struct dlm_lock_result result;
720 memset(&result, 0, sizeof(struct dlm_lock_result));
721 result.version[0] = DLM_DEVICE_VERSION_MAJOR;
722 result.version[1] = DLM_DEVICE_VERSION_MINOR;
723 result.version[2] = DLM_DEVICE_VERSION_PATCH;
724 memcpy(&result.lksb, &ua->lksb, offsetof(struct dlm_lksb, sb_lvbptr));
725 result.user_lksb = ua->user_lksb;
727 /* FIXME: dlm1 provides for the user's bastparam/addr to not be updated
728 in a conversion unless the conversion is successful. See code
729 in dlm_user_convert() for updating ua from ua_tmp. OpenVMS, though,
730 notes that a new blocking AST address and parameter are set even if
731 the conversion fails, so maybe we should just do that. */
733 if (flags & DLM_CB_BAST) {
734 result.user_astaddr = ua->bastaddr;
735 result.user_astparam = ua->bastparam;
736 result.bast_mode = mode;
738 result.user_astaddr = ua->castaddr;
739 result.user_astparam = ua->castparam;
744 len = sizeof(struct dlm_lock_result32);
747 len = sizeof(struct dlm_lock_result);
750 /* copy lvb to userspace if there is one, it's been updated, and
751 the user buffer has space for it */
753 if (copy_lvb && ua->lksb.sb_lvbptr && count >= len + DLM_USER_LVB_LEN) {
754 if (copy_to_user(buf+len, ua->lksb.sb_lvbptr,
760 result.lvb_offset = len;
761 len += DLM_USER_LVB_LEN;
768 compat_output(&result, &result32);
769 resultptr = &result32;
773 if (copy_to_user(buf, resultptr, struct_len))
781 static int copy_version_to_user(char __user *buf, size_t count)
783 struct dlm_device_version ver;
785 memset(&ver, 0, sizeof(struct dlm_device_version));
786 ver.version[0] = DLM_DEVICE_VERSION_MAJOR;
787 ver.version[1] = DLM_DEVICE_VERSION_MINOR;
788 ver.version[2] = DLM_DEVICE_VERSION_PATCH;
790 if (copy_to_user(buf, &ver, sizeof(struct dlm_device_version)))
792 return sizeof(struct dlm_device_version);
795 /* a read returns a single ast described in a struct dlm_lock_result */
797 static ssize_t device_read(struct file *file, char __user *buf, size_t count,
800 struct dlm_user_proc *proc = file->private_data;
802 DECLARE_WAITQUEUE(wait, current);
803 struct dlm_callback cb;
804 int rv, resid, copy_lvb = 0;
805 int old_mode, new_mode;
807 if (count == sizeof(struct dlm_device_version)) {
808 rv = copy_version_to_user(buf, count);
813 log_print("non-version read from control device %zu", count);
818 if (count < sizeof(struct dlm_lock_result32))
820 if (count < sizeof(struct dlm_lock_result))
826 /* do we really need this? can a read happen after a close? */
827 if (test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))
830 spin_lock(&proc->asts_spin);
831 if (list_empty(&proc->asts)) {
832 if (file->f_flags & O_NONBLOCK) {
833 spin_unlock(&proc->asts_spin);
837 add_wait_queue(&proc->wait, &wait);
840 set_current_state(TASK_INTERRUPTIBLE);
841 if (list_empty(&proc->asts) && !signal_pending(current)) {
842 spin_unlock(&proc->asts_spin);
844 spin_lock(&proc->asts_spin);
847 set_current_state(TASK_RUNNING);
848 remove_wait_queue(&proc->wait, &wait);
850 if (signal_pending(current)) {
851 spin_unlock(&proc->asts_spin);
856 /* if we empty lkb_callbacks, we don't want to unlock the spinlock
857 without removing lkb_cb_list; so empty lkb_cb_list is always
858 consistent with empty lkb_callbacks */
860 lkb = list_entry(proc->asts.next, struct dlm_lkb, lkb_cb_list);
862 /* rem_lkb_callback sets a new lkb_last_cast */
863 old_mode = lkb->lkb_last_cast.mode;
865 rv = dlm_rem_lkb_callback(lkb->lkb_resource->res_ls, lkb, &cb, &resid);
867 /* this shouldn't happen; lkb should have been removed from
868 list when resid was zero */
869 log_print("dlm_rem_lkb_callback empty %x", lkb->lkb_id);
870 list_del_init(&lkb->lkb_cb_list);
871 spin_unlock(&proc->asts_spin);
872 /* removes ref for proc->asts, may cause lkb to be freed */
877 list_del_init(&lkb->lkb_cb_list);
878 spin_unlock(&proc->asts_spin);
880 if (cb.flags & DLM_CB_SKIP) {
881 /* removes ref for proc->asts, may cause lkb to be freed */
887 if (cb.flags & DLM_CB_BAST) {
888 trace_dlm_bast(lkb->lkb_resource->res_ls, lkb, cb.mode);
889 } else if (cb.flags & DLM_CB_CAST) {
892 if (!cb.sb_status && lkb->lkb_lksb->sb_lvbptr &&
893 dlm_lvb_operations[old_mode + 1][new_mode + 1])
896 lkb->lkb_lksb->sb_status = cb.sb_status;
897 lkb->lkb_lksb->sb_flags = cb.sb_flags;
898 trace_dlm_ast(lkb->lkb_resource->res_ls, lkb);
901 rv = copy_result_to_user(lkb->lkb_ua,
902 test_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags),
903 cb.flags, cb.mode, copy_lvb, buf, count);
905 /* removes ref for proc->asts, may cause lkb to be freed */
912 static __poll_t device_poll(struct file *file, poll_table *wait)
914 struct dlm_user_proc *proc = file->private_data;
916 poll_wait(file, &proc->wait, wait);
918 spin_lock(&proc->asts_spin);
919 if (!list_empty(&proc->asts)) {
920 spin_unlock(&proc->asts_spin);
921 return EPOLLIN | EPOLLRDNORM;
923 spin_unlock(&proc->asts_spin);
927 int dlm_user_daemon_available(void)
929 /* dlm_controld hasn't started (or, has started, but not
930 properly populated configfs) */
932 if (!dlm_our_nodeid())
935 /* This is to deal with versions of dlm_controld that don't
936 know about the monitor device. We assume that if the
937 dlm_controld was started (above), but the monitor device
938 was never opened, that it's an old version. dlm_controld
939 should open the monitor device before populating configfs. */
941 if (dlm_monitor_unused)
944 return atomic_read(&dlm_monitor_opened) ? 1 : 0;
947 static int ctl_device_open(struct inode *inode, struct file *file)
949 file->private_data = NULL;
953 static int ctl_device_close(struct inode *inode, struct file *file)
958 static int monitor_device_open(struct inode *inode, struct file *file)
960 atomic_inc(&dlm_monitor_opened);
961 dlm_monitor_unused = 0;
965 static int monitor_device_close(struct inode *inode, struct file *file)
967 if (atomic_dec_and_test(&dlm_monitor_opened))
968 dlm_stop_lockspaces();
972 static const struct file_operations device_fops = {
974 .release = device_close,
976 .write = device_write,
978 .owner = THIS_MODULE,
979 .llseek = noop_llseek,
982 static const struct file_operations ctl_device_fops = {
983 .open = ctl_device_open,
984 .release = ctl_device_close,
986 .write = device_write,
987 .owner = THIS_MODULE,
988 .llseek = noop_llseek,
991 static struct miscdevice ctl_device = {
992 .name = "dlm-control",
993 .fops = &ctl_device_fops,
994 .minor = MISC_DYNAMIC_MINOR,
997 static const struct file_operations monitor_device_fops = {
998 .open = monitor_device_open,
999 .release = monitor_device_close,
1000 .owner = THIS_MODULE,
1001 .llseek = noop_llseek,
1004 static struct miscdevice monitor_device = {
1005 .name = "dlm-monitor",
1006 .fops = &monitor_device_fops,
1007 .minor = MISC_DYNAMIC_MINOR,
1010 int __init dlm_user_init(void)
1014 atomic_set(&dlm_monitor_opened, 0);
1016 error = misc_register(&ctl_device);
1018 log_print("misc_register failed for control device");
1022 error = misc_register(&monitor_device);
1024 log_print("misc_register failed for monitor device");
1025 misc_deregister(&ctl_device);
1031 void dlm_user_exit(void)
1033 misc_deregister(&ctl_device);
1034 misc_deregister(&monitor_device);