xref: /openbmc/linux/fs/dlm/user.c (revision 6726d552)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2006-2010 Red Hat, Inc.  All rights reserved.
4  */
5 
6 #include <linux/miscdevice.h>
7 #include <linux/init.h>
8 #include <linux/wait.h>
9 #include <linux/file.h>
10 #include <linux/fs.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>
18 
19 #include "dlm_internal.h"
20 #include "lockspace.h"
21 #include "lock.h"
22 #include "lvb_table.h"
23 #include "user.h"
24 #include "ast.h"
25 #include "config.h"
26 
27 static const char name_prefix[] = "dlm";
28 static const struct file_operations device_fops;
29 static atomic_t dlm_monitor_opened;
30 static int dlm_monitor_unused = 1;
31 
32 #ifdef CONFIG_COMPAT
33 
34 struct dlm_lock_params32 {
35 	__u8 mode;
36 	__u8 namelen;
37 	__u16 unused;
38 	__u32 flags;
39 	__u32 lkid;
40 	__u32 parent;
41 	__u64 xid;
42 	__u64 timeout;
43 	__u32 castparam;
44 	__u32 castaddr;
45 	__u32 bastparam;
46 	__u32 bastaddr;
47 	__u32 lksb;
48 	char lvb[DLM_USER_LVB_LEN];
49 	char name[];
50 };
51 
52 struct dlm_write_request32 {
53 	__u32 version[3];
54 	__u8 cmd;
55 	__u8 is64bit;
56 	__u8 unused[2];
57 
58 	union  {
59 		struct dlm_lock_params32 lock;
60 		struct dlm_lspace_params lspace;
61 		struct dlm_purge_params purge;
62 	} i;
63 };
64 
65 struct dlm_lksb32 {
66 	__u32 sb_status;
67 	__u32 sb_lkid;
68 	__u8 sb_flags;
69 	__u32 sb_lvbptr;
70 };
71 
72 struct dlm_lock_result32 {
73 	__u32 version[3];
74 	__u32 length;
75 	__u32 user_astaddr;
76 	__u32 user_astparam;
77 	__u32 user_lksb;
78 	struct dlm_lksb32 lksb;
79 	__u8 bast_mode;
80 	__u8 unused[3];
81 	/* Offsets may be zero if no data is present */
82 	__u32 lvb_offset;
83 };
84 
85 static void compat_input(struct dlm_write_request *kb,
86 			 struct dlm_write_request32 *kb32,
87 			 int namelen)
88 {
89 	kb->version[0] = kb32->version[0];
90 	kb->version[1] = kb32->version[1];
91 	kb->version[2] = kb32->version[2];
92 
93 	kb->cmd = kb32->cmd;
94 	kb->is64bit = kb32->is64bit;
95 	if (kb->cmd == DLM_USER_CREATE_LOCKSPACE ||
96 	    kb->cmd == DLM_USER_REMOVE_LOCKSPACE) {
97 		kb->i.lspace.flags = kb32->i.lspace.flags;
98 		kb->i.lspace.minor = kb32->i.lspace.minor;
99 		memcpy(kb->i.lspace.name, kb32->i.lspace.name, namelen);
100 	} else if (kb->cmd == DLM_USER_PURGE) {
101 		kb->i.purge.nodeid = kb32->i.purge.nodeid;
102 		kb->i.purge.pid = kb32->i.purge.pid;
103 	} else {
104 		kb->i.lock.mode = kb32->i.lock.mode;
105 		kb->i.lock.namelen = kb32->i.lock.namelen;
106 		kb->i.lock.flags = kb32->i.lock.flags;
107 		kb->i.lock.lkid = kb32->i.lock.lkid;
108 		kb->i.lock.parent = kb32->i.lock.parent;
109 		kb->i.lock.xid = kb32->i.lock.xid;
110 		kb->i.lock.timeout = kb32->i.lock.timeout;
111 		kb->i.lock.castparam = (__user void *)(long)kb32->i.lock.castparam;
112 		kb->i.lock.castaddr = (__user void *)(long)kb32->i.lock.castaddr;
113 		kb->i.lock.bastparam = (__user void *)(long)kb32->i.lock.bastparam;
114 		kb->i.lock.bastaddr = (__user void *)(long)kb32->i.lock.bastaddr;
115 		kb->i.lock.lksb = (__user void *)(long)kb32->i.lock.lksb;
116 		memcpy(kb->i.lock.lvb, kb32->i.lock.lvb, DLM_USER_LVB_LEN);
117 		memcpy(kb->i.lock.name, kb32->i.lock.name, namelen);
118 	}
119 }
120 
121 static void compat_output(struct dlm_lock_result *res,
122 			  struct dlm_lock_result32 *res32)
123 {
124 	memset(res32, 0, sizeof(*res32));
125 
126 	res32->version[0] = res->version[0];
127 	res32->version[1] = res->version[1];
128 	res32->version[2] = res->version[2];
129 
130 	res32->user_astaddr = (__u32)(__force long)res->user_astaddr;
131 	res32->user_astparam = (__u32)(__force long)res->user_astparam;
132 	res32->user_lksb = (__u32)(__force long)res->user_lksb;
133 	res32->bast_mode = res->bast_mode;
134 
135 	res32->lvb_offset = res->lvb_offset;
136 	res32->length = res->length;
137 
138 	res32->lksb.sb_status = res->lksb.sb_status;
139 	res32->lksb.sb_flags = res->lksb.sb_flags;
140 	res32->lksb.sb_lkid = res->lksb.sb_lkid;
141 	res32->lksb.sb_lvbptr = (__u32)(long)res->lksb.sb_lvbptr;
142 }
143 #endif
144 
145 /* Figure out if this lock is at the end of its life and no longer
146    available for the application to use.  The lkb still exists until
147    the final ast is read.  A lock becomes EOL in three situations:
148      1. a noqueue request fails with EAGAIN
149      2. an unlock completes with EUNLOCK
150      3. a cancel of a waiting request completes with ECANCEL/EDEADLK
151    An EOL lock needs to be removed from the process's list of locks.
152    And we can't allow any new operation on an EOL lock.  This is
153    not related to the lifetime of the lkb struct which is managed
154    entirely by refcount. */
155 
156 static int lkb_is_endoflife(int mode, int status)
157 {
158 	switch (status) {
159 	case -DLM_EUNLOCK:
160 		return 1;
161 	case -DLM_ECANCEL:
162 	case -ETIMEDOUT:
163 	case -EDEADLK:
164 	case -EAGAIN:
165 		if (mode == DLM_LOCK_IV)
166 			return 1;
167 		break;
168 	}
169 	return 0;
170 }
171 
172 /* we could possibly check if the cancel of an orphan has resulted in the lkb
173    being removed and then remove that lkb from the orphans list and free it */
174 
175 void dlm_user_add_ast(struct dlm_lkb *lkb, uint32_t flags, int mode,
176 		      int status, uint32_t sbflags, uint64_t seq)
177 {
178 	struct dlm_ls *ls;
179 	struct dlm_user_args *ua;
180 	struct dlm_user_proc *proc;
181 	int rv;
182 
183 	if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD))
184 		return;
185 
186 	ls = lkb->lkb_resource->res_ls;
187 	mutex_lock(&ls->ls_clear_proc_locks);
188 
189 	/* If ORPHAN/DEAD flag is set, it means the process is dead so an ast
190 	   can't be delivered.  For ORPHAN's, dlm_clear_proc_locks() freed
191 	   lkb->ua so we can't try to use it.  This second check is necessary
192 	   for cases where a completion ast is received for an operation that
193 	   began before clear_proc_locks did its cancel/unlock. */
194 
195 	if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD))
196 		goto out;
197 
198 	DLM_ASSERT(lkb->lkb_ua, dlm_print_lkb(lkb););
199 	ua = lkb->lkb_ua;
200 	proc = ua->proc;
201 
202 	if ((flags & DLM_CB_BAST) && ua->bastaddr == NULL)
203 		goto out;
204 
205 	if ((flags & DLM_CB_CAST) && lkb_is_endoflife(mode, status))
206 		lkb->lkb_flags |= DLM_IFL_ENDOFLIFE;
207 
208 	spin_lock(&proc->asts_spin);
209 
210 	rv = dlm_add_lkb_callback(lkb, flags, mode, status, sbflags, seq);
211 	if (rv < 0) {
212 		spin_unlock(&proc->asts_spin);
213 		goto out;
214 	}
215 
216 	if (list_empty(&lkb->lkb_cb_list)) {
217 		kref_get(&lkb->lkb_ref);
218 		list_add_tail(&lkb->lkb_cb_list, &proc->asts);
219 		wake_up_interruptible(&proc->wait);
220 	}
221 	spin_unlock(&proc->asts_spin);
222 
223 	if (lkb->lkb_flags & DLM_IFL_ENDOFLIFE) {
224 		/* N.B. spin_lock locks_spin, not asts_spin */
225 		spin_lock(&proc->locks_spin);
226 		if (!list_empty(&lkb->lkb_ownqueue)) {
227 			list_del_init(&lkb->lkb_ownqueue);
228 			dlm_put_lkb(lkb);
229 		}
230 		spin_unlock(&proc->locks_spin);
231 	}
232  out:
233 	mutex_unlock(&ls->ls_clear_proc_locks);
234 }
235 
236 static int device_user_lock(struct dlm_user_proc *proc,
237 			    struct dlm_lock_params *params)
238 {
239 	struct dlm_ls *ls;
240 	struct dlm_user_args *ua;
241 	uint32_t lkid;
242 	int error = -ENOMEM;
243 
244 	ls = dlm_find_lockspace_local(proc->lockspace);
245 	if (!ls)
246 		return -ENOENT;
247 
248 	if (!params->castaddr || !params->lksb) {
249 		error = -EINVAL;
250 		goto out;
251 	}
252 
253 #ifdef CONFIG_DLM_DEPRECATED_API
254 	if (params->timeout)
255 		pr_warn_once("========================================================\n"
256 			     "WARNING: the lkb timeout feature is being deprecated and\n"
257 			     "         will be removed in v6.2!\n"
258 			     "========================================================\n");
259 #endif
260 
261 	ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
262 	if (!ua)
263 		goto out;
264 	ua->proc = proc;
265 	ua->user_lksb = params->lksb;
266 	ua->castparam = params->castparam;
267 	ua->castaddr = params->castaddr;
268 	ua->bastparam = params->bastparam;
269 	ua->bastaddr = params->bastaddr;
270 	ua->xid = params->xid;
271 
272 	if (params->flags & DLM_LKF_CONVERT) {
273 #ifdef CONFIG_DLM_DEPRECATED_API
274 		error = dlm_user_convert(ls, ua,
275 				         params->mode, params->flags,
276 				         params->lkid, params->lvb,
277 					 (unsigned long) params->timeout);
278 #else
279 		error = dlm_user_convert(ls, ua,
280 					 params->mode, params->flags,
281 					 params->lkid, params->lvb);
282 #endif
283 	} else if (params->flags & DLM_LKF_ORPHAN) {
284 		error = dlm_user_adopt_orphan(ls, ua,
285 					 params->mode, params->flags,
286 					 params->name, params->namelen,
287 					 &lkid);
288 		if (!error)
289 			error = lkid;
290 	} else {
291 #ifdef CONFIG_DLM_DEPRECATED_API
292 		error = dlm_user_request(ls, ua,
293 					 params->mode, params->flags,
294 					 params->name, params->namelen,
295 					 (unsigned long) params->timeout);
296 #else
297 		error = dlm_user_request(ls, ua,
298 					 params->mode, params->flags,
299 					 params->name, params->namelen);
300 #endif
301 		if (!error)
302 			error = ua->lksb.sb_lkid;
303 	}
304  out:
305 	dlm_put_lockspace(ls);
306 	return error;
307 }
308 
309 static int device_user_unlock(struct dlm_user_proc *proc,
310 			      struct dlm_lock_params *params)
311 {
312 	struct dlm_ls *ls;
313 	struct dlm_user_args *ua;
314 	int error = -ENOMEM;
315 
316 	ls = dlm_find_lockspace_local(proc->lockspace);
317 	if (!ls)
318 		return -ENOENT;
319 
320 	ua = kzalloc(sizeof(struct dlm_user_args), GFP_NOFS);
321 	if (!ua)
322 		goto out;
323 	ua->proc = proc;
324 	ua->user_lksb = params->lksb;
325 	ua->castparam = params->castparam;
326 	ua->castaddr = params->castaddr;
327 
328 	if (params->flags & DLM_LKF_CANCEL)
329 		error = dlm_user_cancel(ls, ua, params->flags, params->lkid);
330 	else
331 		error = dlm_user_unlock(ls, ua, params->flags, params->lkid,
332 					params->lvb);
333  out:
334 	dlm_put_lockspace(ls);
335 	return error;
336 }
337 
338 static int device_user_deadlock(struct dlm_user_proc *proc,
339 				struct dlm_lock_params *params)
340 {
341 	struct dlm_ls *ls;
342 	int error;
343 
344 	ls = dlm_find_lockspace_local(proc->lockspace);
345 	if (!ls)
346 		return -ENOENT;
347 
348 	error = dlm_user_deadlock(ls, params->flags, params->lkid);
349 
350 	dlm_put_lockspace(ls);
351 	return error;
352 }
353 
354 static int dlm_device_register(struct dlm_ls *ls, char *name)
355 {
356 	int error, len;
357 
358 	/* The device is already registered.  This happens when the
359 	   lockspace is created multiple times from userspace. */
360 	if (ls->ls_device.name)
361 		return 0;
362 
363 	error = -ENOMEM;
364 	len = strlen(name) + strlen(name_prefix) + 2;
365 	ls->ls_device.name = kzalloc(len, GFP_NOFS);
366 	if (!ls->ls_device.name)
367 		goto fail;
368 
369 	snprintf((char *)ls->ls_device.name, len, "%s_%s", name_prefix,
370 		 name);
371 	ls->ls_device.fops = &device_fops;
372 	ls->ls_device.minor = MISC_DYNAMIC_MINOR;
373 
374 	error = misc_register(&ls->ls_device);
375 	if (error) {
376 		kfree(ls->ls_device.name);
377 		/* this has to be set to NULL
378 		 * to avoid a double-free in dlm_device_deregister
379 		 */
380 		ls->ls_device.name = NULL;
381 	}
382 fail:
383 	return error;
384 }
385 
386 int dlm_device_deregister(struct dlm_ls *ls)
387 {
388 	/* The device is not registered.  This happens when the lockspace
389 	   was never used from userspace, or when device_create_lockspace()
390 	   calls dlm_release_lockspace() after the register fails. */
391 	if (!ls->ls_device.name)
392 		return 0;
393 
394 	misc_deregister(&ls->ls_device);
395 	kfree(ls->ls_device.name);
396 	return 0;
397 }
398 
399 static int device_user_purge(struct dlm_user_proc *proc,
400 			     struct dlm_purge_params *params)
401 {
402 	struct dlm_ls *ls;
403 	int error;
404 
405 	ls = dlm_find_lockspace_local(proc->lockspace);
406 	if (!ls)
407 		return -ENOENT;
408 
409 	error = dlm_user_purge(ls, proc, params->nodeid, params->pid);
410 
411 	dlm_put_lockspace(ls);
412 	return error;
413 }
414 
415 static int device_create_lockspace(struct dlm_lspace_params *params)
416 {
417 	dlm_lockspace_t *lockspace;
418 	struct dlm_ls *ls;
419 	int error;
420 
421 	if (!capable(CAP_SYS_ADMIN))
422 		return -EPERM;
423 
424 	error = dlm_new_lockspace(params->name, dlm_config.ci_cluster_name, params->flags,
425 				  DLM_USER_LVB_LEN, NULL, NULL, NULL,
426 				  &lockspace);
427 	if (error)
428 		return error;
429 
430 	ls = dlm_find_lockspace_local(lockspace);
431 	if (!ls)
432 		return -ENOENT;
433 
434 	error = dlm_device_register(ls, params->name);
435 	dlm_put_lockspace(ls);
436 
437 	if (error)
438 		dlm_release_lockspace(lockspace, 0);
439 	else
440 		error = ls->ls_device.minor;
441 
442 	return error;
443 }
444 
445 static int device_remove_lockspace(struct dlm_lspace_params *params)
446 {
447 	dlm_lockspace_t *lockspace;
448 	struct dlm_ls *ls;
449 	int error, force = 0;
450 
451 	if (!capable(CAP_SYS_ADMIN))
452 		return -EPERM;
453 
454 	ls = dlm_find_lockspace_device(params->minor);
455 	if (!ls)
456 		return -ENOENT;
457 
458 	if (params->flags & DLM_USER_LSFLG_FORCEFREE)
459 		force = 2;
460 
461 	lockspace = ls->ls_local_handle;
462 	dlm_put_lockspace(ls);
463 
464 	/* The final dlm_release_lockspace waits for references to go to
465 	   zero, so all processes will need to close their device for the
466 	   ls before the release will proceed.  release also calls the
467 	   device_deregister above.  Converting a positive return value
468 	   from release to zero means that userspace won't know when its
469 	   release was the final one, but it shouldn't need to know. */
470 
471 	error = dlm_release_lockspace(lockspace, force);
472 	if (error > 0)
473 		error = 0;
474 	return error;
475 }
476 
477 /* Check the user's version matches ours */
478 static int check_version(struct dlm_write_request *req)
479 {
480 	if (req->version[0] != DLM_DEVICE_VERSION_MAJOR ||
481 	    (req->version[0] == DLM_DEVICE_VERSION_MAJOR &&
482 	     req->version[1] > DLM_DEVICE_VERSION_MINOR)) {
483 
484 		printk(KERN_DEBUG "dlm: process %s (%d) version mismatch "
485 		       "user (%d.%d.%d) kernel (%d.%d.%d)\n",
486 		       current->comm,
487 		       task_pid_nr(current),
488 		       req->version[0],
489 		       req->version[1],
490 		       req->version[2],
491 		       DLM_DEVICE_VERSION_MAJOR,
492 		       DLM_DEVICE_VERSION_MINOR,
493 		       DLM_DEVICE_VERSION_PATCH);
494 		return -EINVAL;
495 	}
496 	return 0;
497 }
498 
499 /*
500  * device_write
501  *
502  *   device_user_lock
503  *     dlm_user_request -> request_lock
504  *     dlm_user_convert -> convert_lock
505  *
506  *   device_user_unlock
507  *     dlm_user_unlock -> unlock_lock
508  *     dlm_user_cancel -> cancel_lock
509  *
510  *   device_create_lockspace
511  *     dlm_new_lockspace
512  *
513  *   device_remove_lockspace
514  *     dlm_release_lockspace
515  */
516 
517 /* a write to a lockspace device is a lock or unlock request, a write
518    to the control device is to create/remove a lockspace */
519 
520 static ssize_t device_write(struct file *file, const char __user *buf,
521 			    size_t count, loff_t *ppos)
522 {
523 	struct dlm_user_proc *proc = file->private_data;
524 	struct dlm_write_request *kbuf;
525 	int error;
526 
527 #ifdef CONFIG_COMPAT
528 	if (count < sizeof(struct dlm_write_request32))
529 #else
530 	if (count < sizeof(struct dlm_write_request))
531 #endif
532 		return -EINVAL;
533 
534 	/*
535 	 * can't compare against COMPAT/dlm_write_request32 because
536 	 * we don't yet know if is64bit is zero
537 	 */
538 	if (count > sizeof(struct dlm_write_request) + DLM_RESNAME_MAXLEN)
539 		return -EINVAL;
540 
541 	kbuf = memdup_user_nul(buf, count);
542 	if (IS_ERR(kbuf))
543 		return PTR_ERR(kbuf);
544 
545 	if (check_version(kbuf)) {
546 		error = -EBADE;
547 		goto out_free;
548 	}
549 
550 #ifdef CONFIG_COMPAT
551 	if (!kbuf->is64bit) {
552 		struct dlm_write_request32 *k32buf;
553 		int namelen = 0;
554 
555 		if (count > sizeof(struct dlm_write_request32))
556 			namelen = count - sizeof(struct dlm_write_request32);
557 
558 		k32buf = (struct dlm_write_request32 *)kbuf;
559 
560 		/* add 1 after namelen so that the name string is terminated */
561 		kbuf = kzalloc(sizeof(struct dlm_write_request) + namelen + 1,
562 			       GFP_NOFS);
563 		if (!kbuf) {
564 			kfree(k32buf);
565 			return -ENOMEM;
566 		}
567 
568 		if (proc)
569 			set_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags);
570 
571 		compat_input(kbuf, k32buf, namelen);
572 		kfree(k32buf);
573 	}
574 #endif
575 
576 	/* do we really need this? can a write happen after a close? */
577 	if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) &&
578 	    (proc && test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))) {
579 		error = -EINVAL;
580 		goto out_free;
581 	}
582 
583 	error = -EINVAL;
584 
585 	switch (kbuf->cmd)
586 	{
587 	case DLM_USER_LOCK:
588 		if (!proc) {
589 			log_print("no locking on control device");
590 			goto out_free;
591 		}
592 		error = device_user_lock(proc, &kbuf->i.lock);
593 		break;
594 
595 	case DLM_USER_UNLOCK:
596 		if (!proc) {
597 			log_print("no locking on control device");
598 			goto out_free;
599 		}
600 		error = device_user_unlock(proc, &kbuf->i.lock);
601 		break;
602 
603 	case DLM_USER_DEADLOCK:
604 		if (!proc) {
605 			log_print("no locking on control device");
606 			goto out_free;
607 		}
608 		error = device_user_deadlock(proc, &kbuf->i.lock);
609 		break;
610 
611 	case DLM_USER_CREATE_LOCKSPACE:
612 		if (proc) {
613 			log_print("create/remove only on control device");
614 			goto out_free;
615 		}
616 		error = device_create_lockspace(&kbuf->i.lspace);
617 		break;
618 
619 	case DLM_USER_REMOVE_LOCKSPACE:
620 		if (proc) {
621 			log_print("create/remove only on control device");
622 			goto out_free;
623 		}
624 		error = device_remove_lockspace(&kbuf->i.lspace);
625 		break;
626 
627 	case DLM_USER_PURGE:
628 		if (!proc) {
629 			log_print("no locking on control device");
630 			goto out_free;
631 		}
632 		error = device_user_purge(proc, &kbuf->i.purge);
633 		break;
634 
635 	default:
636 		log_print("Unknown command passed to DLM device : %d\n",
637 			  kbuf->cmd);
638 	}
639 
640  out_free:
641 	kfree(kbuf);
642 	return error;
643 }
644 
645 /* Every process that opens the lockspace device has its own "proc" structure
646    hanging off the open file that's used to keep track of locks owned by the
647    process and asts that need to be delivered to the process. */
648 
649 static int device_open(struct inode *inode, struct file *file)
650 {
651 	struct dlm_user_proc *proc;
652 	struct dlm_ls *ls;
653 
654 	ls = dlm_find_lockspace_device(iminor(inode));
655 	if (!ls)
656 		return -ENOENT;
657 
658 	proc = kzalloc(sizeof(struct dlm_user_proc), GFP_NOFS);
659 	if (!proc) {
660 		dlm_put_lockspace(ls);
661 		return -ENOMEM;
662 	}
663 
664 	proc->lockspace = ls->ls_local_handle;
665 	INIT_LIST_HEAD(&proc->asts);
666 	INIT_LIST_HEAD(&proc->locks);
667 	INIT_LIST_HEAD(&proc->unlocking);
668 	spin_lock_init(&proc->asts_spin);
669 	spin_lock_init(&proc->locks_spin);
670 	init_waitqueue_head(&proc->wait);
671 	file->private_data = proc;
672 
673 	return 0;
674 }
675 
676 static int device_close(struct inode *inode, struct file *file)
677 {
678 	struct dlm_user_proc *proc = file->private_data;
679 	struct dlm_ls *ls;
680 
681 	ls = dlm_find_lockspace_local(proc->lockspace);
682 	if (!ls)
683 		return -ENOENT;
684 
685 	set_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags);
686 
687 	dlm_clear_proc_locks(ls, proc);
688 
689 	/* at this point no more lkb's should exist for this lockspace,
690 	   so there's no chance of dlm_user_add_ast() being called and
691 	   looking for lkb->ua->proc */
692 
693 	kfree(proc);
694 	file->private_data = NULL;
695 
696 	dlm_put_lockspace(ls);
697 	dlm_put_lockspace(ls);  /* for the find in device_open() */
698 
699 	/* FIXME: AUTOFREE: if this ls is no longer used do
700 	   device_remove_lockspace() */
701 
702 	return 0;
703 }
704 
705 static int copy_result_to_user(struct dlm_user_args *ua, int compat,
706 			       uint32_t flags, int mode, int copy_lvb,
707 			       char __user *buf, size_t count)
708 {
709 #ifdef CONFIG_COMPAT
710 	struct dlm_lock_result32 result32;
711 #endif
712 	struct dlm_lock_result result;
713 	void *resultptr;
714 	int error=0;
715 	int len;
716 	int struct_len;
717 
718 	memset(&result, 0, sizeof(struct dlm_lock_result));
719 	result.version[0] = DLM_DEVICE_VERSION_MAJOR;
720 	result.version[1] = DLM_DEVICE_VERSION_MINOR;
721 	result.version[2] = DLM_DEVICE_VERSION_PATCH;
722 	memcpy(&result.lksb, &ua->lksb, offsetof(struct dlm_lksb, sb_lvbptr));
723 	result.user_lksb = ua->user_lksb;
724 
725 	/* FIXME: dlm1 provides for the user's bastparam/addr to not be updated
726 	   in a conversion unless the conversion is successful.  See code
727 	   in dlm_user_convert() for updating ua from ua_tmp.  OpenVMS, though,
728 	   notes that a new blocking AST address and parameter are set even if
729 	   the conversion fails, so maybe we should just do that. */
730 
731 	if (flags & DLM_CB_BAST) {
732 		result.user_astaddr = ua->bastaddr;
733 		result.user_astparam = ua->bastparam;
734 		result.bast_mode = mode;
735 	} else {
736 		result.user_astaddr = ua->castaddr;
737 		result.user_astparam = ua->castparam;
738 	}
739 
740 #ifdef CONFIG_COMPAT
741 	if (compat)
742 		len = sizeof(struct dlm_lock_result32);
743 	else
744 #endif
745 		len = sizeof(struct dlm_lock_result);
746 	struct_len = len;
747 
748 	/* copy lvb to userspace if there is one, it's been updated, and
749 	   the user buffer has space for it */
750 
751 	if (copy_lvb && ua->lksb.sb_lvbptr && count >= len + DLM_USER_LVB_LEN) {
752 		if (copy_to_user(buf+len, ua->lksb.sb_lvbptr,
753 				 DLM_USER_LVB_LEN)) {
754 			error = -EFAULT;
755 			goto out;
756 		}
757 
758 		result.lvb_offset = len;
759 		len += DLM_USER_LVB_LEN;
760 	}
761 
762 	result.length = len;
763 	resultptr = &result;
764 #ifdef CONFIG_COMPAT
765 	if (compat) {
766 		compat_output(&result, &result32);
767 		resultptr = &result32;
768 	}
769 #endif
770 
771 	if (copy_to_user(buf, resultptr, struct_len))
772 		error = -EFAULT;
773 	else
774 		error = len;
775  out:
776 	return error;
777 }
778 
779 static int copy_version_to_user(char __user *buf, size_t count)
780 {
781 	struct dlm_device_version ver;
782 
783 	memset(&ver, 0, sizeof(struct dlm_device_version));
784 	ver.version[0] = DLM_DEVICE_VERSION_MAJOR;
785 	ver.version[1] = DLM_DEVICE_VERSION_MINOR;
786 	ver.version[2] = DLM_DEVICE_VERSION_PATCH;
787 
788 	if (copy_to_user(buf, &ver, sizeof(struct dlm_device_version)))
789 		return -EFAULT;
790 	return sizeof(struct dlm_device_version);
791 }
792 
793 /* a read returns a single ast described in a struct dlm_lock_result */
794 
795 static ssize_t device_read(struct file *file, char __user *buf, size_t count,
796 			   loff_t *ppos)
797 {
798 	struct dlm_user_proc *proc = file->private_data;
799 	struct dlm_lkb *lkb;
800 	DECLARE_WAITQUEUE(wait, current);
801 	struct dlm_callback cb;
802 	int rv, resid, copy_lvb = 0;
803 	int old_mode, new_mode;
804 
805 	if (count == sizeof(struct dlm_device_version)) {
806 		rv = copy_version_to_user(buf, count);
807 		return rv;
808 	}
809 
810 	if (!proc) {
811 		log_print("non-version read from control device %zu", count);
812 		return -EINVAL;
813 	}
814 
815 #ifdef CONFIG_COMPAT
816 	if (count < sizeof(struct dlm_lock_result32))
817 #else
818 	if (count < sizeof(struct dlm_lock_result))
819 #endif
820 		return -EINVAL;
821 
822  try_another:
823 
824 	/* do we really need this? can a read happen after a close? */
825 	if (test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))
826 		return -EINVAL;
827 
828 	spin_lock(&proc->asts_spin);
829 	if (list_empty(&proc->asts)) {
830 		if (file->f_flags & O_NONBLOCK) {
831 			spin_unlock(&proc->asts_spin);
832 			return -EAGAIN;
833 		}
834 
835 		add_wait_queue(&proc->wait, &wait);
836 
837 	repeat:
838 		set_current_state(TASK_INTERRUPTIBLE);
839 		if (list_empty(&proc->asts) && !signal_pending(current)) {
840 			spin_unlock(&proc->asts_spin);
841 			schedule();
842 			spin_lock(&proc->asts_spin);
843 			goto repeat;
844 		}
845 		set_current_state(TASK_RUNNING);
846 		remove_wait_queue(&proc->wait, &wait);
847 
848 		if (signal_pending(current)) {
849 			spin_unlock(&proc->asts_spin);
850 			return -ERESTARTSYS;
851 		}
852 	}
853 
854 	/* if we empty lkb_callbacks, we don't want to unlock the spinlock
855 	   without removing lkb_cb_list; so empty lkb_cb_list is always
856 	   consistent with empty lkb_callbacks */
857 
858 	lkb = list_entry(proc->asts.next, struct dlm_lkb, lkb_cb_list);
859 
860 	/* rem_lkb_callback sets a new lkb_last_cast */
861 	old_mode = lkb->lkb_last_cast.mode;
862 
863 	rv = dlm_rem_lkb_callback(lkb->lkb_resource->res_ls, lkb, &cb, &resid);
864 	if (rv < 0) {
865 		/* this shouldn't happen; lkb should have been removed from
866 		   list when resid was zero */
867 		log_print("dlm_rem_lkb_callback empty %x", lkb->lkb_id);
868 		list_del_init(&lkb->lkb_cb_list);
869 		spin_unlock(&proc->asts_spin);
870 		/* removes ref for proc->asts, may cause lkb to be freed */
871 		dlm_put_lkb(lkb);
872 		goto try_another;
873 	}
874 	if (!resid)
875 		list_del_init(&lkb->lkb_cb_list);
876 	spin_unlock(&proc->asts_spin);
877 
878 	if (cb.flags & DLM_CB_SKIP) {
879 		/* removes ref for proc->asts, may cause lkb to be freed */
880 		if (!resid)
881 			dlm_put_lkb(lkb);
882 		goto try_another;
883 	}
884 
885 	if (cb.flags & DLM_CB_CAST) {
886 		new_mode = cb.mode;
887 
888 		if (!cb.sb_status && lkb->lkb_lksb->sb_lvbptr &&
889 		    dlm_lvb_operations[old_mode + 1][new_mode + 1])
890 			copy_lvb = 1;
891 
892 		lkb->lkb_lksb->sb_status = cb.sb_status;
893 		lkb->lkb_lksb->sb_flags = cb.sb_flags;
894 	}
895 
896 	rv = copy_result_to_user(lkb->lkb_ua,
897 				 test_bit(DLM_PROC_FLAGS_COMPAT, &proc->flags),
898 				 cb.flags, cb.mode, copy_lvb, buf, count);
899 
900 	/* removes ref for proc->asts, may cause lkb to be freed */
901 	if (!resid)
902 		dlm_put_lkb(lkb);
903 
904 	return rv;
905 }
906 
907 static __poll_t device_poll(struct file *file, poll_table *wait)
908 {
909 	struct dlm_user_proc *proc = file->private_data;
910 
911 	poll_wait(file, &proc->wait, wait);
912 
913 	spin_lock(&proc->asts_spin);
914 	if (!list_empty(&proc->asts)) {
915 		spin_unlock(&proc->asts_spin);
916 		return EPOLLIN | EPOLLRDNORM;
917 	}
918 	spin_unlock(&proc->asts_spin);
919 	return 0;
920 }
921 
922 int dlm_user_daemon_available(void)
923 {
924 	/* dlm_controld hasn't started (or, has started, but not
925 	   properly populated configfs) */
926 
927 	if (!dlm_our_nodeid())
928 		return 0;
929 
930 	/* This is to deal with versions of dlm_controld that don't
931 	   know about the monitor device.  We assume that if the
932 	   dlm_controld was started (above), but the monitor device
933 	   was never opened, that it's an old version.  dlm_controld
934 	   should open the monitor device before populating configfs. */
935 
936 	if (dlm_monitor_unused)
937 		return 1;
938 
939 	return atomic_read(&dlm_monitor_opened) ? 1 : 0;
940 }
941 
942 static int ctl_device_open(struct inode *inode, struct file *file)
943 {
944 	file->private_data = NULL;
945 	return 0;
946 }
947 
948 static int ctl_device_close(struct inode *inode, struct file *file)
949 {
950 	return 0;
951 }
952 
953 static int monitor_device_open(struct inode *inode, struct file *file)
954 {
955 	atomic_inc(&dlm_monitor_opened);
956 	dlm_monitor_unused = 0;
957 	return 0;
958 }
959 
960 static int monitor_device_close(struct inode *inode, struct file *file)
961 {
962 	if (atomic_dec_and_test(&dlm_monitor_opened))
963 		dlm_stop_lockspaces();
964 	return 0;
965 }
966 
967 static const struct file_operations device_fops = {
968 	.open    = device_open,
969 	.release = device_close,
970 	.read    = device_read,
971 	.write   = device_write,
972 	.poll    = device_poll,
973 	.owner   = THIS_MODULE,
974 	.llseek  = noop_llseek,
975 };
976 
977 static const struct file_operations ctl_device_fops = {
978 	.open    = ctl_device_open,
979 	.release = ctl_device_close,
980 	.read    = device_read,
981 	.write   = device_write,
982 	.owner   = THIS_MODULE,
983 	.llseek  = noop_llseek,
984 };
985 
986 static struct miscdevice ctl_device = {
987 	.name  = "dlm-control",
988 	.fops  = &ctl_device_fops,
989 	.minor = MISC_DYNAMIC_MINOR,
990 };
991 
992 static const struct file_operations monitor_device_fops = {
993 	.open    = monitor_device_open,
994 	.release = monitor_device_close,
995 	.owner   = THIS_MODULE,
996 	.llseek  = noop_llseek,
997 };
998 
999 static struct miscdevice monitor_device = {
1000 	.name  = "dlm-monitor",
1001 	.fops  = &monitor_device_fops,
1002 	.minor = MISC_DYNAMIC_MINOR,
1003 };
1004 
1005 int __init dlm_user_init(void)
1006 {
1007 	int error;
1008 
1009 	atomic_set(&dlm_monitor_opened, 0);
1010 
1011 	error = misc_register(&ctl_device);
1012 	if (error) {
1013 		log_print("misc_register failed for control device");
1014 		goto out;
1015 	}
1016 
1017 	error = misc_register(&monitor_device);
1018 	if (error) {
1019 		log_print("misc_register failed for monitor device");
1020 		misc_deregister(&ctl_device);
1021 	}
1022  out:
1023 	return error;
1024 }
1025 
1026 void dlm_user_exit(void)
1027 {
1028 	misc_deregister(&ctl_device);
1029 	misc_deregister(&monitor_device);
1030 }
1031 
1032