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