Btrfs: fix double free in the btrfs_qgroup_account_ref()
[platform/adaptation/renesas_rcar/renesas_kernel.git] / fs / dlm / lock.c
1 /******************************************************************************
2 *******************************************************************************
3 **
4 **  Copyright (C) 2005-2010 Red Hat, Inc.  All rights reserved.
5 **
6 **  This copyrighted material is made available to anyone wishing to use,
7 **  modify, copy, or redistribute it subject to the terms and conditions
8 **  of the GNU General Public License v.2.
9 **
10 *******************************************************************************
11 ******************************************************************************/
12
13 /* Central locking logic has four stages:
14
15    dlm_lock()
16    dlm_unlock()
17
18    request_lock(ls, lkb)
19    convert_lock(ls, lkb)
20    unlock_lock(ls, lkb)
21    cancel_lock(ls, lkb)
22
23    _request_lock(r, lkb)
24    _convert_lock(r, lkb)
25    _unlock_lock(r, lkb)
26    _cancel_lock(r, lkb)
27
28    do_request(r, lkb)
29    do_convert(r, lkb)
30    do_unlock(r, lkb)
31    do_cancel(r, lkb)
32
33    Stage 1 (lock, unlock) is mainly about checking input args and
34    splitting into one of the four main operations:
35
36        dlm_lock          = request_lock
37        dlm_lock+CONVERT  = convert_lock
38        dlm_unlock        = unlock_lock
39        dlm_unlock+CANCEL = cancel_lock
40
41    Stage 2, xxxx_lock(), just finds and locks the relevant rsb which is
42    provided to the next stage.
43
44    Stage 3, _xxxx_lock(), determines if the operation is local or remote.
45    When remote, it calls send_xxxx(), when local it calls do_xxxx().
46
47    Stage 4, do_xxxx(), is the guts of the operation.  It manipulates the
48    given rsb and lkb and queues callbacks.
49
50    For remote operations, send_xxxx() results in the corresponding do_xxxx()
51    function being executed on the remote node.  The connecting send/receive
52    calls on local (L) and remote (R) nodes:
53
54    L: send_xxxx()              ->  R: receive_xxxx()
55                                    R: do_xxxx()
56    L: receive_xxxx_reply()     <-  R: send_xxxx_reply()
57 */
58 #include <linux/types.h>
59 #include <linux/rbtree.h>
60 #include <linux/slab.h>
61 #include "dlm_internal.h"
62 #include <linux/dlm_device.h>
63 #include "memory.h"
64 #include "lowcomms.h"
65 #include "requestqueue.h"
66 #include "util.h"
67 #include "dir.h"
68 #include "member.h"
69 #include "lockspace.h"
70 #include "ast.h"
71 #include "lock.h"
72 #include "rcom.h"
73 #include "recover.h"
74 #include "lvb_table.h"
75 #include "user.h"
76 #include "config.h"
77
78 static int send_request(struct dlm_rsb *r, struct dlm_lkb *lkb);
79 static int send_convert(struct dlm_rsb *r, struct dlm_lkb *lkb);
80 static int send_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb);
81 static int send_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb);
82 static int send_grant(struct dlm_rsb *r, struct dlm_lkb *lkb);
83 static int send_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int mode);
84 static int send_lookup(struct dlm_rsb *r, struct dlm_lkb *lkb);
85 static int send_remove(struct dlm_rsb *r);
86 static int _request_lock(struct dlm_rsb *r, struct dlm_lkb *lkb);
87 static int _cancel_lock(struct dlm_rsb *r, struct dlm_lkb *lkb);
88 static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
89                                     struct dlm_message *ms);
90 static int receive_extralen(struct dlm_message *ms);
91 static void do_purge(struct dlm_ls *ls, int nodeid, int pid);
92 static void del_timeout(struct dlm_lkb *lkb);
93 static void toss_rsb(struct kref *kref);
94
95 /*
96  * Lock compatibilty matrix - thanks Steve
97  * UN = Unlocked state. Not really a state, used as a flag
98  * PD = Padding. Used to make the matrix a nice power of two in size
99  * Other states are the same as the VMS DLM.
100  * Usage: matrix[grmode+1][rqmode+1]  (although m[rq+1][gr+1] is the same)
101  */
102
103 static const int __dlm_compat_matrix[8][8] = {
104       /* UN NL CR CW PR PW EX PD */
105         {1, 1, 1, 1, 1, 1, 1, 0},       /* UN */
106         {1, 1, 1, 1, 1, 1, 1, 0},       /* NL */
107         {1, 1, 1, 1, 1, 1, 0, 0},       /* CR */
108         {1, 1, 1, 1, 0, 0, 0, 0},       /* CW */
109         {1, 1, 1, 0, 1, 0, 0, 0},       /* PR */
110         {1, 1, 1, 0, 0, 0, 0, 0},       /* PW */
111         {1, 1, 0, 0, 0, 0, 0, 0},       /* EX */
112         {0, 0, 0, 0, 0, 0, 0, 0}        /* PD */
113 };
114
115 /*
116  * This defines the direction of transfer of LVB data.
117  * Granted mode is the row; requested mode is the column.
118  * Usage: matrix[grmode+1][rqmode+1]
119  * 1 = LVB is returned to the caller
120  * 0 = LVB is written to the resource
121  * -1 = nothing happens to the LVB
122  */
123
124 const int dlm_lvb_operations[8][8] = {
125         /* UN   NL  CR  CW  PR  PW  EX  PD*/
126         {  -1,  1,  1,  1,  1,  1,  1, -1 }, /* UN */
127         {  -1,  1,  1,  1,  1,  1,  1,  0 }, /* NL */
128         {  -1, -1,  1,  1,  1,  1,  1,  0 }, /* CR */
129         {  -1, -1, -1,  1,  1,  1,  1,  0 }, /* CW */
130         {  -1, -1, -1, -1,  1,  1,  1,  0 }, /* PR */
131         {  -1,  0,  0,  0,  0,  0,  1,  0 }, /* PW */
132         {  -1,  0,  0,  0,  0,  0,  0,  0 }, /* EX */
133         {  -1,  0,  0,  0,  0,  0,  0,  0 }  /* PD */
134 };
135
136 #define modes_compat(gr, rq) \
137         __dlm_compat_matrix[(gr)->lkb_grmode + 1][(rq)->lkb_rqmode + 1]
138
139 int dlm_modes_compat(int mode1, int mode2)
140 {
141         return __dlm_compat_matrix[mode1 + 1][mode2 + 1];
142 }
143
144 /*
145  * Compatibility matrix for conversions with QUECVT set.
146  * Granted mode is the row; requested mode is the column.
147  * Usage: matrix[grmode+1][rqmode+1]
148  */
149
150 static const int __quecvt_compat_matrix[8][8] = {
151       /* UN NL CR CW PR PW EX PD */
152         {0, 0, 0, 0, 0, 0, 0, 0},       /* UN */
153         {0, 0, 1, 1, 1, 1, 1, 0},       /* NL */
154         {0, 0, 0, 1, 1, 1, 1, 0},       /* CR */
155         {0, 0, 0, 0, 1, 1, 1, 0},       /* CW */
156         {0, 0, 0, 1, 0, 1, 1, 0},       /* PR */
157         {0, 0, 0, 0, 0, 0, 1, 0},       /* PW */
158         {0, 0, 0, 0, 0, 0, 0, 0},       /* EX */
159         {0, 0, 0, 0, 0, 0, 0, 0}        /* PD */
160 };
161
162 void dlm_print_lkb(struct dlm_lkb *lkb)
163 {
164         printk(KERN_ERR "lkb: nodeid %d id %x remid %x exflags %x flags %x "
165                "sts %d rq %d gr %d wait_type %d wait_nodeid %d seq %llu\n",
166                lkb->lkb_nodeid, lkb->lkb_id, lkb->lkb_remid, lkb->lkb_exflags,
167                lkb->lkb_flags, lkb->lkb_status, lkb->lkb_rqmode,
168                lkb->lkb_grmode, lkb->lkb_wait_type, lkb->lkb_wait_nodeid,
169                (unsigned long long)lkb->lkb_recover_seq);
170 }
171
172 static void dlm_print_rsb(struct dlm_rsb *r)
173 {
174         printk(KERN_ERR "rsb: nodeid %d master %d dir %d flags %lx first %x "
175                "rlc %d name %s\n",
176                r->res_nodeid, r->res_master_nodeid, r->res_dir_nodeid,
177                r->res_flags, r->res_first_lkid, r->res_recover_locks_count,
178                r->res_name);
179 }
180
181 void dlm_dump_rsb(struct dlm_rsb *r)
182 {
183         struct dlm_lkb *lkb;
184
185         dlm_print_rsb(r);
186
187         printk(KERN_ERR "rsb: root_list empty %d recover_list empty %d\n",
188                list_empty(&r->res_root_list), list_empty(&r->res_recover_list));
189         printk(KERN_ERR "rsb lookup list\n");
190         list_for_each_entry(lkb, &r->res_lookup, lkb_rsb_lookup)
191                 dlm_print_lkb(lkb);
192         printk(KERN_ERR "rsb grant queue:\n");
193         list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue)
194                 dlm_print_lkb(lkb);
195         printk(KERN_ERR "rsb convert queue:\n");
196         list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue)
197                 dlm_print_lkb(lkb);
198         printk(KERN_ERR "rsb wait queue:\n");
199         list_for_each_entry(lkb, &r->res_waitqueue, lkb_statequeue)
200                 dlm_print_lkb(lkb);
201 }
202
203 /* Threads cannot use the lockspace while it's being recovered */
204
205 static inline void dlm_lock_recovery(struct dlm_ls *ls)
206 {
207         down_read(&ls->ls_in_recovery);
208 }
209
210 void dlm_unlock_recovery(struct dlm_ls *ls)
211 {
212         up_read(&ls->ls_in_recovery);
213 }
214
215 int dlm_lock_recovery_try(struct dlm_ls *ls)
216 {
217         return down_read_trylock(&ls->ls_in_recovery);
218 }
219
220 static inline int can_be_queued(struct dlm_lkb *lkb)
221 {
222         return !(lkb->lkb_exflags & DLM_LKF_NOQUEUE);
223 }
224
225 static inline int force_blocking_asts(struct dlm_lkb *lkb)
226 {
227         return (lkb->lkb_exflags & DLM_LKF_NOQUEUEBAST);
228 }
229
230 static inline int is_demoted(struct dlm_lkb *lkb)
231 {
232         return (lkb->lkb_sbflags & DLM_SBF_DEMOTED);
233 }
234
235 static inline int is_altmode(struct dlm_lkb *lkb)
236 {
237         return (lkb->lkb_sbflags & DLM_SBF_ALTMODE);
238 }
239
240 static inline int is_granted(struct dlm_lkb *lkb)
241 {
242         return (lkb->lkb_status == DLM_LKSTS_GRANTED);
243 }
244
245 static inline int is_remote(struct dlm_rsb *r)
246 {
247         DLM_ASSERT(r->res_nodeid >= 0, dlm_print_rsb(r););
248         return !!r->res_nodeid;
249 }
250
251 static inline int is_process_copy(struct dlm_lkb *lkb)
252 {
253         return (lkb->lkb_nodeid && !(lkb->lkb_flags & DLM_IFL_MSTCPY));
254 }
255
256 static inline int is_master_copy(struct dlm_lkb *lkb)
257 {
258         return (lkb->lkb_flags & DLM_IFL_MSTCPY) ? 1 : 0;
259 }
260
261 static inline int middle_conversion(struct dlm_lkb *lkb)
262 {
263         if ((lkb->lkb_grmode==DLM_LOCK_PR && lkb->lkb_rqmode==DLM_LOCK_CW) ||
264             (lkb->lkb_rqmode==DLM_LOCK_PR && lkb->lkb_grmode==DLM_LOCK_CW))
265                 return 1;
266         return 0;
267 }
268
269 static inline int down_conversion(struct dlm_lkb *lkb)
270 {
271         return (!middle_conversion(lkb) && lkb->lkb_rqmode < lkb->lkb_grmode);
272 }
273
274 static inline int is_overlap_unlock(struct dlm_lkb *lkb)
275 {
276         return lkb->lkb_flags & DLM_IFL_OVERLAP_UNLOCK;
277 }
278
279 static inline int is_overlap_cancel(struct dlm_lkb *lkb)
280 {
281         return lkb->lkb_flags & DLM_IFL_OVERLAP_CANCEL;
282 }
283
284 static inline int is_overlap(struct dlm_lkb *lkb)
285 {
286         return (lkb->lkb_flags & (DLM_IFL_OVERLAP_UNLOCK |
287                                   DLM_IFL_OVERLAP_CANCEL));
288 }
289
290 static void queue_cast(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv)
291 {
292         if (is_master_copy(lkb))
293                 return;
294
295         del_timeout(lkb);
296
297         DLM_ASSERT(lkb->lkb_lksb, dlm_print_lkb(lkb););
298
299         /* if the operation was a cancel, then return -DLM_ECANCEL, if a
300            timeout caused the cancel then return -ETIMEDOUT */
301         if (rv == -DLM_ECANCEL && (lkb->lkb_flags & DLM_IFL_TIMEOUT_CANCEL)) {
302                 lkb->lkb_flags &= ~DLM_IFL_TIMEOUT_CANCEL;
303                 rv = -ETIMEDOUT;
304         }
305
306         if (rv == -DLM_ECANCEL && (lkb->lkb_flags & DLM_IFL_DEADLOCK_CANCEL)) {
307                 lkb->lkb_flags &= ~DLM_IFL_DEADLOCK_CANCEL;
308                 rv = -EDEADLK;
309         }
310
311         dlm_add_cb(lkb, DLM_CB_CAST, lkb->lkb_grmode, rv, lkb->lkb_sbflags);
312 }
313
314 static inline void queue_cast_overlap(struct dlm_rsb *r, struct dlm_lkb *lkb)
315 {
316         queue_cast(r, lkb,
317                    is_overlap_unlock(lkb) ? -DLM_EUNLOCK : -DLM_ECANCEL);
318 }
319
320 static void queue_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int rqmode)
321 {
322         if (is_master_copy(lkb)) {
323                 send_bast(r, lkb, rqmode);
324         } else {
325                 dlm_add_cb(lkb, DLM_CB_BAST, rqmode, 0, 0);
326         }
327 }
328
329 /*
330  * Basic operations on rsb's and lkb's
331  */
332
333 /* This is only called to add a reference when the code already holds
334    a valid reference to the rsb, so there's no need for locking. */
335
336 static inline void hold_rsb(struct dlm_rsb *r)
337 {
338         kref_get(&r->res_ref);
339 }
340
341 void dlm_hold_rsb(struct dlm_rsb *r)
342 {
343         hold_rsb(r);
344 }
345
346 /* When all references to the rsb are gone it's transferred to
347    the tossed list for later disposal. */
348
349 static void put_rsb(struct dlm_rsb *r)
350 {
351         struct dlm_ls *ls = r->res_ls;
352         uint32_t bucket = r->res_bucket;
353
354         spin_lock(&ls->ls_rsbtbl[bucket].lock);
355         kref_put(&r->res_ref, toss_rsb);
356         spin_unlock(&ls->ls_rsbtbl[bucket].lock);
357 }
358
359 void dlm_put_rsb(struct dlm_rsb *r)
360 {
361         put_rsb(r);
362 }
363
364 static int pre_rsb_struct(struct dlm_ls *ls)
365 {
366         struct dlm_rsb *r1, *r2;
367         int count = 0;
368
369         spin_lock(&ls->ls_new_rsb_spin);
370         if (ls->ls_new_rsb_count > dlm_config.ci_new_rsb_count / 2) {
371                 spin_unlock(&ls->ls_new_rsb_spin);
372                 return 0;
373         }
374         spin_unlock(&ls->ls_new_rsb_spin);
375
376         r1 = dlm_allocate_rsb(ls);
377         r2 = dlm_allocate_rsb(ls);
378
379         spin_lock(&ls->ls_new_rsb_spin);
380         if (r1) {
381                 list_add(&r1->res_hashchain, &ls->ls_new_rsb);
382                 ls->ls_new_rsb_count++;
383         }
384         if (r2) {
385                 list_add(&r2->res_hashchain, &ls->ls_new_rsb);
386                 ls->ls_new_rsb_count++;
387         }
388         count = ls->ls_new_rsb_count;
389         spin_unlock(&ls->ls_new_rsb_spin);
390
391         if (!count)
392                 return -ENOMEM;
393         return 0;
394 }
395
396 /* If ls->ls_new_rsb is empty, return -EAGAIN, so the caller can
397    unlock any spinlocks, go back and call pre_rsb_struct again.
398    Otherwise, take an rsb off the list and return it. */
399
400 static int get_rsb_struct(struct dlm_ls *ls, char *name, int len,
401                           struct dlm_rsb **r_ret)
402 {
403         struct dlm_rsb *r;
404         int count;
405
406         spin_lock(&ls->ls_new_rsb_spin);
407         if (list_empty(&ls->ls_new_rsb)) {
408                 count = ls->ls_new_rsb_count;
409                 spin_unlock(&ls->ls_new_rsb_spin);
410                 log_debug(ls, "find_rsb retry %d %d %s",
411                           count, dlm_config.ci_new_rsb_count, name);
412                 return -EAGAIN;
413         }
414
415         r = list_first_entry(&ls->ls_new_rsb, struct dlm_rsb, res_hashchain);
416         list_del(&r->res_hashchain);
417         /* Convert the empty list_head to a NULL rb_node for tree usage: */
418         memset(&r->res_hashnode, 0, sizeof(struct rb_node));
419         ls->ls_new_rsb_count--;
420         spin_unlock(&ls->ls_new_rsb_spin);
421
422         r->res_ls = ls;
423         r->res_length = len;
424         memcpy(r->res_name, name, len);
425         mutex_init(&r->res_mutex);
426
427         INIT_LIST_HEAD(&r->res_lookup);
428         INIT_LIST_HEAD(&r->res_grantqueue);
429         INIT_LIST_HEAD(&r->res_convertqueue);
430         INIT_LIST_HEAD(&r->res_waitqueue);
431         INIT_LIST_HEAD(&r->res_root_list);
432         INIT_LIST_HEAD(&r->res_recover_list);
433
434         *r_ret = r;
435         return 0;
436 }
437
438 static int rsb_cmp(struct dlm_rsb *r, const char *name, int nlen)
439 {
440         char maxname[DLM_RESNAME_MAXLEN];
441
442         memset(maxname, 0, DLM_RESNAME_MAXLEN);
443         memcpy(maxname, name, nlen);
444         return memcmp(r->res_name, maxname, DLM_RESNAME_MAXLEN);
445 }
446
447 int dlm_search_rsb_tree(struct rb_root *tree, char *name, int len,
448                         struct dlm_rsb **r_ret)
449 {
450         struct rb_node *node = tree->rb_node;
451         struct dlm_rsb *r;
452         int rc;
453
454         while (node) {
455                 r = rb_entry(node, struct dlm_rsb, res_hashnode);
456                 rc = rsb_cmp(r, name, len);
457                 if (rc < 0)
458                         node = node->rb_left;
459                 else if (rc > 0)
460                         node = node->rb_right;
461                 else
462                         goto found;
463         }
464         *r_ret = NULL;
465         return -EBADR;
466
467  found:
468         *r_ret = r;
469         return 0;
470 }
471
472 static int rsb_insert(struct dlm_rsb *rsb, struct rb_root *tree)
473 {
474         struct rb_node **newn = &tree->rb_node;
475         struct rb_node *parent = NULL;
476         int rc;
477
478         while (*newn) {
479                 struct dlm_rsb *cur = rb_entry(*newn, struct dlm_rsb,
480                                                res_hashnode);
481
482                 parent = *newn;
483                 rc = rsb_cmp(cur, rsb->res_name, rsb->res_length);
484                 if (rc < 0)
485                         newn = &parent->rb_left;
486                 else if (rc > 0)
487                         newn = &parent->rb_right;
488                 else {
489                         log_print("rsb_insert match");
490                         dlm_dump_rsb(rsb);
491                         dlm_dump_rsb(cur);
492                         return -EEXIST;
493                 }
494         }
495
496         rb_link_node(&rsb->res_hashnode, parent, newn);
497         rb_insert_color(&rsb->res_hashnode, tree);
498         return 0;
499 }
500
501 /*
502  * Find rsb in rsbtbl and potentially create/add one
503  *
504  * Delaying the release of rsb's has a similar benefit to applications keeping
505  * NL locks on an rsb, but without the guarantee that the cached master value
506  * will still be valid when the rsb is reused.  Apps aren't always smart enough
507  * to keep NL locks on an rsb that they may lock again shortly; this can lead
508  * to excessive master lookups and removals if we don't delay the release.
509  *
510  * Searching for an rsb means looking through both the normal list and toss
511  * list.  When found on the toss list the rsb is moved to the normal list with
512  * ref count of 1; when found on normal list the ref count is incremented.
513  *
514  * rsb's on the keep list are being used locally and refcounted.
515  * rsb's on the toss list are not being used locally, and are not refcounted.
516  *
517  * The toss list rsb's were either
518  * - previously used locally but not any more (were on keep list, then
519  *   moved to toss list when last refcount dropped)
520  * - created and put on toss list as a directory record for a lookup
521  *   (we are the dir node for the res, but are not using the res right now,
522  *   but some other node is)
523  *
524  * The purpose of find_rsb() is to return a refcounted rsb for local use.
525  * So, if the given rsb is on the toss list, it is moved to the keep list
526  * before being returned.
527  *
528  * toss_rsb() happens when all local usage of the rsb is done, i.e. no
529  * more refcounts exist, so the rsb is moved from the keep list to the
530  * toss list.
531  *
532  * rsb's on both keep and toss lists are used for doing a name to master
533  * lookups.  rsb's that are in use locally (and being refcounted) are on
534  * the keep list, rsb's that are not in use locally (not refcounted) and
535  * only exist for name/master lookups are on the toss list.
536  *
537  * rsb's on the toss list who's dir_nodeid is not local can have stale
538  * name/master mappings.  So, remote requests on such rsb's can potentially
539  * return with an error, which means the mapping is stale and needs to
540  * be updated with a new lookup.  (The idea behind MASTER UNCERTAIN and
541  * first_lkid is to keep only a single outstanding request on an rsb
542  * while that rsb has a potentially stale master.)
543  */
544
545 static int find_rsb_dir(struct dlm_ls *ls, char *name, int len,
546                         uint32_t hash, uint32_t b,
547                         int dir_nodeid, int from_nodeid,
548                         unsigned int flags, struct dlm_rsb **r_ret)
549 {
550         struct dlm_rsb *r = NULL;
551         int our_nodeid = dlm_our_nodeid();
552         int from_local = 0;
553         int from_other = 0;
554         int from_dir = 0;
555         int create = 0;
556         int error;
557
558         if (flags & R_RECEIVE_REQUEST) {
559                 if (from_nodeid == dir_nodeid)
560                         from_dir = 1;
561                 else
562                         from_other = 1;
563         } else if (flags & R_REQUEST) {
564                 from_local = 1;
565         }
566
567         /*
568          * flags & R_RECEIVE_RECOVER is from dlm_recover_master_copy, so
569          * from_nodeid has sent us a lock in dlm_recover_locks, believing
570          * we're the new master.  Our local recovery may not have set
571          * res_master_nodeid to our_nodeid yet, so allow either.  Don't
572          * create the rsb; dlm_recover_process_copy() will handle EBADR
573          * by resending.
574          *
575          * If someone sends us a request, we are the dir node, and we do
576          * not find the rsb anywhere, then recreate it.  This happens if
577          * someone sends us a request after we have removed/freed an rsb
578          * from our toss list.  (They sent a request instead of lookup
579          * because they are using an rsb from their toss list.)
580          */
581
582         if (from_local || from_dir ||
583             (from_other && (dir_nodeid == our_nodeid))) {
584                 create = 1;
585         }
586
587  retry:
588         if (create) {
589                 error = pre_rsb_struct(ls);
590                 if (error < 0)
591                         goto out;
592         }
593
594         spin_lock(&ls->ls_rsbtbl[b].lock);
595
596         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
597         if (error)
598                 goto do_toss;
599         
600         /*
601          * rsb is active, so we can't check master_nodeid without lock_rsb.
602          */
603
604         kref_get(&r->res_ref);
605         error = 0;
606         goto out_unlock;
607
608
609  do_toss:
610         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
611         if (error)
612                 goto do_new;
613
614         /*
615          * rsb found inactive (master_nodeid may be out of date unless
616          * we are the dir_nodeid or were the master)  No other thread
617          * is using this rsb because it's on the toss list, so we can
618          * look at or update res_master_nodeid without lock_rsb.
619          */
620
621         if ((r->res_master_nodeid != our_nodeid) && from_other) {
622                 /* our rsb was not master, and another node (not the dir node)
623                    has sent us a request */
624                 log_debug(ls, "find_rsb toss from_other %d master %d dir %d %s",
625                           from_nodeid, r->res_master_nodeid, dir_nodeid,
626                           r->res_name);
627                 error = -ENOTBLK;
628                 goto out_unlock;
629         }
630
631         if ((r->res_master_nodeid != our_nodeid) && from_dir) {
632                 /* don't think this should ever happen */
633                 log_error(ls, "find_rsb toss from_dir %d master %d",
634                           from_nodeid, r->res_master_nodeid);
635                 dlm_print_rsb(r);
636                 /* fix it and go on */
637                 r->res_master_nodeid = our_nodeid;
638                 r->res_nodeid = 0;
639                 rsb_clear_flag(r, RSB_MASTER_UNCERTAIN);
640                 r->res_first_lkid = 0;
641         }
642
643         if (from_local && (r->res_master_nodeid != our_nodeid)) {
644                 /* Because we have held no locks on this rsb,
645                    res_master_nodeid could have become stale. */
646                 rsb_set_flag(r, RSB_MASTER_UNCERTAIN);
647                 r->res_first_lkid = 0;
648         }
649
650         rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[b].toss);
651         error = rsb_insert(r, &ls->ls_rsbtbl[b].keep);
652         goto out_unlock;
653
654
655  do_new:
656         /*
657          * rsb not found
658          */
659
660         if (error == -EBADR && !create)
661                 goto out_unlock;
662
663         error = get_rsb_struct(ls, name, len, &r);
664         if (error == -EAGAIN) {
665                 spin_unlock(&ls->ls_rsbtbl[b].lock);
666                 goto retry;
667         }
668         if (error)
669                 goto out_unlock;
670
671         r->res_hash = hash;
672         r->res_bucket = b;
673         r->res_dir_nodeid = dir_nodeid;
674         kref_init(&r->res_ref);
675
676         if (from_dir) {
677                 /* want to see how often this happens */
678                 log_debug(ls, "find_rsb new from_dir %d recreate %s",
679                           from_nodeid, r->res_name);
680                 r->res_master_nodeid = our_nodeid;
681                 r->res_nodeid = 0;
682                 goto out_add;
683         }
684
685         if (from_other && (dir_nodeid != our_nodeid)) {
686                 /* should never happen */
687                 log_error(ls, "find_rsb new from_other %d dir %d our %d %s",
688                           from_nodeid, dir_nodeid, our_nodeid, r->res_name);
689                 dlm_free_rsb(r);
690                 error = -ENOTBLK;
691                 goto out_unlock;
692         }
693
694         if (from_other) {
695                 log_debug(ls, "find_rsb new from_other %d dir %d %s",
696                           from_nodeid, dir_nodeid, r->res_name);
697         }
698
699         if (dir_nodeid == our_nodeid) {
700                 /* When we are the dir nodeid, we can set the master
701                    node immediately */
702                 r->res_master_nodeid = our_nodeid;
703                 r->res_nodeid = 0;
704         } else {
705                 /* set_master will send_lookup to dir_nodeid */
706                 r->res_master_nodeid = 0;
707                 r->res_nodeid = -1;
708         }
709
710  out_add:
711         error = rsb_insert(r, &ls->ls_rsbtbl[b].keep);
712  out_unlock:
713         spin_unlock(&ls->ls_rsbtbl[b].lock);
714  out:
715         *r_ret = r;
716         return error;
717 }
718
719 /* During recovery, other nodes can send us new MSTCPY locks (from
720    dlm_recover_locks) before we've made ourself master (in
721    dlm_recover_masters). */
722
723 static int find_rsb_nodir(struct dlm_ls *ls, char *name, int len,
724                           uint32_t hash, uint32_t b,
725                           int dir_nodeid, int from_nodeid,
726                           unsigned int flags, struct dlm_rsb **r_ret)
727 {
728         struct dlm_rsb *r = NULL;
729         int our_nodeid = dlm_our_nodeid();
730         int recover = (flags & R_RECEIVE_RECOVER);
731         int error;
732
733  retry:
734         error = pre_rsb_struct(ls);
735         if (error < 0)
736                 goto out;
737
738         spin_lock(&ls->ls_rsbtbl[b].lock);
739
740         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
741         if (error)
742                 goto do_toss;
743
744         /*
745          * rsb is active, so we can't check master_nodeid without lock_rsb.
746          */
747
748         kref_get(&r->res_ref);
749         goto out_unlock;
750
751
752  do_toss:
753         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
754         if (error)
755                 goto do_new;
756
757         /*
758          * rsb found inactive. No other thread is using this rsb because
759          * it's on the toss list, so we can look at or update
760          * res_master_nodeid without lock_rsb.
761          */
762
763         if (!recover && (r->res_master_nodeid != our_nodeid) && from_nodeid) {
764                 /* our rsb is not master, and another node has sent us a
765                    request; this should never happen */
766                 log_error(ls, "find_rsb toss from_nodeid %d master %d dir %d",
767                           from_nodeid, r->res_master_nodeid, dir_nodeid);
768                 dlm_print_rsb(r);
769                 error = -ENOTBLK;
770                 goto out_unlock;
771         }
772
773         if (!recover && (r->res_master_nodeid != our_nodeid) &&
774             (dir_nodeid == our_nodeid)) {
775                 /* our rsb is not master, and we are dir; may as well fix it;
776                    this should never happen */
777                 log_error(ls, "find_rsb toss our %d master %d dir %d",
778                           our_nodeid, r->res_master_nodeid, dir_nodeid);
779                 dlm_print_rsb(r);
780                 r->res_master_nodeid = our_nodeid;
781                 r->res_nodeid = 0;
782         }
783
784         rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[b].toss);
785         error = rsb_insert(r, &ls->ls_rsbtbl[b].keep);
786         goto out_unlock;
787
788
789  do_new:
790         /*
791          * rsb not found
792          */
793
794         error = get_rsb_struct(ls, name, len, &r);
795         if (error == -EAGAIN) {
796                 spin_unlock(&ls->ls_rsbtbl[b].lock);
797                 goto retry;
798         }
799         if (error)
800                 goto out_unlock;
801
802         r->res_hash = hash;
803         r->res_bucket = b;
804         r->res_dir_nodeid = dir_nodeid;
805         r->res_master_nodeid = dir_nodeid;
806         r->res_nodeid = (dir_nodeid == our_nodeid) ? 0 : dir_nodeid;
807         kref_init(&r->res_ref);
808
809         error = rsb_insert(r, &ls->ls_rsbtbl[b].keep);
810  out_unlock:
811         spin_unlock(&ls->ls_rsbtbl[b].lock);
812  out:
813         *r_ret = r;
814         return error;
815 }
816
817 static int find_rsb(struct dlm_ls *ls, char *name, int len, int from_nodeid,
818                     unsigned int flags, struct dlm_rsb **r_ret)
819 {
820         uint32_t hash, b;
821         int dir_nodeid;
822
823         if (len > DLM_RESNAME_MAXLEN)
824                 return -EINVAL;
825
826         hash = jhash(name, len, 0);
827         b = hash & (ls->ls_rsbtbl_size - 1);
828
829         dir_nodeid = dlm_hash2nodeid(ls, hash);
830
831         if (dlm_no_directory(ls))
832                 return find_rsb_nodir(ls, name, len, hash, b, dir_nodeid,
833                                       from_nodeid, flags, r_ret);
834         else
835                 return find_rsb_dir(ls, name, len, hash, b, dir_nodeid,
836                                       from_nodeid, flags, r_ret);
837 }
838
839 /* we have received a request and found that res_master_nodeid != our_nodeid,
840    so we need to return an error or make ourself the master */
841
842 static int validate_master_nodeid(struct dlm_ls *ls, struct dlm_rsb *r,
843                                   int from_nodeid)
844 {
845         if (dlm_no_directory(ls)) {
846                 log_error(ls, "find_rsb keep from_nodeid %d master %d dir %d",
847                           from_nodeid, r->res_master_nodeid,
848                           r->res_dir_nodeid);
849                 dlm_print_rsb(r);
850                 return -ENOTBLK;
851         }
852
853         if (from_nodeid != r->res_dir_nodeid) {
854                 /* our rsb is not master, and another node (not the dir node)
855                    has sent us a request.  this is much more common when our
856                    master_nodeid is zero, so limit debug to non-zero.  */
857
858                 if (r->res_master_nodeid) {
859                         log_debug(ls, "validate master from_other %d master %d "
860                                   "dir %d first %x %s", from_nodeid,
861                                   r->res_master_nodeid, r->res_dir_nodeid,
862                                   r->res_first_lkid, r->res_name);
863                 }
864                 return -ENOTBLK;
865         } else {
866                 /* our rsb is not master, but the dir nodeid has sent us a
867                    request; this could happen with master 0 / res_nodeid -1 */
868
869                 if (r->res_master_nodeid) {
870                         log_error(ls, "validate master from_dir %d master %d "
871                                   "first %x %s",
872                                   from_nodeid, r->res_master_nodeid,
873                                   r->res_first_lkid, r->res_name);
874                 }
875
876                 r->res_master_nodeid = dlm_our_nodeid();
877                 r->res_nodeid = 0;
878                 return 0;
879         }
880 }
881
882 /*
883  * We're the dir node for this res and another node wants to know the
884  * master nodeid.  During normal operation (non recovery) this is only
885  * called from receive_lookup(); master lookups when the local node is
886  * the dir node are done by find_rsb().
887  *
888  * normal operation, we are the dir node for a resource
889  * . _request_lock
890  * . set_master
891  * . send_lookup
892  * . receive_lookup
893  * . dlm_master_lookup flags 0
894  *
895  * recover directory, we are rebuilding dir for all resources
896  * . dlm_recover_directory
897  * . dlm_rcom_names
898  *   remote node sends back the rsb names it is master of and we are dir of
899  * . dlm_master_lookup RECOVER_DIR (fix_master 0, from_master 1)
900  *   we either create new rsb setting remote node as master, or find existing
901  *   rsb and set master to be the remote node.
902  *
903  * recover masters, we are finding the new master for resources
904  * . dlm_recover_masters
905  * . recover_master
906  * . dlm_send_rcom_lookup
907  * . receive_rcom_lookup
908  * . dlm_master_lookup RECOVER_MASTER (fix_master 1, from_master 0)
909  */
910
911 int dlm_master_lookup(struct dlm_ls *ls, int from_nodeid, char *name, int len,
912                       unsigned int flags, int *r_nodeid, int *result)
913 {
914         struct dlm_rsb *r = NULL;
915         uint32_t hash, b;
916         int from_master = (flags & DLM_LU_RECOVER_DIR);
917         int fix_master = (flags & DLM_LU_RECOVER_MASTER);
918         int our_nodeid = dlm_our_nodeid();
919         int dir_nodeid, error, toss_list = 0;
920
921         if (len > DLM_RESNAME_MAXLEN)
922                 return -EINVAL;
923
924         if (from_nodeid == our_nodeid) {
925                 log_error(ls, "dlm_master_lookup from our_nodeid %d flags %x",
926                           our_nodeid, flags);
927                 return -EINVAL;
928         }
929
930         hash = jhash(name, len, 0);
931         b = hash & (ls->ls_rsbtbl_size - 1);
932
933         dir_nodeid = dlm_hash2nodeid(ls, hash);
934         if (dir_nodeid != our_nodeid) {
935                 log_error(ls, "dlm_master_lookup from %d dir %d our %d h %x %d",
936                           from_nodeid, dir_nodeid, our_nodeid, hash,
937                           ls->ls_num_nodes);
938                 *r_nodeid = -1;
939                 return -EINVAL;
940         }
941
942  retry:
943         error = pre_rsb_struct(ls);
944         if (error < 0)
945                 return error;
946
947         spin_lock(&ls->ls_rsbtbl[b].lock);
948         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
949         if (!error) {
950                 /* because the rsb is active, we need to lock_rsb before
951                    checking/changing re_master_nodeid */
952
953                 hold_rsb(r);
954                 spin_unlock(&ls->ls_rsbtbl[b].lock);
955                 lock_rsb(r);
956                 goto found;
957         }
958
959         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
960         if (error)
961                 goto not_found;
962
963         /* because the rsb is inactive (on toss list), it's not refcounted
964            and lock_rsb is not used, but is protected by the rsbtbl lock */
965
966         toss_list = 1;
967  found:
968         if (r->res_dir_nodeid != our_nodeid) {
969                 /* should not happen, but may as well fix it and carry on */
970                 log_error(ls, "dlm_master_lookup res_dir %d our %d %s",
971                           r->res_dir_nodeid, our_nodeid, r->res_name);
972                 r->res_dir_nodeid = our_nodeid;
973         }
974
975         if (fix_master && dlm_is_removed(ls, r->res_master_nodeid)) {
976                 /* Recovery uses this function to set a new master when
977                    the previous master failed.  Setting NEW_MASTER will
978                    force dlm_recover_masters to call recover_master on this
979                    rsb even though the res_nodeid is no longer removed. */
980
981                 r->res_master_nodeid = from_nodeid;
982                 r->res_nodeid = from_nodeid;
983                 rsb_set_flag(r, RSB_NEW_MASTER);
984
985                 if (toss_list) {
986                         /* I don't think we should ever find it on toss list. */
987                         log_error(ls, "dlm_master_lookup fix_master on toss");
988                         dlm_dump_rsb(r);
989                 }
990         }
991
992         if (from_master && (r->res_master_nodeid != from_nodeid)) {
993                 /* this will happen if from_nodeid became master during
994                    a previous recovery cycle, and we aborted the previous
995                    cycle before recovering this master value */
996
997                 log_limit(ls, "dlm_master_lookup from_master %d "
998                           "master_nodeid %d res_nodeid %d first %x %s",
999                           from_nodeid, r->res_master_nodeid, r->res_nodeid,
1000                           r->res_first_lkid, r->res_name);
1001
1002                 if (r->res_master_nodeid == our_nodeid) {
1003                         log_error(ls, "from_master %d our_master", from_nodeid);
1004                         dlm_dump_rsb(r);
1005                         dlm_send_rcom_lookup_dump(r, from_nodeid);
1006                         goto out_found;
1007                 }
1008
1009                 r->res_master_nodeid = from_nodeid;
1010                 r->res_nodeid = from_nodeid;
1011                 rsb_set_flag(r, RSB_NEW_MASTER);
1012         }
1013
1014         if (!r->res_master_nodeid) {
1015                 /* this will happen if recovery happens while we're looking
1016                    up the master for this rsb */
1017
1018                 log_debug(ls, "dlm_master_lookup master 0 to %d first %x %s",
1019                           from_nodeid, r->res_first_lkid, r->res_name);
1020                 r->res_master_nodeid = from_nodeid;
1021                 r->res_nodeid = from_nodeid;
1022         }
1023
1024         if (!from_master && !fix_master &&
1025             (r->res_master_nodeid == from_nodeid)) {
1026                 /* this can happen when the master sends remove, the dir node
1027                    finds the rsb on the keep list and ignores the remove,
1028                    and the former master sends a lookup */
1029
1030                 log_limit(ls, "dlm_master_lookup from master %d flags %x "
1031                           "first %x %s", from_nodeid, flags,
1032                           r->res_first_lkid, r->res_name);
1033         }
1034
1035  out_found:
1036         *r_nodeid = r->res_master_nodeid;
1037         if (result)
1038                 *result = DLM_LU_MATCH;
1039
1040         if (toss_list) {
1041                 r->res_toss_time = jiffies;
1042                 /* the rsb was inactive (on toss list) */
1043                 spin_unlock(&ls->ls_rsbtbl[b].lock);
1044         } else {
1045                 /* the rsb was active */
1046                 unlock_rsb(r);
1047                 put_rsb(r);
1048         }
1049         return 0;
1050
1051  not_found:
1052         error = get_rsb_struct(ls, name, len, &r);
1053         if (error == -EAGAIN) {
1054                 spin_unlock(&ls->ls_rsbtbl[b].lock);
1055                 goto retry;
1056         }
1057         if (error)
1058                 goto out_unlock;
1059
1060         r->res_hash = hash;
1061         r->res_bucket = b;
1062         r->res_dir_nodeid = our_nodeid;
1063         r->res_master_nodeid = from_nodeid;
1064         r->res_nodeid = from_nodeid;
1065         kref_init(&r->res_ref);
1066         r->res_toss_time = jiffies;
1067
1068         error = rsb_insert(r, &ls->ls_rsbtbl[b].toss);
1069         if (error) {
1070                 /* should never happen */
1071                 dlm_free_rsb(r);
1072                 spin_unlock(&ls->ls_rsbtbl[b].lock);
1073                 goto retry;
1074         }
1075
1076         if (result)
1077                 *result = DLM_LU_ADD;
1078         *r_nodeid = from_nodeid;
1079         error = 0;
1080  out_unlock:
1081         spin_unlock(&ls->ls_rsbtbl[b].lock);
1082         return error;
1083 }
1084
1085 static void dlm_dump_rsb_hash(struct dlm_ls *ls, uint32_t hash)
1086 {
1087         struct rb_node *n;
1088         struct dlm_rsb *r;
1089         int i;
1090
1091         for (i = 0; i < ls->ls_rsbtbl_size; i++) {
1092                 spin_lock(&ls->ls_rsbtbl[i].lock);
1093                 for (n = rb_first(&ls->ls_rsbtbl[i].keep); n; n = rb_next(n)) {
1094                         r = rb_entry(n, struct dlm_rsb, res_hashnode);
1095                         if (r->res_hash == hash)
1096                                 dlm_dump_rsb(r);
1097                 }
1098                 spin_unlock(&ls->ls_rsbtbl[i].lock);
1099         }
1100 }
1101
1102 void dlm_dump_rsb_name(struct dlm_ls *ls, char *name, int len)
1103 {
1104         struct dlm_rsb *r = NULL;
1105         uint32_t hash, b;
1106         int error;
1107
1108         hash = jhash(name, len, 0);
1109         b = hash & (ls->ls_rsbtbl_size - 1);
1110
1111         spin_lock(&ls->ls_rsbtbl[b].lock);
1112         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
1113         if (!error)
1114                 goto out_dump;
1115
1116         error = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
1117         if (error)
1118                 goto out;
1119  out_dump:
1120         dlm_dump_rsb(r);
1121  out:
1122         spin_unlock(&ls->ls_rsbtbl[b].lock);
1123 }
1124
1125 static void toss_rsb(struct kref *kref)
1126 {
1127         struct dlm_rsb *r = container_of(kref, struct dlm_rsb, res_ref);
1128         struct dlm_ls *ls = r->res_ls;
1129
1130         DLM_ASSERT(list_empty(&r->res_root_list), dlm_print_rsb(r););
1131         kref_init(&r->res_ref);
1132         rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[r->res_bucket].keep);
1133         rsb_insert(r, &ls->ls_rsbtbl[r->res_bucket].toss);
1134         r->res_toss_time = jiffies;
1135         if (r->res_lvbptr) {
1136                 dlm_free_lvb(r->res_lvbptr);
1137                 r->res_lvbptr = NULL;
1138         }
1139 }
1140
1141 /* See comment for unhold_lkb */
1142
1143 static void unhold_rsb(struct dlm_rsb *r)
1144 {
1145         int rv;
1146         rv = kref_put(&r->res_ref, toss_rsb);
1147         DLM_ASSERT(!rv, dlm_dump_rsb(r););
1148 }
1149
1150 static void kill_rsb(struct kref *kref)
1151 {
1152         struct dlm_rsb *r = container_of(kref, struct dlm_rsb, res_ref);
1153
1154         /* All work is done after the return from kref_put() so we
1155            can release the write_lock before the remove and free. */
1156
1157         DLM_ASSERT(list_empty(&r->res_lookup), dlm_dump_rsb(r););
1158         DLM_ASSERT(list_empty(&r->res_grantqueue), dlm_dump_rsb(r););
1159         DLM_ASSERT(list_empty(&r->res_convertqueue), dlm_dump_rsb(r););
1160         DLM_ASSERT(list_empty(&r->res_waitqueue), dlm_dump_rsb(r););
1161         DLM_ASSERT(list_empty(&r->res_root_list), dlm_dump_rsb(r););
1162         DLM_ASSERT(list_empty(&r->res_recover_list), dlm_dump_rsb(r););
1163 }
1164
1165 /* Attaching/detaching lkb's from rsb's is for rsb reference counting.
1166    The rsb must exist as long as any lkb's for it do. */
1167
1168 static void attach_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb)
1169 {
1170         hold_rsb(r);
1171         lkb->lkb_resource = r;
1172 }
1173
1174 static void detach_lkb(struct dlm_lkb *lkb)
1175 {
1176         if (lkb->lkb_resource) {
1177                 put_rsb(lkb->lkb_resource);
1178                 lkb->lkb_resource = NULL;
1179         }
1180 }
1181
1182 static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
1183 {
1184         struct dlm_lkb *lkb;
1185         int rv, id;
1186
1187         lkb = dlm_allocate_lkb(ls);
1188         if (!lkb)
1189                 return -ENOMEM;
1190
1191         lkb->lkb_nodeid = -1;
1192         lkb->lkb_grmode = DLM_LOCK_IV;
1193         kref_init(&lkb->lkb_ref);
1194         INIT_LIST_HEAD(&lkb->lkb_ownqueue);
1195         INIT_LIST_HEAD(&lkb->lkb_rsb_lookup);
1196         INIT_LIST_HEAD(&lkb->lkb_time_list);
1197         INIT_LIST_HEAD(&lkb->lkb_cb_list);
1198         mutex_init(&lkb->lkb_cb_mutex);
1199         INIT_WORK(&lkb->lkb_cb_work, dlm_callback_work);
1200
1201  retry:
1202         rv = idr_pre_get(&ls->ls_lkbidr, GFP_NOFS);
1203         if (!rv)
1204                 return -ENOMEM;
1205
1206         spin_lock(&ls->ls_lkbidr_spin);
1207         rv = idr_get_new_above(&ls->ls_lkbidr, lkb, 1, &id);
1208         if (!rv)
1209                 lkb->lkb_id = id;
1210         spin_unlock(&ls->ls_lkbidr_spin);
1211
1212         if (rv == -EAGAIN)
1213                 goto retry;
1214
1215         if (rv < 0) {
1216                 log_error(ls, "create_lkb idr error %d", rv);
1217                 return rv;
1218         }
1219
1220         *lkb_ret = lkb;
1221         return 0;
1222 }
1223
1224 static int find_lkb(struct dlm_ls *ls, uint32_t lkid, struct dlm_lkb **lkb_ret)
1225 {
1226         struct dlm_lkb *lkb;
1227
1228         spin_lock(&ls->ls_lkbidr_spin);
1229         lkb = idr_find(&ls->ls_lkbidr, lkid);
1230         if (lkb)
1231                 kref_get(&lkb->lkb_ref);
1232         spin_unlock(&ls->ls_lkbidr_spin);
1233
1234         *lkb_ret = lkb;
1235         return lkb ? 0 : -ENOENT;
1236 }
1237
1238 static void kill_lkb(struct kref *kref)
1239 {
1240         struct dlm_lkb *lkb = container_of(kref, struct dlm_lkb, lkb_ref);
1241
1242         /* All work is done after the return from kref_put() so we
1243            can release the write_lock before the detach_lkb */
1244
1245         DLM_ASSERT(!lkb->lkb_status, dlm_print_lkb(lkb););
1246 }
1247
1248 /* __put_lkb() is used when an lkb may not have an rsb attached to
1249    it so we need to provide the lockspace explicitly */
1250
1251 static int __put_lkb(struct dlm_ls *ls, struct dlm_lkb *lkb)
1252 {
1253         uint32_t lkid = lkb->lkb_id;
1254
1255         spin_lock(&ls->ls_lkbidr_spin);
1256         if (kref_put(&lkb->lkb_ref, kill_lkb)) {
1257                 idr_remove(&ls->ls_lkbidr, lkid);
1258                 spin_unlock(&ls->ls_lkbidr_spin);
1259
1260                 detach_lkb(lkb);
1261
1262                 /* for local/process lkbs, lvbptr points to caller's lksb */
1263                 if (lkb->lkb_lvbptr && is_master_copy(lkb))
1264                         dlm_free_lvb(lkb->lkb_lvbptr);
1265                 dlm_free_lkb(lkb);
1266                 return 1;
1267         } else {
1268                 spin_unlock(&ls->ls_lkbidr_spin);
1269                 return 0;
1270         }
1271 }
1272
1273 int dlm_put_lkb(struct dlm_lkb *lkb)
1274 {
1275         struct dlm_ls *ls;
1276
1277         DLM_ASSERT(lkb->lkb_resource, dlm_print_lkb(lkb););
1278         DLM_ASSERT(lkb->lkb_resource->res_ls, dlm_print_lkb(lkb););
1279
1280         ls = lkb->lkb_resource->res_ls;
1281         return __put_lkb(ls, lkb);
1282 }
1283
1284 /* This is only called to add a reference when the code already holds
1285    a valid reference to the lkb, so there's no need for locking. */
1286
1287 static inline void hold_lkb(struct dlm_lkb *lkb)
1288 {
1289         kref_get(&lkb->lkb_ref);
1290 }
1291
1292 /* This is called when we need to remove a reference and are certain
1293    it's not the last ref.  e.g. del_lkb is always called between a
1294    find_lkb/put_lkb and is always the inverse of a previous add_lkb.
1295    put_lkb would work fine, but would involve unnecessary locking */
1296
1297 static inline void unhold_lkb(struct dlm_lkb *lkb)
1298 {
1299         int rv;
1300         rv = kref_put(&lkb->lkb_ref, kill_lkb);
1301         DLM_ASSERT(!rv, dlm_print_lkb(lkb););
1302 }
1303
1304 static void lkb_add_ordered(struct list_head *new, struct list_head *head,
1305                             int mode)
1306 {
1307         struct dlm_lkb *lkb = NULL;
1308
1309         list_for_each_entry(lkb, head, lkb_statequeue)
1310                 if (lkb->lkb_rqmode < mode)
1311                         break;
1312
1313         __list_add(new, lkb->lkb_statequeue.prev, &lkb->lkb_statequeue);
1314 }
1315
1316 /* add/remove lkb to rsb's grant/convert/wait queue */
1317
1318 static void add_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb, int status)
1319 {
1320         kref_get(&lkb->lkb_ref);
1321
1322         DLM_ASSERT(!lkb->lkb_status, dlm_print_lkb(lkb););
1323
1324         lkb->lkb_timestamp = ktime_get();
1325
1326         lkb->lkb_status = status;
1327
1328         switch (status) {
1329         case DLM_LKSTS_WAITING:
1330                 if (lkb->lkb_exflags & DLM_LKF_HEADQUE)
1331                         list_add(&lkb->lkb_statequeue, &r->res_waitqueue);
1332                 else
1333                         list_add_tail(&lkb->lkb_statequeue, &r->res_waitqueue);
1334                 break;
1335         case DLM_LKSTS_GRANTED:
1336                 /* convention says granted locks kept in order of grmode */
1337                 lkb_add_ordered(&lkb->lkb_statequeue, &r->res_grantqueue,
1338                                 lkb->lkb_grmode);
1339                 break;
1340         case DLM_LKSTS_CONVERT:
1341                 if (lkb->lkb_exflags & DLM_LKF_HEADQUE)
1342                         list_add(&lkb->lkb_statequeue, &r->res_convertqueue);
1343                 else
1344                         list_add_tail(&lkb->lkb_statequeue,
1345                                       &r->res_convertqueue);
1346                 break;
1347         default:
1348                 DLM_ASSERT(0, dlm_print_lkb(lkb); printk("sts=%d\n", status););
1349         }
1350 }
1351
1352 static void del_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb)
1353 {
1354         lkb->lkb_status = 0;
1355         list_del(&lkb->lkb_statequeue);
1356         unhold_lkb(lkb);
1357 }
1358
1359 static void move_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb, int sts)
1360 {
1361         hold_lkb(lkb);
1362         del_lkb(r, lkb);
1363         add_lkb(r, lkb, sts);
1364         unhold_lkb(lkb);
1365 }
1366
1367 static int msg_reply_type(int mstype)
1368 {
1369         switch (mstype) {
1370         case DLM_MSG_REQUEST:
1371                 return DLM_MSG_REQUEST_REPLY;
1372         case DLM_MSG_CONVERT:
1373                 return DLM_MSG_CONVERT_REPLY;
1374         case DLM_MSG_UNLOCK:
1375                 return DLM_MSG_UNLOCK_REPLY;
1376         case DLM_MSG_CANCEL:
1377                 return DLM_MSG_CANCEL_REPLY;
1378         case DLM_MSG_LOOKUP:
1379                 return DLM_MSG_LOOKUP_REPLY;
1380         }
1381         return -1;
1382 }
1383
1384 static int nodeid_warned(int nodeid, int num_nodes, int *warned)
1385 {
1386         int i;
1387
1388         for (i = 0; i < num_nodes; i++) {
1389                 if (!warned[i]) {
1390                         warned[i] = nodeid;
1391                         return 0;
1392                 }
1393                 if (warned[i] == nodeid)
1394                         return 1;
1395         }
1396         return 0;
1397 }
1398
1399 void dlm_scan_waiters(struct dlm_ls *ls)
1400 {
1401         struct dlm_lkb *lkb;
1402         ktime_t zero = ktime_set(0, 0);
1403         s64 us;
1404         s64 debug_maxus = 0;
1405         u32 debug_scanned = 0;
1406         u32 debug_expired = 0;
1407         int num_nodes = 0;
1408         int *warned = NULL;
1409
1410         if (!dlm_config.ci_waitwarn_us)
1411                 return;
1412
1413         mutex_lock(&ls->ls_waiters_mutex);
1414
1415         list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) {
1416                 if (ktime_equal(lkb->lkb_wait_time, zero))
1417                         continue;
1418
1419                 debug_scanned++;
1420
1421                 us = ktime_to_us(ktime_sub(ktime_get(), lkb->lkb_wait_time));
1422
1423                 if (us < dlm_config.ci_waitwarn_us)
1424                         continue;
1425
1426                 lkb->lkb_wait_time = zero;
1427
1428                 debug_expired++;
1429                 if (us > debug_maxus)
1430                         debug_maxus = us;
1431
1432                 if (!num_nodes) {
1433                         num_nodes = ls->ls_num_nodes;
1434                         warned = kzalloc(num_nodes * sizeof(int), GFP_KERNEL);
1435                 }
1436                 if (!warned)
1437                         continue;
1438                 if (nodeid_warned(lkb->lkb_wait_nodeid, num_nodes, warned))
1439                         continue;
1440
1441                 log_error(ls, "waitwarn %x %lld %d us check connection to "
1442                           "node %d", lkb->lkb_id, (long long)us,
1443                           dlm_config.ci_waitwarn_us, lkb->lkb_wait_nodeid);
1444         }
1445         mutex_unlock(&ls->ls_waiters_mutex);
1446         kfree(warned);
1447
1448         if (debug_expired)
1449                 log_debug(ls, "scan_waiters %u warn %u over %d us max %lld us",
1450                           debug_scanned, debug_expired,
1451                           dlm_config.ci_waitwarn_us, (long long)debug_maxus);
1452 }
1453
1454 /* add/remove lkb from global waiters list of lkb's waiting for
1455    a reply from a remote node */
1456
1457 static int add_to_waiters(struct dlm_lkb *lkb, int mstype, int to_nodeid)
1458 {
1459         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1460         int error = 0;
1461
1462         mutex_lock(&ls->ls_waiters_mutex);
1463
1464         if (is_overlap_unlock(lkb) ||
1465             (is_overlap_cancel(lkb) && (mstype == DLM_MSG_CANCEL))) {
1466                 error = -EINVAL;
1467                 goto out;
1468         }
1469
1470         if (lkb->lkb_wait_type || is_overlap_cancel(lkb)) {
1471                 switch (mstype) {
1472                 case DLM_MSG_UNLOCK:
1473                         lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK;
1474                         break;
1475                 case DLM_MSG_CANCEL:
1476                         lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL;
1477                         break;
1478                 default:
1479                         error = -EBUSY;
1480                         goto out;
1481                 }
1482                 lkb->lkb_wait_count++;
1483                 hold_lkb(lkb);
1484
1485                 log_debug(ls, "addwait %x cur %d overlap %d count %d f %x",
1486                           lkb->lkb_id, lkb->lkb_wait_type, mstype,
1487                           lkb->lkb_wait_count, lkb->lkb_flags);
1488                 goto out;
1489         }
1490
1491         DLM_ASSERT(!lkb->lkb_wait_count,
1492                    dlm_print_lkb(lkb);
1493                    printk("wait_count %d\n", lkb->lkb_wait_count););
1494
1495         lkb->lkb_wait_count++;
1496         lkb->lkb_wait_type = mstype;
1497         lkb->lkb_wait_time = ktime_get();
1498         lkb->lkb_wait_nodeid = to_nodeid; /* for debugging */
1499         hold_lkb(lkb);
1500         list_add(&lkb->lkb_wait_reply, &ls->ls_waiters);
1501  out:
1502         if (error)
1503                 log_error(ls, "addwait error %x %d flags %x %d %d %s",
1504                           lkb->lkb_id, error, lkb->lkb_flags, mstype,
1505                           lkb->lkb_wait_type, lkb->lkb_resource->res_name);
1506         mutex_unlock(&ls->ls_waiters_mutex);
1507         return error;
1508 }
1509
1510 /* We clear the RESEND flag because we might be taking an lkb off the waiters
1511    list as part of process_requestqueue (e.g. a lookup that has an optimized
1512    request reply on the requestqueue) between dlm_recover_waiters_pre() which
1513    set RESEND and dlm_recover_waiters_post() */
1514
1515 static int _remove_from_waiters(struct dlm_lkb *lkb, int mstype,
1516                                 struct dlm_message *ms)
1517 {
1518         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1519         int overlap_done = 0;
1520
1521         if (is_overlap_unlock(lkb) && (mstype == DLM_MSG_UNLOCK_REPLY)) {
1522                 log_debug(ls, "remwait %x unlock_reply overlap", lkb->lkb_id);
1523                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK;
1524                 overlap_done = 1;
1525                 goto out_del;
1526         }
1527
1528         if (is_overlap_cancel(lkb) && (mstype == DLM_MSG_CANCEL_REPLY)) {
1529                 log_debug(ls, "remwait %x cancel_reply overlap", lkb->lkb_id);
1530                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
1531                 overlap_done = 1;
1532                 goto out_del;
1533         }
1534
1535         /* Cancel state was preemptively cleared by a successful convert,
1536            see next comment, nothing to do. */
1537
1538         if ((mstype == DLM_MSG_CANCEL_REPLY) &&
1539             (lkb->lkb_wait_type != DLM_MSG_CANCEL)) {
1540                 log_debug(ls, "remwait %x cancel_reply wait_type %d",
1541                           lkb->lkb_id, lkb->lkb_wait_type);
1542                 return -1;
1543         }
1544
1545         /* Remove for the convert reply, and premptively remove for the
1546            cancel reply.  A convert has been granted while there's still
1547            an outstanding cancel on it (the cancel is moot and the result
1548            in the cancel reply should be 0).  We preempt the cancel reply
1549            because the app gets the convert result and then can follow up
1550            with another op, like convert.  This subsequent op would see the
1551            lingering state of the cancel and fail with -EBUSY. */
1552
1553         if ((mstype == DLM_MSG_CONVERT_REPLY) &&
1554             (lkb->lkb_wait_type == DLM_MSG_CONVERT) &&
1555             is_overlap_cancel(lkb) && ms && !ms->m_result) {
1556                 log_debug(ls, "remwait %x convert_reply zap overlap_cancel",
1557                           lkb->lkb_id);
1558                 lkb->lkb_wait_type = 0;
1559                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
1560                 lkb->lkb_wait_count--;
1561                 goto out_del;
1562         }
1563
1564         /* N.B. type of reply may not always correspond to type of original
1565            msg due to lookup->request optimization, verify others? */
1566
1567         if (lkb->lkb_wait_type) {
1568                 lkb->lkb_wait_type = 0;
1569                 goto out_del;
1570         }
1571
1572         log_error(ls, "remwait error %x remote %d %x msg %d flags %x no wait",
1573                   lkb->lkb_id, ms ? ms->m_header.h_nodeid : 0, lkb->lkb_remid,
1574                   mstype, lkb->lkb_flags);
1575         return -1;
1576
1577  out_del:
1578         /* the force-unlock/cancel has completed and we haven't recvd a reply
1579            to the op that was in progress prior to the unlock/cancel; we
1580            give up on any reply to the earlier op.  FIXME: not sure when/how
1581            this would happen */
1582
1583         if (overlap_done && lkb->lkb_wait_type) {
1584                 log_error(ls, "remwait error %x reply %d wait_type %d overlap",
1585                           lkb->lkb_id, mstype, lkb->lkb_wait_type);
1586                 lkb->lkb_wait_count--;
1587                 lkb->lkb_wait_type = 0;
1588         }
1589
1590         DLM_ASSERT(lkb->lkb_wait_count, dlm_print_lkb(lkb););
1591
1592         lkb->lkb_flags &= ~DLM_IFL_RESEND;
1593         lkb->lkb_wait_count--;
1594         if (!lkb->lkb_wait_count)
1595                 list_del_init(&lkb->lkb_wait_reply);
1596         unhold_lkb(lkb);
1597         return 0;
1598 }
1599
1600 static int remove_from_waiters(struct dlm_lkb *lkb, int mstype)
1601 {
1602         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1603         int error;
1604
1605         mutex_lock(&ls->ls_waiters_mutex);
1606         error = _remove_from_waiters(lkb, mstype, NULL);
1607         mutex_unlock(&ls->ls_waiters_mutex);
1608         return error;
1609 }
1610
1611 /* Handles situations where we might be processing a "fake" or "stub" reply in
1612    which we can't try to take waiters_mutex again. */
1613
1614 static int remove_from_waiters_ms(struct dlm_lkb *lkb, struct dlm_message *ms)
1615 {
1616         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1617         int error;
1618
1619         if (ms->m_flags != DLM_IFL_STUB_MS)
1620                 mutex_lock(&ls->ls_waiters_mutex);
1621         error = _remove_from_waiters(lkb, ms->m_type, ms);
1622         if (ms->m_flags != DLM_IFL_STUB_MS)
1623                 mutex_unlock(&ls->ls_waiters_mutex);
1624         return error;
1625 }
1626
1627 /* If there's an rsb for the same resource being removed, ensure
1628    that the remove message is sent before the new lookup message.
1629    It should be rare to need a delay here, but if not, then it may
1630    be worthwhile to add a proper wait mechanism rather than a delay. */
1631
1632 static void wait_pending_remove(struct dlm_rsb *r)
1633 {
1634         struct dlm_ls *ls = r->res_ls;
1635  restart:
1636         spin_lock(&ls->ls_remove_spin);
1637         if (ls->ls_remove_len &&
1638             !rsb_cmp(r, ls->ls_remove_name, ls->ls_remove_len)) {
1639                 log_debug(ls, "delay lookup for remove dir %d %s",
1640                           r->res_dir_nodeid, r->res_name);
1641                 spin_unlock(&ls->ls_remove_spin);
1642                 msleep(1);
1643                 goto restart;
1644         }
1645         spin_unlock(&ls->ls_remove_spin);
1646 }
1647
1648 /*
1649  * ls_remove_spin protects ls_remove_name and ls_remove_len which are
1650  * read by other threads in wait_pending_remove.  ls_remove_names
1651  * and ls_remove_lens are only used by the scan thread, so they do
1652  * not need protection.
1653  */
1654
1655 static void shrink_bucket(struct dlm_ls *ls, int b)
1656 {
1657         struct rb_node *n, *next;
1658         struct dlm_rsb *r;
1659         char *name;
1660         int our_nodeid = dlm_our_nodeid();
1661         int remote_count = 0;
1662         int i, len, rv;
1663
1664         memset(&ls->ls_remove_lens, 0, sizeof(int) * DLM_REMOVE_NAMES_MAX);
1665
1666         spin_lock(&ls->ls_rsbtbl[b].lock);
1667         for (n = rb_first(&ls->ls_rsbtbl[b].toss); n; n = next) {
1668                 next = rb_next(n);
1669                 r = rb_entry(n, struct dlm_rsb, res_hashnode);
1670
1671                 /* If we're the directory record for this rsb, and
1672                    we're not the master of it, then we need to wait
1673                    for the master node to send us a dir remove for
1674                    before removing the dir record. */
1675
1676                 if (!dlm_no_directory(ls) &&
1677                     (r->res_master_nodeid != our_nodeid) &&
1678                     (dlm_dir_nodeid(r) == our_nodeid)) {
1679                         continue;
1680                 }
1681
1682                 if (!time_after_eq(jiffies, r->res_toss_time +
1683                                    dlm_config.ci_toss_secs * HZ)) {
1684                         continue;
1685                 }
1686
1687                 if (!dlm_no_directory(ls) &&
1688                     (r->res_master_nodeid == our_nodeid) &&
1689                     (dlm_dir_nodeid(r) != our_nodeid)) {
1690
1691                         /* We're the master of this rsb but we're not
1692                            the directory record, so we need to tell the
1693                            dir node to remove the dir record. */
1694
1695                         ls->ls_remove_lens[remote_count] = r->res_length;
1696                         memcpy(ls->ls_remove_names[remote_count], r->res_name,
1697                                DLM_RESNAME_MAXLEN);
1698                         remote_count++;
1699
1700                         if (remote_count >= DLM_REMOVE_NAMES_MAX)
1701                                 break;
1702                         continue;
1703                 }
1704
1705                 if (!kref_put(&r->res_ref, kill_rsb)) {
1706                         log_error(ls, "tossed rsb in use %s", r->res_name);
1707                         continue;
1708                 }
1709
1710                 rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[b].toss);
1711                 dlm_free_rsb(r);
1712         }
1713         spin_unlock(&ls->ls_rsbtbl[b].lock);
1714
1715         /*
1716          * While searching for rsb's to free, we found some that require
1717          * remote removal.  We leave them in place and find them again here
1718          * so there is a very small gap between removing them from the toss
1719          * list and sending the removal.  Keeping this gap small is
1720          * important to keep us (the master node) from being out of sync
1721          * with the remote dir node for very long.
1722          *
1723          * From the time the rsb is removed from toss until just after
1724          * send_remove, the rsb name is saved in ls_remove_name.  A new
1725          * lookup checks this to ensure that a new lookup message for the
1726          * same resource name is not sent just before the remove message.
1727          */
1728
1729         for (i = 0; i < remote_count; i++) {
1730                 name = ls->ls_remove_names[i];
1731                 len = ls->ls_remove_lens[i];
1732
1733                 spin_lock(&ls->ls_rsbtbl[b].lock);
1734                 rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
1735                 if (rv) {
1736                         spin_unlock(&ls->ls_rsbtbl[b].lock);
1737                         log_debug(ls, "remove_name not toss %s", name);
1738                         continue;
1739                 }
1740
1741                 if (r->res_master_nodeid != our_nodeid) {
1742                         spin_unlock(&ls->ls_rsbtbl[b].lock);
1743                         log_debug(ls, "remove_name master %d dir %d our %d %s",
1744                                   r->res_master_nodeid, r->res_dir_nodeid,
1745                                   our_nodeid, name);
1746                         continue;
1747                 }
1748
1749                 if (r->res_dir_nodeid == our_nodeid) {
1750                         /* should never happen */
1751                         spin_unlock(&ls->ls_rsbtbl[b].lock);
1752                         log_error(ls, "remove_name dir %d master %d our %d %s",
1753                                   r->res_dir_nodeid, r->res_master_nodeid,
1754                                   our_nodeid, name);
1755                         continue;
1756                 }
1757
1758                 if (!time_after_eq(jiffies, r->res_toss_time +
1759                                    dlm_config.ci_toss_secs * HZ)) {
1760                         spin_unlock(&ls->ls_rsbtbl[b].lock);
1761                         log_debug(ls, "remove_name toss_time %lu now %lu %s",
1762                                   r->res_toss_time, jiffies, name);
1763                         continue;
1764                 }
1765
1766                 if (!kref_put(&r->res_ref, kill_rsb)) {
1767                         spin_unlock(&ls->ls_rsbtbl[b].lock);
1768                         log_error(ls, "remove_name in use %s", name);
1769                         continue;
1770                 }
1771
1772                 rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[b].toss);
1773
1774                 /* block lookup of same name until we've sent remove */
1775                 spin_lock(&ls->ls_remove_spin);
1776                 ls->ls_remove_len = len;
1777                 memcpy(ls->ls_remove_name, name, DLM_RESNAME_MAXLEN);
1778                 spin_unlock(&ls->ls_remove_spin);
1779                 spin_unlock(&ls->ls_rsbtbl[b].lock);
1780
1781                 send_remove(r);
1782
1783                 /* allow lookup of name again */
1784                 spin_lock(&ls->ls_remove_spin);
1785                 ls->ls_remove_len = 0;
1786                 memset(ls->ls_remove_name, 0, DLM_RESNAME_MAXLEN);
1787                 spin_unlock(&ls->ls_remove_spin);
1788
1789                 dlm_free_rsb(r);
1790         }
1791 }
1792
1793 void dlm_scan_rsbs(struct dlm_ls *ls)
1794 {
1795         int i;
1796
1797         for (i = 0; i < ls->ls_rsbtbl_size; i++) {
1798                 shrink_bucket(ls, i);
1799                 if (dlm_locking_stopped(ls))
1800                         break;
1801                 cond_resched();
1802         }
1803 }
1804
1805 static void add_timeout(struct dlm_lkb *lkb)
1806 {
1807         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1808
1809         if (is_master_copy(lkb))
1810                 return;
1811
1812         if (test_bit(LSFL_TIMEWARN, &ls->ls_flags) &&
1813             !(lkb->lkb_exflags & DLM_LKF_NODLCKWT)) {
1814                 lkb->lkb_flags |= DLM_IFL_WATCH_TIMEWARN;
1815                 goto add_it;
1816         }
1817         if (lkb->lkb_exflags & DLM_LKF_TIMEOUT)
1818                 goto add_it;
1819         return;
1820
1821  add_it:
1822         DLM_ASSERT(list_empty(&lkb->lkb_time_list), dlm_print_lkb(lkb););
1823         mutex_lock(&ls->ls_timeout_mutex);
1824         hold_lkb(lkb);
1825         list_add_tail(&lkb->lkb_time_list, &ls->ls_timeout);
1826         mutex_unlock(&ls->ls_timeout_mutex);
1827 }
1828
1829 static void del_timeout(struct dlm_lkb *lkb)
1830 {
1831         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
1832
1833         mutex_lock(&ls->ls_timeout_mutex);
1834         if (!list_empty(&lkb->lkb_time_list)) {
1835                 list_del_init(&lkb->lkb_time_list);
1836                 unhold_lkb(lkb);
1837         }
1838         mutex_unlock(&ls->ls_timeout_mutex);
1839 }
1840
1841 /* FIXME: is it safe to look at lkb_exflags, lkb_flags, lkb_timestamp, and
1842    lkb_lksb_timeout without lock_rsb?  Note: we can't lock timeout_mutex
1843    and then lock rsb because of lock ordering in add_timeout.  We may need
1844    to specify some special timeout-related bits in the lkb that are just to
1845    be accessed under the timeout_mutex. */
1846
1847 void dlm_scan_timeout(struct dlm_ls *ls)
1848 {
1849         struct dlm_rsb *r;
1850         struct dlm_lkb *lkb;
1851         int do_cancel, do_warn;
1852         s64 wait_us;
1853
1854         for (;;) {
1855                 if (dlm_locking_stopped(ls))
1856                         break;
1857
1858                 do_cancel = 0;
1859                 do_warn = 0;
1860                 mutex_lock(&ls->ls_timeout_mutex);
1861                 list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list) {
1862
1863                         wait_us = ktime_to_us(ktime_sub(ktime_get(),
1864                                                         lkb->lkb_timestamp));
1865
1866                         if ((lkb->lkb_exflags & DLM_LKF_TIMEOUT) &&
1867                             wait_us >= (lkb->lkb_timeout_cs * 10000))
1868                                 do_cancel = 1;
1869
1870                         if ((lkb->lkb_flags & DLM_IFL_WATCH_TIMEWARN) &&
1871                             wait_us >= dlm_config.ci_timewarn_cs * 10000)
1872                                 do_warn = 1;
1873
1874                         if (!do_cancel && !do_warn)
1875                                 continue;
1876                         hold_lkb(lkb);
1877                         break;
1878                 }
1879                 mutex_unlock(&ls->ls_timeout_mutex);
1880
1881                 if (!do_cancel && !do_warn)
1882                         break;
1883
1884                 r = lkb->lkb_resource;
1885                 hold_rsb(r);
1886                 lock_rsb(r);
1887
1888                 if (do_warn) {
1889                         /* clear flag so we only warn once */
1890                         lkb->lkb_flags &= ~DLM_IFL_WATCH_TIMEWARN;
1891                         if (!(lkb->lkb_exflags & DLM_LKF_TIMEOUT))
1892                                 del_timeout(lkb);
1893                         dlm_timeout_warn(lkb);
1894                 }
1895
1896                 if (do_cancel) {
1897                         log_debug(ls, "timeout cancel %x node %d %s",
1898                                   lkb->lkb_id, lkb->lkb_nodeid, r->res_name);
1899                         lkb->lkb_flags &= ~DLM_IFL_WATCH_TIMEWARN;
1900                         lkb->lkb_flags |= DLM_IFL_TIMEOUT_CANCEL;
1901                         del_timeout(lkb);
1902                         _cancel_lock(r, lkb);
1903                 }
1904
1905                 unlock_rsb(r);
1906                 unhold_rsb(r);
1907                 dlm_put_lkb(lkb);
1908         }
1909 }
1910
1911 /* This is only called by dlm_recoverd, and we rely on dlm_ls_stop() stopping
1912    dlm_recoverd before checking/setting ls_recover_begin. */
1913
1914 void dlm_adjust_timeouts(struct dlm_ls *ls)
1915 {
1916         struct dlm_lkb *lkb;
1917         u64 adj_us = jiffies_to_usecs(jiffies - ls->ls_recover_begin);
1918
1919         ls->ls_recover_begin = 0;
1920         mutex_lock(&ls->ls_timeout_mutex);
1921         list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list)
1922                 lkb->lkb_timestamp = ktime_add_us(lkb->lkb_timestamp, adj_us);
1923         mutex_unlock(&ls->ls_timeout_mutex);
1924
1925         if (!dlm_config.ci_waitwarn_us)
1926                 return;
1927
1928         mutex_lock(&ls->ls_waiters_mutex);
1929         list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) {
1930                 if (ktime_to_us(lkb->lkb_wait_time))
1931                         lkb->lkb_wait_time = ktime_get();
1932         }
1933         mutex_unlock(&ls->ls_waiters_mutex);
1934 }
1935
1936 /* lkb is master or local copy */
1937
1938 static void set_lvb_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
1939 {
1940         int b, len = r->res_ls->ls_lvblen;
1941
1942         /* b=1 lvb returned to caller
1943            b=0 lvb written to rsb or invalidated
1944            b=-1 do nothing */
1945
1946         b =  dlm_lvb_operations[lkb->lkb_grmode + 1][lkb->lkb_rqmode + 1];
1947
1948         if (b == 1) {
1949                 if (!lkb->lkb_lvbptr)
1950                         return;
1951
1952                 if (!(lkb->lkb_exflags & DLM_LKF_VALBLK))
1953                         return;
1954
1955                 if (!r->res_lvbptr)
1956                         return;
1957
1958                 memcpy(lkb->lkb_lvbptr, r->res_lvbptr, len);
1959                 lkb->lkb_lvbseq = r->res_lvbseq;
1960
1961         } else if (b == 0) {
1962                 if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) {
1963                         rsb_set_flag(r, RSB_VALNOTVALID);
1964                         return;
1965                 }
1966
1967                 if (!lkb->lkb_lvbptr)
1968                         return;
1969
1970                 if (!(lkb->lkb_exflags & DLM_LKF_VALBLK))
1971                         return;
1972
1973                 if (!r->res_lvbptr)
1974                         r->res_lvbptr = dlm_allocate_lvb(r->res_ls);
1975
1976                 if (!r->res_lvbptr)
1977                         return;
1978
1979                 memcpy(r->res_lvbptr, lkb->lkb_lvbptr, len);
1980                 r->res_lvbseq++;
1981                 lkb->lkb_lvbseq = r->res_lvbseq;
1982                 rsb_clear_flag(r, RSB_VALNOTVALID);
1983         }
1984
1985         if (rsb_flag(r, RSB_VALNOTVALID))
1986                 lkb->lkb_sbflags |= DLM_SBF_VALNOTVALID;
1987 }
1988
1989 static void set_lvb_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb)
1990 {
1991         if (lkb->lkb_grmode < DLM_LOCK_PW)
1992                 return;
1993
1994         if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) {
1995                 rsb_set_flag(r, RSB_VALNOTVALID);
1996                 return;
1997         }
1998
1999         if (!lkb->lkb_lvbptr)
2000                 return;
2001
2002         if (!(lkb->lkb_exflags & DLM_LKF_VALBLK))
2003                 return;
2004
2005         if (!r->res_lvbptr)
2006                 r->res_lvbptr = dlm_allocate_lvb(r->res_ls);
2007
2008         if (!r->res_lvbptr)
2009                 return;
2010
2011         memcpy(r->res_lvbptr, lkb->lkb_lvbptr, r->res_ls->ls_lvblen);
2012         r->res_lvbseq++;
2013         rsb_clear_flag(r, RSB_VALNOTVALID);
2014 }
2015
2016 /* lkb is process copy (pc) */
2017
2018 static void set_lvb_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb,
2019                             struct dlm_message *ms)
2020 {
2021         int b;
2022
2023         if (!lkb->lkb_lvbptr)
2024                 return;
2025
2026         if (!(lkb->lkb_exflags & DLM_LKF_VALBLK))
2027                 return;
2028
2029         b = dlm_lvb_operations[lkb->lkb_grmode + 1][lkb->lkb_rqmode + 1];
2030         if (b == 1) {
2031                 int len = receive_extralen(ms);
2032                 if (len > DLM_RESNAME_MAXLEN)
2033                         len = DLM_RESNAME_MAXLEN;
2034                 memcpy(lkb->lkb_lvbptr, ms->m_extra, len);
2035                 lkb->lkb_lvbseq = ms->m_lvbseq;
2036         }
2037 }
2038
2039 /* Manipulate lkb's on rsb's convert/granted/waiting queues
2040    remove_lock -- used for unlock, removes lkb from granted
2041    revert_lock -- used for cancel, moves lkb from convert to granted
2042    grant_lock  -- used for request and convert, adds lkb to granted or
2043                   moves lkb from convert or waiting to granted
2044
2045    Each of these is used for master or local copy lkb's.  There is
2046    also a _pc() variation used to make the corresponding change on
2047    a process copy (pc) lkb. */
2048
2049 static void _remove_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
2050 {
2051         del_lkb(r, lkb);
2052         lkb->lkb_grmode = DLM_LOCK_IV;
2053         /* this unhold undoes the original ref from create_lkb()
2054            so this leads to the lkb being freed */
2055         unhold_lkb(lkb);
2056 }
2057
2058 static void remove_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
2059 {
2060         set_lvb_unlock(r, lkb);
2061         _remove_lock(r, lkb);
2062 }
2063
2064 static void remove_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb)
2065 {
2066         _remove_lock(r, lkb);
2067 }
2068
2069 /* returns: 0 did nothing
2070             1 moved lock to granted
2071            -1 removed lock */
2072
2073 static int revert_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
2074 {
2075         int rv = 0;
2076
2077         lkb->lkb_rqmode = DLM_LOCK_IV;
2078
2079         switch (lkb->lkb_status) {
2080         case DLM_LKSTS_GRANTED:
2081                 break;
2082         case DLM_LKSTS_CONVERT:
2083                 move_lkb(r, lkb, DLM_LKSTS_GRANTED);
2084                 rv = 1;
2085                 break;
2086         case DLM_LKSTS_WAITING:
2087                 del_lkb(r, lkb);
2088                 lkb->lkb_grmode = DLM_LOCK_IV;
2089                 /* this unhold undoes the original ref from create_lkb()
2090                    so this leads to the lkb being freed */
2091                 unhold_lkb(lkb);
2092                 rv = -1;
2093                 break;
2094         default:
2095                 log_print("invalid status for revert %d", lkb->lkb_status);
2096         }
2097         return rv;
2098 }
2099
2100 static int revert_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb)
2101 {
2102         return revert_lock(r, lkb);
2103 }
2104
2105 static void _grant_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
2106 {
2107         if (lkb->lkb_grmode != lkb->lkb_rqmode) {
2108                 lkb->lkb_grmode = lkb->lkb_rqmode;
2109                 if (lkb->lkb_status)
2110                         move_lkb(r, lkb, DLM_LKSTS_GRANTED);
2111                 else
2112                         add_lkb(r, lkb, DLM_LKSTS_GRANTED);
2113         }
2114
2115         lkb->lkb_rqmode = DLM_LOCK_IV;
2116         lkb->lkb_highbast = 0;
2117 }
2118
2119 static void grant_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
2120 {
2121         set_lvb_lock(r, lkb);
2122         _grant_lock(r, lkb);
2123 }
2124
2125 static void grant_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb,
2126                           struct dlm_message *ms)
2127 {
2128         set_lvb_lock_pc(r, lkb, ms);
2129         _grant_lock(r, lkb);
2130 }
2131
2132 /* called by grant_pending_locks() which means an async grant message must
2133    be sent to the requesting node in addition to granting the lock if the
2134    lkb belongs to a remote node. */
2135
2136 static void grant_lock_pending(struct dlm_rsb *r, struct dlm_lkb *lkb)
2137 {
2138         grant_lock(r, lkb);
2139         if (is_master_copy(lkb))
2140                 send_grant(r, lkb);
2141         else
2142                 queue_cast(r, lkb, 0);
2143 }
2144
2145 /* The special CONVDEADLK, ALTPR and ALTCW flags allow the master to
2146    change the granted/requested modes.  We're munging things accordingly in
2147    the process copy.
2148    CONVDEADLK: our grmode may have been forced down to NL to resolve a
2149    conversion deadlock
2150    ALTPR/ALTCW: our rqmode may have been changed to PR or CW to become
2151    compatible with other granted locks */
2152
2153 static void munge_demoted(struct dlm_lkb *lkb)
2154 {
2155         if (lkb->lkb_rqmode == DLM_LOCK_IV || lkb->lkb_grmode == DLM_LOCK_IV) {
2156                 log_print("munge_demoted %x invalid modes gr %d rq %d",
2157                           lkb->lkb_id, lkb->lkb_grmode, lkb->lkb_rqmode);
2158                 return;
2159         }
2160
2161         lkb->lkb_grmode = DLM_LOCK_NL;
2162 }
2163
2164 static void munge_altmode(struct dlm_lkb *lkb, struct dlm_message *ms)
2165 {
2166         if (ms->m_type != DLM_MSG_REQUEST_REPLY &&
2167             ms->m_type != DLM_MSG_GRANT) {
2168                 log_print("munge_altmode %x invalid reply type %d",
2169                           lkb->lkb_id, ms->m_type);
2170                 return;
2171         }
2172
2173         if (lkb->lkb_exflags & DLM_LKF_ALTPR)
2174                 lkb->lkb_rqmode = DLM_LOCK_PR;
2175         else if (lkb->lkb_exflags & DLM_LKF_ALTCW)
2176                 lkb->lkb_rqmode = DLM_LOCK_CW;
2177         else {
2178                 log_print("munge_altmode invalid exflags %x", lkb->lkb_exflags);
2179                 dlm_print_lkb(lkb);
2180         }
2181 }
2182
2183 static inline int first_in_list(struct dlm_lkb *lkb, struct list_head *head)
2184 {
2185         struct dlm_lkb *first = list_entry(head->next, struct dlm_lkb,
2186                                            lkb_statequeue);
2187         if (lkb->lkb_id == first->lkb_id)
2188                 return 1;
2189
2190         return 0;
2191 }
2192
2193 /* Check if the given lkb conflicts with another lkb on the queue. */
2194
2195 static int queue_conflict(struct list_head *head, struct dlm_lkb *lkb)
2196 {
2197         struct dlm_lkb *this;
2198
2199         list_for_each_entry(this, head, lkb_statequeue) {
2200                 if (this == lkb)
2201                         continue;
2202                 if (!modes_compat(this, lkb))
2203                         return 1;
2204         }
2205         return 0;
2206 }
2207
2208 /*
2209  * "A conversion deadlock arises with a pair of lock requests in the converting
2210  * queue for one resource.  The granted mode of each lock blocks the requested
2211  * mode of the other lock."
2212  *
2213  * Part 2: if the granted mode of lkb is preventing an earlier lkb in the
2214  * convert queue from being granted, then deadlk/demote lkb.
2215  *
2216  * Example:
2217  * Granted Queue: empty
2218  * Convert Queue: NL->EX (first lock)
2219  *                PR->EX (second lock)
2220  *
2221  * The first lock can't be granted because of the granted mode of the second
2222  * lock and the second lock can't be granted because it's not first in the
2223  * list.  We either cancel lkb's conversion (PR->EX) and return EDEADLK, or we
2224  * demote the granted mode of lkb (from PR to NL) if it has the CONVDEADLK
2225  * flag set and return DEMOTED in the lksb flags.
2226  *
2227  * Originally, this function detected conv-deadlk in a more limited scope:
2228  * - if !modes_compat(lkb1, lkb2) && !modes_compat(lkb2, lkb1), or
2229  * - if lkb1 was the first entry in the queue (not just earlier), and was
2230  *   blocked by the granted mode of lkb2, and there was nothing on the
2231  *   granted queue preventing lkb1 from being granted immediately, i.e.
2232  *   lkb2 was the only thing preventing lkb1 from being granted.
2233  *
2234  * That second condition meant we'd only say there was conv-deadlk if
2235  * resolving it (by demotion) would lead to the first lock on the convert
2236  * queue being granted right away.  It allowed conversion deadlocks to exist
2237  * between locks on the convert queue while they couldn't be granted anyway.
2238  *
2239  * Now, we detect and take action on conversion deadlocks immediately when
2240  * they're created, even if they may not be immediately consequential.  If
2241  * lkb1 exists anywhere in the convert queue and lkb2 comes in with a granted
2242  * mode that would prevent lkb1's conversion from being granted, we do a
2243  * deadlk/demote on lkb2 right away and don't let it onto the convert queue.
2244  * I think this means that the lkb_is_ahead condition below should always
2245  * be zero, i.e. there will never be conv-deadlk between two locks that are
2246  * both already on the convert queue.
2247  */
2248
2249 static int conversion_deadlock_detect(struct dlm_rsb *r, struct dlm_lkb *lkb2)
2250 {
2251         struct dlm_lkb *lkb1;
2252         int lkb_is_ahead = 0;
2253
2254         list_for_each_entry(lkb1, &r->res_convertqueue, lkb_statequeue) {
2255                 if (lkb1 == lkb2) {
2256                         lkb_is_ahead = 1;
2257                         continue;
2258                 }
2259
2260                 if (!lkb_is_ahead) {
2261                         if (!modes_compat(lkb2, lkb1))
2262                                 return 1;
2263                 } else {
2264                         if (!modes_compat(lkb2, lkb1) &&
2265                             !modes_compat(lkb1, lkb2))
2266                                 return 1;
2267                 }
2268         }
2269         return 0;
2270 }
2271
2272 /*
2273  * Return 1 if the lock can be granted, 0 otherwise.
2274  * Also detect and resolve conversion deadlocks.
2275  *
2276  * lkb is the lock to be granted
2277  *
2278  * now is 1 if the function is being called in the context of the
2279  * immediate request, it is 0 if called later, after the lock has been
2280  * queued.
2281  *
2282  * recover is 1 if dlm_recover_grant() is trying to grant conversions
2283  * after recovery.
2284  *
2285  * References are from chapter 6 of "VAXcluster Principles" by Roy Davis
2286  */
2287
2288 static int _can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now,
2289                            int recover)
2290 {
2291         int8_t conv = (lkb->lkb_grmode != DLM_LOCK_IV);
2292
2293         /*
2294          * 6-10: Version 5.4 introduced an option to address the phenomenon of
2295          * a new request for a NL mode lock being blocked.
2296          *
2297          * 6-11: If the optional EXPEDITE flag is used with the new NL mode
2298          * request, then it would be granted.  In essence, the use of this flag
2299          * tells the Lock Manager to expedite theis request by not considering
2300          * what may be in the CONVERTING or WAITING queues...  As of this
2301          * writing, the EXPEDITE flag can be used only with new requests for NL
2302          * mode locks.  This flag is not valid for conversion requests.
2303          *
2304          * A shortcut.  Earlier checks return an error if EXPEDITE is used in a
2305          * conversion or used with a non-NL requested mode.  We also know an
2306          * EXPEDITE request is always granted immediately, so now must always
2307          * be 1.  The full condition to grant an expedite request: (now &&
2308          * !conv && lkb->rqmode == DLM_LOCK_NL && (flags & EXPEDITE)) can
2309          * therefore be shortened to just checking the flag.
2310          */
2311
2312         if (lkb->lkb_exflags & DLM_LKF_EXPEDITE)
2313                 return 1;
2314
2315         /*
2316          * A shortcut. Without this, !queue_conflict(grantqueue, lkb) would be
2317          * added to the remaining conditions.
2318          */
2319
2320         if (queue_conflict(&r->res_grantqueue, lkb))
2321                 return 0;
2322
2323         /*
2324          * 6-3: By default, a conversion request is immediately granted if the
2325          * requested mode is compatible with the modes of all other granted
2326          * locks
2327          */
2328
2329         if (queue_conflict(&r->res_convertqueue, lkb))
2330                 return 0;
2331
2332         /*
2333          * The RECOVER_GRANT flag means dlm_recover_grant() is granting
2334          * locks for a recovered rsb, on which lkb's have been rebuilt.
2335          * The lkb's may have been rebuilt on the queues in a different
2336          * order than they were in on the previous master.  So, granting
2337          * queued conversions in order after recovery doesn't make sense
2338          * since the order hasn't been preserved anyway.  The new order
2339          * could also have created a new "in place" conversion deadlock.
2340          * (e.g. old, failed master held granted EX, with PR->EX, NL->EX.
2341          * After recovery, there would be no granted locks, and possibly
2342          * NL->EX, PR->EX, an in-place conversion deadlock.)  So, after
2343          * recovery, grant conversions without considering order.
2344          */
2345
2346         if (conv && recover)
2347                 return 1;
2348
2349         /*
2350          * 6-5: But the default algorithm for deciding whether to grant or
2351          * queue conversion requests does not by itself guarantee that such
2352          * requests are serviced on a "first come first serve" basis.  This, in
2353          * turn, can lead to a phenomenon known as "indefinate postponement".
2354          *
2355          * 6-7: This issue is dealt with by using the optional QUECVT flag with
2356          * the system service employed to request a lock conversion.  This flag
2357          * forces certain conversion requests to be queued, even if they are
2358          * compatible with the granted modes of other locks on the same
2359          * resource.  Thus, the use of this flag results in conversion requests
2360          * being ordered on a "first come first servce" basis.
2361          *
2362          * DCT: This condition is all about new conversions being able to occur
2363          * "in place" while the lock remains on the granted queue (assuming
2364          * nothing else conflicts.)  IOW if QUECVT isn't set, a conversion
2365          * doesn't _have_ to go onto the convert queue where it's processed in
2366          * order.  The "now" variable is necessary to distinguish converts
2367          * being received and processed for the first time now, because once a
2368          * convert is moved to the conversion queue the condition below applies
2369          * requiring fifo granting.
2370          */
2371
2372         if (now && conv && !(lkb->lkb_exflags & DLM_LKF_QUECVT))
2373                 return 1;
2374
2375         /*
2376          * Even if the convert is compat with all granted locks,
2377          * QUECVT forces it behind other locks on the convert queue.
2378          */
2379
2380         if (now && conv && (lkb->lkb_exflags & DLM_LKF_QUECVT)) {
2381                 if (list_empty(&r->res_convertqueue))
2382                         return 1;
2383                 else
2384                         return 0;
2385         }
2386
2387         /*
2388          * The NOORDER flag is set to avoid the standard vms rules on grant
2389          * order.
2390          */
2391
2392         if (lkb->lkb_exflags & DLM_LKF_NOORDER)
2393                 return 1;
2394
2395         /*
2396          * 6-3: Once in that queue [CONVERTING], a conversion request cannot be
2397          * granted until all other conversion requests ahead of it are granted
2398          * and/or canceled.
2399          */
2400
2401         if (!now && conv && first_in_list(lkb, &r->res_convertqueue))
2402                 return 1;
2403
2404         /*
2405          * 6-4: By default, a new request is immediately granted only if all
2406          * three of the following conditions are satisfied when the request is
2407          * issued:
2408          * - The queue of ungranted conversion requests for the resource is
2409          *   empty.
2410          * - The queue of ungranted new requests for the resource is empty.
2411          * - The mode of the new request is compatible with the most
2412          *   restrictive mode of all granted locks on the resource.
2413          */
2414
2415         if (now && !conv && list_empty(&r->res_convertqueue) &&
2416             list_empty(&r->res_waitqueue))
2417                 return 1;
2418
2419         /*
2420          * 6-4: Once a lock request is in the queue of ungranted new requests,
2421          * it cannot be granted until the queue of ungranted conversion
2422          * requests is empty, all ungranted new requests ahead of it are
2423          * granted and/or canceled, and it is compatible with the granted mode
2424          * of the most restrictive lock granted on the resource.
2425          */
2426
2427         if (!now && !conv && list_empty(&r->res_convertqueue) &&
2428             first_in_list(lkb, &r->res_waitqueue))
2429                 return 1;
2430
2431         return 0;
2432 }
2433
2434 static int can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now,
2435                           int recover, int *err)
2436 {
2437         int rv;
2438         int8_t alt = 0, rqmode = lkb->lkb_rqmode;
2439         int8_t is_convert = (lkb->lkb_grmode != DLM_LOCK_IV);
2440
2441         if (err)
2442                 *err = 0;
2443
2444         rv = _can_be_granted(r, lkb, now, recover);
2445         if (rv)
2446                 goto out;
2447
2448         /*
2449          * The CONVDEADLK flag is non-standard and tells the dlm to resolve
2450          * conversion deadlocks by demoting grmode to NL, otherwise the dlm
2451          * cancels one of the locks.
2452          */
2453
2454         if (is_convert && can_be_queued(lkb) &&
2455             conversion_deadlock_detect(r, lkb)) {
2456                 if (lkb->lkb_exflags & DLM_LKF_CONVDEADLK) {
2457                         lkb->lkb_grmode = DLM_LOCK_NL;
2458                         lkb->lkb_sbflags |= DLM_SBF_DEMOTED;
2459                 } else if (!(lkb->lkb_exflags & DLM_LKF_NODLCKWT)) {
2460                         if (err)
2461                                 *err = -EDEADLK;
2462                         else {
2463                                 log_print("can_be_granted deadlock %x now %d",
2464                                           lkb->lkb_id, now);
2465                                 dlm_dump_rsb(r);
2466                         }
2467                 }
2468                 goto out;
2469         }
2470
2471         /*
2472          * The ALTPR and ALTCW flags are non-standard and tell the dlm to try
2473          * to grant a request in a mode other than the normal rqmode.  It's a
2474          * simple way to provide a big optimization to applications that can
2475          * use them.
2476          */
2477
2478         if (rqmode != DLM_LOCK_PR && (lkb->lkb_exflags & DLM_LKF_ALTPR))
2479                 alt = DLM_LOCK_PR;
2480         else if (rqmode != DLM_LOCK_CW && (lkb->lkb_exflags & DLM_LKF_ALTCW))
2481                 alt = DLM_LOCK_CW;
2482
2483         if (alt) {
2484                 lkb->lkb_rqmode = alt;
2485                 rv = _can_be_granted(r, lkb, now, 0);
2486                 if (rv)
2487                         lkb->lkb_sbflags |= DLM_SBF_ALTMODE;
2488                 else
2489                         lkb->lkb_rqmode = rqmode;
2490         }
2491  out:
2492         return rv;
2493 }
2494
2495 /* FIXME: I don't think that can_be_granted() can/will demote or find deadlock
2496    for locks pending on the convert list.  Once verified (watch for these
2497    log_prints), we should be able to just call _can_be_granted() and not
2498    bother with the demote/deadlk cases here (and there's no easy way to deal
2499    with a deadlk here, we'd have to generate something like grant_lock with
2500    the deadlk error.) */
2501
2502 /* Returns the highest requested mode of all blocked conversions; sets
2503    cw if there's a blocked conversion to DLM_LOCK_CW. */
2504
2505 static int grant_pending_convert(struct dlm_rsb *r, int high, int *cw,
2506                                  unsigned int *count)
2507 {
2508         struct dlm_lkb *lkb, *s;
2509         int recover = rsb_flag(r, RSB_RECOVER_GRANT);
2510         int hi, demoted, quit, grant_restart, demote_restart;
2511         int deadlk;
2512
2513         quit = 0;
2514  restart:
2515         grant_restart = 0;
2516         demote_restart = 0;
2517         hi = DLM_LOCK_IV;
2518
2519         list_for_each_entry_safe(lkb, s, &r->res_convertqueue, lkb_statequeue) {
2520                 demoted = is_demoted(lkb);
2521                 deadlk = 0;
2522
2523                 if (can_be_granted(r, lkb, 0, recover, &deadlk)) {
2524                         grant_lock_pending(r, lkb);
2525                         grant_restart = 1;
2526                         if (count)
2527                                 (*count)++;
2528                         continue;
2529                 }
2530
2531                 if (!demoted && is_demoted(lkb)) {
2532                         log_print("WARN: pending demoted %x node %d %s",
2533                                   lkb->lkb_id, lkb->lkb_nodeid, r->res_name);
2534                         demote_restart = 1;
2535                         continue;
2536                 }
2537
2538                 if (deadlk) {
2539                         log_print("WARN: pending deadlock %x node %d %s",
2540                                   lkb->lkb_id, lkb->lkb_nodeid, r->res_name);
2541                         dlm_dump_rsb(r);
2542                         continue;
2543                 }
2544
2545                 hi = max_t(int, lkb->lkb_rqmode, hi);
2546
2547                 if (cw && lkb->lkb_rqmode == DLM_LOCK_CW)
2548                         *cw = 1;
2549         }
2550
2551         if (grant_restart)
2552                 goto restart;
2553         if (demote_restart && !quit) {
2554                 quit = 1;
2555                 goto restart;
2556         }
2557
2558         return max_t(int, high, hi);
2559 }
2560
2561 static int grant_pending_wait(struct dlm_rsb *r, int high, int *cw,
2562                               unsigned int *count)
2563 {
2564         struct dlm_lkb *lkb, *s;
2565
2566         list_for_each_entry_safe(lkb, s, &r->res_waitqueue, lkb_statequeue) {
2567                 if (can_be_granted(r, lkb, 0, 0, NULL)) {
2568                         grant_lock_pending(r, lkb);
2569                         if (count)
2570                                 (*count)++;
2571                 } else {
2572                         high = max_t(int, lkb->lkb_rqmode, high);
2573                         if (lkb->lkb_rqmode == DLM_LOCK_CW)
2574                                 *cw = 1;
2575                 }
2576         }
2577
2578         return high;
2579 }
2580
2581 /* cw of 1 means there's a lock with a rqmode of DLM_LOCK_CW that's blocked
2582    on either the convert or waiting queue.
2583    high is the largest rqmode of all locks blocked on the convert or
2584    waiting queue. */
2585
2586 static int lock_requires_bast(struct dlm_lkb *gr, int high, int cw)
2587 {
2588         if (gr->lkb_grmode == DLM_LOCK_PR && cw) {
2589                 if (gr->lkb_highbast < DLM_LOCK_EX)
2590                         return 1;
2591                 return 0;
2592         }
2593
2594         if (gr->lkb_highbast < high &&
2595             !__dlm_compat_matrix[gr->lkb_grmode+1][high+1])
2596                 return 1;
2597         return 0;
2598 }
2599
2600 static void grant_pending_locks(struct dlm_rsb *r, unsigned int *count)
2601 {
2602         struct dlm_lkb *lkb, *s;
2603         int high = DLM_LOCK_IV;
2604         int cw = 0;
2605
2606         if (!is_master(r)) {
2607                 log_print("grant_pending_locks r nodeid %d", r->res_nodeid);
2608                 dlm_dump_rsb(r);
2609                 return;
2610         }
2611
2612         high = grant_pending_convert(r, high, &cw, count);
2613         high = grant_pending_wait(r, high, &cw, count);
2614
2615         if (high == DLM_LOCK_IV)
2616                 return;
2617
2618         /*
2619          * If there are locks left on the wait/convert queue then send blocking
2620          * ASTs to granted locks based on the largest requested mode (high)
2621          * found above.
2622          */
2623
2624         list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) {
2625                 if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) {
2626                         if (cw && high == DLM_LOCK_PR &&
2627                             lkb->lkb_grmode == DLM_LOCK_PR)
2628                                 queue_bast(r, lkb, DLM_LOCK_CW);
2629                         else
2630                                 queue_bast(r, lkb, high);
2631                         lkb->lkb_highbast = high;
2632                 }
2633         }
2634 }
2635
2636 static int modes_require_bast(struct dlm_lkb *gr, struct dlm_lkb *rq)
2637 {
2638         if ((gr->lkb_grmode == DLM_LOCK_PR && rq->lkb_rqmode == DLM_LOCK_CW) ||
2639             (gr->lkb_grmode == DLM_LOCK_CW && rq->lkb_rqmode == DLM_LOCK_PR)) {
2640                 if (gr->lkb_highbast < DLM_LOCK_EX)
2641                         return 1;
2642                 return 0;
2643         }
2644
2645         if (gr->lkb_highbast < rq->lkb_rqmode && !modes_compat(gr, rq))
2646                 return 1;
2647         return 0;
2648 }
2649
2650 static void send_bast_queue(struct dlm_rsb *r, struct list_head *head,
2651                             struct dlm_lkb *lkb)
2652 {
2653         struct dlm_lkb *gr;
2654
2655         list_for_each_entry(gr, head, lkb_statequeue) {
2656                 /* skip self when sending basts to convertqueue */
2657                 if (gr == lkb)
2658                         continue;
2659                 if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) {
2660                         queue_bast(r, gr, lkb->lkb_rqmode);
2661                         gr->lkb_highbast = lkb->lkb_rqmode;
2662                 }
2663         }
2664 }
2665
2666 static void send_blocking_asts(struct dlm_rsb *r, struct dlm_lkb *lkb)
2667 {
2668         send_bast_queue(r, &r->res_grantqueue, lkb);
2669 }
2670
2671 static void send_blocking_asts_all(struct dlm_rsb *r, struct dlm_lkb *lkb)
2672 {
2673         send_bast_queue(r, &r->res_grantqueue, lkb);
2674         send_bast_queue(r, &r->res_convertqueue, lkb);
2675 }
2676
2677 /* set_master(r, lkb) -- set the master nodeid of a resource
2678
2679    The purpose of this function is to set the nodeid field in the given
2680    lkb using the nodeid field in the given rsb.  If the rsb's nodeid is
2681    known, it can just be copied to the lkb and the function will return
2682    0.  If the rsb's nodeid is _not_ known, it needs to be looked up
2683    before it can be copied to the lkb.
2684
2685    When the rsb nodeid is being looked up remotely, the initial lkb
2686    causing the lookup is kept on the ls_waiters list waiting for the
2687    lookup reply.  Other lkb's waiting for the same rsb lookup are kept
2688    on the rsb's res_lookup list until the master is verified.
2689
2690    Return values:
2691    0: nodeid is set in rsb/lkb and the caller should go ahead and use it
2692    1: the rsb master is not available and the lkb has been placed on
2693       a wait queue
2694 */
2695
2696 static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb)
2697 {
2698         int our_nodeid = dlm_our_nodeid();
2699
2700         if (rsb_flag(r, RSB_MASTER_UNCERTAIN)) {
2701                 rsb_clear_flag(r, RSB_MASTER_UNCERTAIN);
2702                 r->res_first_lkid = lkb->lkb_id;
2703                 lkb->lkb_nodeid = r->res_nodeid;
2704                 return 0;
2705         }
2706
2707         if (r->res_first_lkid && r->res_first_lkid != lkb->lkb_id) {
2708                 list_add_tail(&lkb->lkb_rsb_lookup, &r->res_lookup);
2709                 return 1;
2710         }
2711
2712         if (r->res_master_nodeid == our_nodeid) {
2713                 lkb->lkb_nodeid = 0;
2714                 return 0;
2715         }
2716
2717         if (r->res_master_nodeid) {
2718                 lkb->lkb_nodeid = r->res_master_nodeid;
2719                 return 0;
2720         }
2721
2722         if (dlm_dir_nodeid(r) == our_nodeid) {
2723                 /* This is a somewhat unusual case; find_rsb will usually
2724                    have set res_master_nodeid when dir nodeid is local, but
2725                    there are cases where we become the dir node after we've
2726                    past find_rsb and go through _request_lock again.
2727                    confirm_master() or process_lookup_list() needs to be
2728                    called after this. */
2729                 log_debug(r->res_ls, "set_master %x self master %d dir %d %s",
2730                           lkb->lkb_id, r->res_master_nodeid, r->res_dir_nodeid,
2731                           r->res_name);
2732                 r->res_master_nodeid = our_nodeid;
2733                 r->res_nodeid = 0;
2734                 lkb->lkb_nodeid = 0;
2735                 return 0;
2736         }
2737
2738         wait_pending_remove(r);
2739
2740         r->res_first_lkid = lkb->lkb_id;
2741         send_lookup(r, lkb);
2742         return 1;
2743 }
2744
2745 static void process_lookup_list(struct dlm_rsb *r)
2746 {
2747         struct dlm_lkb *lkb, *safe;
2748
2749         list_for_each_entry_safe(lkb, safe, &r->res_lookup, lkb_rsb_lookup) {
2750                 list_del_init(&lkb->lkb_rsb_lookup);
2751                 _request_lock(r, lkb);
2752                 schedule();
2753         }
2754 }
2755
2756 /* confirm_master -- confirm (or deny) an rsb's master nodeid */
2757
2758 static void confirm_master(struct dlm_rsb *r, int error)
2759 {
2760         struct dlm_lkb *lkb;
2761
2762         if (!r->res_first_lkid)
2763                 return;
2764
2765         switch (error) {
2766         case 0:
2767         case -EINPROGRESS:
2768                 r->res_first_lkid = 0;
2769                 process_lookup_list(r);
2770                 break;
2771
2772         case -EAGAIN:
2773         case -EBADR:
2774         case -ENOTBLK:
2775                 /* the remote request failed and won't be retried (it was
2776                    a NOQUEUE, or has been canceled/unlocked); make a waiting
2777                    lkb the first_lkid */
2778
2779                 r->res_first_lkid = 0;
2780
2781                 if (!list_empty(&r->res_lookup)) {
2782                         lkb = list_entry(r->res_lookup.next, struct dlm_lkb,
2783                                          lkb_rsb_lookup);
2784                         list_del_init(&lkb->lkb_rsb_lookup);
2785                         r->res_first_lkid = lkb->lkb_id;
2786                         _request_lock(r, lkb);
2787                 }
2788                 break;
2789
2790         default:
2791                 log_error(r->res_ls, "confirm_master unknown error %d", error);
2792         }
2793 }
2794
2795 static int set_lock_args(int mode, struct dlm_lksb *lksb, uint32_t flags,
2796                          int namelen, unsigned long timeout_cs,
2797                          void (*ast) (void *astparam),
2798                          void *astparam,
2799                          void (*bast) (void *astparam, int mode),
2800                          struct dlm_args *args)
2801 {
2802         int rv = -EINVAL;
2803
2804         /* check for invalid arg usage */
2805
2806         if (mode < 0 || mode > DLM_LOCK_EX)
2807                 goto out;
2808
2809         if (!(flags & DLM_LKF_CONVERT) && (namelen > DLM_RESNAME_MAXLEN))
2810                 goto out;
2811
2812         if (flags & DLM_LKF_CANCEL)
2813                 goto out;
2814
2815         if (flags & DLM_LKF_QUECVT && !(flags & DLM_LKF_CONVERT))
2816                 goto out;
2817
2818         if (flags & DLM_LKF_CONVDEADLK && !(flags & DLM_LKF_CONVERT))
2819                 goto out;
2820
2821         if (flags & DLM_LKF_CONVDEADLK && flags & DLM_LKF_NOQUEUE)
2822                 goto out;
2823
2824         if (flags & DLM_LKF_EXPEDITE && flags & DLM_LKF_CONVERT)
2825                 goto out;
2826
2827         if (flags & DLM_LKF_EXPEDITE && flags & DLM_LKF_QUECVT)
2828                 goto out;
2829
2830         if (flags & DLM_LKF_EXPEDITE && flags & DLM_LKF_NOQUEUE)
2831                 goto out;
2832
2833         if (flags & DLM_LKF_EXPEDITE && mode != DLM_LOCK_NL)
2834                 goto out;
2835
2836         if (!ast || !lksb)
2837                 goto out;
2838
2839         if (flags & DLM_LKF_VALBLK && !lksb->sb_lvbptr)
2840                 goto out;
2841
2842         if (flags & DLM_LKF_CONVERT && !lksb->sb_lkid)
2843                 goto out;
2844
2845         /* these args will be copied to the lkb in validate_lock_args,
2846            it cannot be done now because when converting locks, fields in
2847            an active lkb cannot be modified before locking the rsb */
2848
2849         args->flags = flags;
2850         args->astfn = ast;
2851         args->astparam = astparam;
2852         args->bastfn = bast;
2853         args->timeout = timeout_cs;
2854         args->mode = mode;
2855         args->lksb = lksb;
2856         rv = 0;
2857  out:
2858         return rv;
2859 }
2860
2861 static int set_unlock_args(uint32_t flags, void *astarg, struct dlm_args *args)
2862 {
2863         if (flags & ~(DLM_LKF_CANCEL | DLM_LKF_VALBLK | DLM_LKF_IVVALBLK |
2864                       DLM_LKF_FORCEUNLOCK))
2865                 return -EINVAL;
2866
2867         if (flags & DLM_LKF_CANCEL && flags & DLM_LKF_FORCEUNLOCK)
2868                 return -EINVAL;
2869
2870         args->flags = flags;
2871         args->astparam = astarg;
2872         return 0;
2873 }
2874
2875 static int validate_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
2876                               struct dlm_args *args)
2877 {
2878         int rv = -EINVAL;
2879
2880         if (args->flags & DLM_LKF_CONVERT) {
2881                 if (lkb->lkb_flags & DLM_IFL_MSTCPY)
2882                         goto out;
2883
2884                 if (args->flags & DLM_LKF_QUECVT &&
2885                     !__quecvt_compat_matrix[lkb->lkb_grmode+1][args->mode+1])
2886                         goto out;
2887
2888                 rv = -EBUSY;
2889                 if (lkb->lkb_status != DLM_LKSTS_GRANTED)
2890                         goto out;
2891
2892                 if (lkb->lkb_wait_type)
2893                         goto out;
2894
2895                 if (is_overlap(lkb))
2896                         goto out;
2897         }
2898
2899         lkb->lkb_exflags = args->flags;
2900         lkb->lkb_sbflags = 0;
2901         lkb->lkb_astfn = args->astfn;
2902         lkb->lkb_astparam = args->astparam;
2903         lkb->lkb_bastfn = args->bastfn;
2904         lkb->lkb_rqmode = args->mode;
2905         lkb->lkb_lksb = args->lksb;
2906         lkb->lkb_lvbptr = args->lksb->sb_lvbptr;
2907         lkb->lkb_ownpid = (int) current->pid;
2908         lkb->lkb_timeout_cs = args->timeout;
2909         rv = 0;
2910  out:
2911         if (rv)
2912                 log_debug(ls, "validate_lock_args %d %x %x %x %d %d %s",
2913                           rv, lkb->lkb_id, lkb->lkb_flags, args->flags,
2914                           lkb->lkb_status, lkb->lkb_wait_type,
2915                           lkb->lkb_resource->res_name);
2916         return rv;
2917 }
2918
2919 /* when dlm_unlock() sees -EBUSY with CANCEL/FORCEUNLOCK it returns 0
2920    for success */
2921
2922 /* note: it's valid for lkb_nodeid/res_nodeid to be -1 when we get here
2923    because there may be a lookup in progress and it's valid to do
2924    cancel/unlockf on it */
2925
2926 static int validate_unlock_args(struct dlm_lkb *lkb, struct dlm_args *args)
2927 {
2928         struct dlm_ls *ls = lkb->lkb_resource->res_ls;
2929         int rv = -EINVAL;
2930
2931         if (lkb->lkb_flags & DLM_IFL_MSTCPY) {
2932                 log_error(ls, "unlock on MSTCPY %x", lkb->lkb_id);
2933                 dlm_print_lkb(lkb);
2934                 goto out;
2935         }
2936
2937         /* an lkb may still exist even though the lock is EOL'ed due to a
2938            cancel, unlock or failed noqueue request; an app can't use these
2939            locks; return same error as if the lkid had not been found at all */
2940
2941         if (lkb->lkb_flags & DLM_IFL_ENDOFLIFE) {
2942                 log_debug(ls, "unlock on ENDOFLIFE %x", lkb->lkb_id);
2943                 rv = -ENOENT;
2944                 goto out;
2945         }
2946
2947         /* an lkb may be waiting for an rsb lookup to complete where the
2948            lookup was initiated by another lock */
2949
2950         if (!list_empty(&lkb->lkb_rsb_lookup)) {
2951                 if (args->flags & (DLM_LKF_CANCEL | DLM_LKF_FORCEUNLOCK)) {
2952                         log_debug(ls, "unlock on rsb_lookup %x", lkb->lkb_id);
2953                         list_del_init(&lkb->lkb_rsb_lookup);
2954                         queue_cast(lkb->lkb_resource, lkb,
2955                                    args->flags & DLM_LKF_CANCEL ?
2956                                    -DLM_ECANCEL : -DLM_EUNLOCK);
2957                         unhold_lkb(lkb); /* undoes create_lkb() */
2958                 }
2959                 /* caller changes -EBUSY to 0 for CANCEL and FORCEUNLOCK */
2960                 rv = -EBUSY;
2961                 goto out;
2962         }
2963
2964         /* cancel not allowed with another cancel/unlock in progress */
2965
2966         if (args->flags & DLM_LKF_CANCEL) {
2967                 if (lkb->lkb_exflags & DLM_LKF_CANCEL)
2968                         goto out;
2969
2970                 if (is_overlap(lkb))
2971                         goto out;
2972
2973                 /* don't let scand try to do a cancel */
2974                 del_timeout(lkb);
2975
2976                 if (lkb->lkb_flags & DLM_IFL_RESEND) {
2977                         lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL;
2978                         rv = -EBUSY;
2979                         goto out;
2980                 }
2981
2982                 /* there's nothing to cancel */
2983                 if (lkb->lkb_status == DLM_LKSTS_GRANTED &&
2984                     !lkb->lkb_wait_type) {
2985                         rv = -EBUSY;
2986                         goto out;
2987                 }
2988
2989                 switch (lkb->lkb_wait_type) {
2990                 case DLM_MSG_LOOKUP:
2991                 case DLM_MSG_REQUEST:
2992                         lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL;
2993                         rv = -EBUSY;
2994                         goto out;
2995                 case DLM_MSG_UNLOCK:
2996                 case DLM_MSG_CANCEL:
2997                         goto out;
2998                 }
2999                 /* add_to_waiters() will set OVERLAP_CANCEL */
3000                 goto out_ok;
3001         }
3002
3003         /* do we need to allow a force-unlock if there's a normal unlock
3004            already in progress?  in what conditions could the normal unlock
3005            fail such that we'd want to send a force-unlock to be sure? */
3006
3007         if (args->flags & DLM_LKF_FORCEUNLOCK) {
3008                 if (lkb->lkb_exflags & DLM_LKF_FORCEUNLOCK)
3009                         goto out;
3010
3011                 if (is_overlap_unlock(lkb))
3012                         goto out;
3013
3014                 /* don't let scand try to do a cancel */
3015                 del_timeout(lkb);
3016
3017                 if (lkb->lkb_flags & DLM_IFL_RESEND) {
3018                         lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK;
3019                         rv = -EBUSY;
3020                         goto out;
3021                 }
3022
3023                 switch (lkb->lkb_wait_type) {
3024                 case DLM_MSG_LOOKUP:
3025                 case DLM_MSG_REQUEST:
3026                         lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK;
3027                         rv = -EBUSY;
3028                         goto out;
3029                 case DLM_MSG_UNLOCK:
3030                         goto out;
3031                 }
3032                 /* add_to_waiters() will set OVERLAP_UNLOCK */
3033                 goto out_ok;
3034         }
3035
3036         /* normal unlock not allowed if there's any op in progress */
3037         rv = -EBUSY;
3038         if (lkb->lkb_wait_type || lkb->lkb_wait_count)
3039                 goto out;
3040
3041  out_ok:
3042         /* an overlapping op shouldn't blow away exflags from other op */
3043         lkb->lkb_exflags |= args->flags;
3044         lkb->lkb_sbflags = 0;
3045         lkb->lkb_astparam = args->astparam;
3046         rv = 0;
3047  out:
3048         if (rv)
3049                 log_debug(ls, "validate_unlock_args %d %x %x %x %x %d %s", rv,
3050                           lkb->lkb_id, lkb->lkb_flags, lkb->lkb_exflags,
3051                           args->flags, lkb->lkb_wait_type,
3052                           lkb->lkb_resource->res_name);
3053         return rv;
3054 }
3055
3056 /*
3057  * Four stage 4 varieties:
3058  * do_request(), do_convert(), do_unlock(), do_cancel()
3059  * These are called on the master node for the given lock and
3060  * from the central locking logic.
3061  */
3062
3063 static int do_request(struct dlm_rsb *r, struct dlm_lkb *lkb)
3064 {
3065         int error = 0;
3066
3067         if (can_be_granted(r, lkb, 1, 0, NULL)) {
3068                 grant_lock(r, lkb);
3069                 queue_cast(r, lkb, 0);
3070                 goto out;
3071         }
3072
3073         if (can_be_queued(lkb)) {
3074                 error = -EINPROGRESS;
3075                 add_lkb(r, lkb, DLM_LKSTS_WAITING);
3076                 add_timeout(lkb);
3077                 goto out;
3078         }
3079
3080         error = -EAGAIN;
3081         queue_cast(r, lkb, -EAGAIN);
3082  out:
3083         return error;
3084 }
3085
3086 static void do_request_effects(struct dlm_rsb *r, struct dlm_lkb *lkb,
3087                                int error)
3088 {
3089         switch (error) {
3090         case -EAGAIN:
3091                 if (force_blocking_asts(lkb))
3092                         send_blocking_asts_all(r, lkb);
3093                 break;
3094         case -EINPROGRESS:
3095                 send_blocking_asts(r, lkb);
3096                 break;
3097         }
3098 }
3099
3100 static int do_convert(struct dlm_rsb *r, struct dlm_lkb *lkb)
3101 {
3102         int error = 0;
3103         int deadlk = 0;
3104
3105         /* changing an existing lock may allow others to be granted */
3106
3107         if (can_be_granted(r, lkb, 1, 0, &deadlk)) {
3108                 grant_lock(r, lkb);
3109                 queue_cast(r, lkb, 0);
3110                 goto out;
3111         }
3112
3113         /* can_be_granted() detected that this lock would block in a conversion
3114            deadlock, so we leave it on the granted queue and return EDEADLK in
3115            the ast for the convert. */
3116
3117         if (deadlk) {
3118                 /* it's left on the granted queue */
3119                 revert_lock(r, lkb);
3120                 queue_cast(r, lkb, -EDEADLK);
3121                 error = -EDEADLK;
3122                 goto out;
3123         }
3124
3125         /* is_demoted() means the can_be_granted() above set the grmode
3126            to NL, and left us on the granted queue.  This auto-demotion
3127            (due to CONVDEADLK) might mean other locks, and/or this lock, are
3128            now grantable.  We have to try to grant other converting locks
3129            before we try again to grant this one. */
3130
3131         if (is_demoted(lkb)) {
3132                 grant_pending_convert(r, DLM_LOCK_IV, NULL, NULL);
3133                 if (_can_be_granted(r, lkb, 1, 0)) {
3134                         grant_lock(r, lkb);
3135                         queue_cast(r, lkb, 0);
3136                         goto out;
3137                 }
3138                 /* else fall through and move to convert queue */
3139         }
3140
3141         if (can_be_queued(lkb)) {
3142                 error = -EINPROGRESS;
3143                 del_lkb(r, lkb);
3144                 add_lkb(r, lkb, DLM_LKSTS_CONVERT);
3145                 add_timeout(lkb);
3146                 goto out;
3147         }
3148
3149         error = -EAGAIN;
3150         queue_cast(r, lkb, -EAGAIN);
3151  out:
3152         return error;
3153 }
3154
3155 static void do_convert_effects(struct dlm_rsb *r, struct dlm_lkb *lkb,
3156                                int error)
3157 {
3158         switch (error) {
3159         case 0:
3160                 grant_pending_locks(r, NULL);
3161                 /* grant_pending_locks also sends basts */
3162                 break;
3163         case -EAGAIN:
3164                 if (force_blocking_asts(lkb))
3165                         send_blocking_asts_all(r, lkb);
3166                 break;
3167         case -EINPROGRESS:
3168                 send_blocking_asts(r, lkb);
3169                 break;
3170         }
3171 }
3172
3173 static int do_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3174 {
3175         remove_lock(r, lkb);
3176         queue_cast(r, lkb, -DLM_EUNLOCK);
3177         return -DLM_EUNLOCK;
3178 }
3179
3180 static void do_unlock_effects(struct dlm_rsb *r, struct dlm_lkb *lkb,
3181                               int error)
3182 {
3183         grant_pending_locks(r, NULL);
3184 }
3185
3186 /* returns: 0 did nothing, -DLM_ECANCEL canceled lock */
3187
3188 static int do_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb)
3189 {
3190         int error;
3191
3192         error = revert_lock(r, lkb);
3193         if (error) {
3194                 queue_cast(r, lkb, -DLM_ECANCEL);
3195                 return -DLM_ECANCEL;
3196         }
3197         return 0;
3198 }
3199
3200 static void do_cancel_effects(struct dlm_rsb *r, struct dlm_lkb *lkb,
3201                               int error)
3202 {
3203         if (error)
3204                 grant_pending_locks(r, NULL);
3205 }
3206
3207 /*
3208  * Four stage 3 varieties:
3209  * _request_lock(), _convert_lock(), _unlock_lock(), _cancel_lock()
3210  */
3211
3212 /* add a new lkb to a possibly new rsb, called by requesting process */
3213
3214 static int _request_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3215 {
3216         int error;
3217
3218         /* set_master: sets lkb nodeid from r */
3219
3220         error = set_master(r, lkb);
3221         if (error < 0)
3222                 goto out;
3223         if (error) {
3224                 error = 0;
3225                 goto out;
3226         }
3227
3228         if (is_remote(r)) {
3229                 /* receive_request() calls do_request() on remote node */
3230                 error = send_request(r, lkb);
3231         } else {
3232                 error = do_request(r, lkb);
3233                 /* for remote locks the request_reply is sent
3234                    between do_request and do_request_effects */
3235                 do_request_effects(r, lkb, error);
3236         }
3237  out:
3238         return error;
3239 }
3240
3241 /* change some property of an existing lkb, e.g. mode */
3242
3243 static int _convert_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3244 {
3245         int error;
3246
3247         if (is_remote(r)) {
3248                 /* receive_convert() calls do_convert() on remote node */
3249                 error = send_convert(r, lkb);
3250         } else {
3251                 error = do_convert(r, lkb);
3252                 /* for remote locks the convert_reply is sent
3253                    between do_convert and do_convert_effects */
3254                 do_convert_effects(r, lkb, error);
3255         }
3256
3257         return error;
3258 }
3259
3260 /* remove an existing lkb from the granted queue */
3261
3262 static int _unlock_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3263 {
3264         int error;
3265
3266         if (is_remote(r)) {
3267                 /* receive_unlock() calls do_unlock() on remote node */
3268                 error = send_unlock(r, lkb);
3269         } else {
3270                 error = do_unlock(r, lkb);
3271                 /* for remote locks the unlock_reply is sent
3272                    between do_unlock and do_unlock_effects */
3273                 do_unlock_effects(r, lkb, error);
3274         }
3275
3276         return error;
3277 }
3278
3279 /* remove an existing lkb from the convert or wait queue */
3280
3281 static int _cancel_lock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3282 {
3283         int error;
3284
3285         if (is_remote(r)) {
3286                 /* receive_cancel() calls do_cancel() on remote node */
3287                 error = send_cancel(r, lkb);
3288         } else {
3289                 error = do_cancel(r, lkb);
3290                 /* for remote locks the cancel_reply is sent
3291                    between do_cancel and do_cancel_effects */
3292                 do_cancel_effects(r, lkb, error);
3293         }
3294
3295         return error;
3296 }
3297
3298 /*
3299  * Four stage 2 varieties:
3300  * request_lock(), convert_lock(), unlock_lock(), cancel_lock()
3301  */
3302
3303 static int request_lock(struct dlm_ls *ls, struct dlm_lkb *lkb, char *name,
3304                         int len, struct dlm_args *args)
3305 {
3306         struct dlm_rsb *r;
3307         int error;
3308
3309         error = validate_lock_args(ls, lkb, args);
3310         if (error)
3311                 return error;
3312
3313         error = find_rsb(ls, name, len, 0, R_REQUEST, &r);
3314         if (error)
3315                 return error;
3316
3317         lock_rsb(r);
3318
3319         attach_lkb(r, lkb);
3320         lkb->lkb_lksb->sb_lkid = lkb->lkb_id;
3321
3322         error = _request_lock(r, lkb);
3323
3324         unlock_rsb(r);
3325         put_rsb(r);
3326         return error;
3327 }
3328
3329 static int convert_lock(struct dlm_ls *ls, struct dlm_lkb *lkb,
3330                         struct dlm_args *args)
3331 {
3332         struct dlm_rsb *r;
3333         int error;
3334
3335         r = lkb->lkb_resource;
3336
3337         hold_rsb(r);
3338         lock_rsb(r);
3339
3340         error = validate_lock_args(ls, lkb, args);
3341         if (error)
3342                 goto out;
3343
3344         error = _convert_lock(r, lkb);
3345  out:
3346         unlock_rsb(r);
3347         put_rsb(r);
3348         return error;
3349 }
3350
3351 static int unlock_lock(struct dlm_ls *ls, struct dlm_lkb *lkb,
3352                        struct dlm_args *args)
3353 {
3354         struct dlm_rsb *r;
3355         int error;
3356
3357         r = lkb->lkb_resource;
3358
3359         hold_rsb(r);
3360         lock_rsb(r);
3361
3362         error = validate_unlock_args(lkb, args);
3363         if (error)
3364                 goto out;
3365
3366         error = _unlock_lock(r, lkb);
3367  out:
3368         unlock_rsb(r);
3369         put_rsb(r);
3370         return error;
3371 }
3372
3373 static int cancel_lock(struct dlm_ls *ls, struct dlm_lkb *lkb,
3374                        struct dlm_args *args)
3375 {
3376         struct dlm_rsb *r;
3377         int error;
3378
3379         r = lkb->lkb_resource;
3380
3381         hold_rsb(r);
3382         lock_rsb(r);
3383
3384         error = validate_unlock_args(lkb, args);
3385         if (error)
3386                 goto out;
3387
3388         error = _cancel_lock(r, lkb);
3389  out:
3390         unlock_rsb(r);
3391         put_rsb(r);
3392         return error;
3393 }
3394
3395 /*
3396  * Two stage 1 varieties:  dlm_lock() and dlm_unlock()
3397  */
3398
3399 int dlm_lock(dlm_lockspace_t *lockspace,
3400              int mode,
3401              struct dlm_lksb *lksb,
3402              uint32_t flags,
3403              void *name,
3404              unsigned int namelen,
3405              uint32_t parent_lkid,
3406              void (*ast) (void *astarg),
3407              void *astarg,
3408              void (*bast) (void *astarg, int mode))
3409 {
3410         struct dlm_ls *ls;
3411         struct dlm_lkb *lkb;
3412         struct dlm_args args;
3413         int error, convert = flags & DLM_LKF_CONVERT;
3414
3415         ls = dlm_find_lockspace_local(lockspace);
3416         if (!ls)
3417                 return -EINVAL;
3418
3419         dlm_lock_recovery(ls);
3420
3421         if (convert)
3422                 error = find_lkb(ls, lksb->sb_lkid, &lkb);
3423         else
3424                 error = create_lkb(ls, &lkb);
3425
3426         if (error)
3427                 goto out;
3428
3429         error = set_lock_args(mode, lksb, flags, namelen, 0, ast,
3430                               astarg, bast, &args);
3431         if (error)
3432                 goto out_put;
3433
3434         if (convert)
3435                 error = convert_lock(ls, lkb, &args);
3436         else
3437                 error = request_lock(ls, lkb, name, namelen, &args);
3438
3439         if (error == -EINPROGRESS)
3440                 error = 0;
3441  out_put:
3442         if (convert || error)
3443                 __put_lkb(ls, lkb);
3444         if (error == -EAGAIN || error == -EDEADLK)
3445                 error = 0;
3446  out:
3447         dlm_unlock_recovery(ls);
3448         dlm_put_lockspace(ls);
3449         return error;
3450 }
3451
3452 int dlm_unlock(dlm_lockspace_t *lockspace,
3453                uint32_t lkid,
3454                uint32_t flags,
3455                struct dlm_lksb *lksb,
3456                void *astarg)
3457 {
3458         struct dlm_ls *ls;
3459         struct dlm_lkb *lkb;
3460         struct dlm_args args;
3461         int error;
3462
3463         ls = dlm_find_lockspace_local(lockspace);
3464         if (!ls)
3465                 return -EINVAL;
3466
3467         dlm_lock_recovery(ls);
3468
3469         error = find_lkb(ls, lkid, &lkb);
3470         if (error)
3471                 goto out;
3472
3473         error = set_unlock_args(flags, astarg, &args);
3474         if (error)
3475                 goto out_put;
3476
3477         if (flags & DLM_LKF_CANCEL)
3478                 error = cancel_lock(ls, lkb, &args);
3479         else
3480                 error = unlock_lock(ls, lkb, &args);
3481
3482         if (error == -DLM_EUNLOCK || error == -DLM_ECANCEL)
3483                 error = 0;
3484         if (error == -EBUSY && (flags & (DLM_LKF_CANCEL | DLM_LKF_FORCEUNLOCK)))
3485                 error = 0;
3486  out_put:
3487         dlm_put_lkb(lkb);
3488  out:
3489         dlm_unlock_recovery(ls);
3490         dlm_put_lockspace(ls);
3491         return error;
3492 }
3493
3494 /*
3495  * send/receive routines for remote operations and replies
3496  *
3497  * send_args
3498  * send_common
3499  * send_request                 receive_request
3500  * send_convert                 receive_convert
3501  * send_unlock                  receive_unlock
3502  * send_cancel                  receive_cancel
3503  * send_grant                   receive_grant
3504  * send_bast                    receive_bast
3505  * send_lookup                  receive_lookup
3506  * send_remove                  receive_remove
3507  *
3508  *                              send_common_reply
3509  * receive_request_reply        send_request_reply
3510  * receive_convert_reply        send_convert_reply
3511  * receive_unlock_reply         send_unlock_reply
3512  * receive_cancel_reply         send_cancel_reply
3513  * receive_lookup_reply         send_lookup_reply
3514  */
3515
3516 static int _create_message(struct dlm_ls *ls, int mb_len,
3517                            int to_nodeid, int mstype,
3518                            struct dlm_message **ms_ret,
3519                            struct dlm_mhandle **mh_ret)
3520 {
3521         struct dlm_message *ms;
3522         struct dlm_mhandle *mh;
3523         char *mb;
3524
3525         /* get_buffer gives us a message handle (mh) that we need to
3526            pass into lowcomms_commit and a message buffer (mb) that we
3527            write our data into */
3528
3529         mh = dlm_lowcomms_get_buffer(to_nodeid, mb_len, GFP_NOFS, &mb);
3530         if (!mh)
3531                 return -ENOBUFS;
3532
3533         memset(mb, 0, mb_len);
3534
3535         ms = (struct dlm_message *) mb;
3536
3537         ms->m_header.h_version = (DLM_HEADER_MAJOR | DLM_HEADER_MINOR);
3538         ms->m_header.h_lockspace = ls->ls_global_id;
3539         ms->m_header.h_nodeid = dlm_our_nodeid();
3540         ms->m_header.h_length = mb_len;
3541         ms->m_header.h_cmd = DLM_MSG;
3542
3543         ms->m_type = mstype;
3544
3545         *mh_ret = mh;
3546         *ms_ret = ms;
3547         return 0;
3548 }
3549
3550 static int create_message(struct dlm_rsb *r, struct dlm_lkb *lkb,
3551                           int to_nodeid, int mstype,
3552                           struct dlm_message **ms_ret,
3553                           struct dlm_mhandle **mh_ret)
3554 {
3555         int mb_len = sizeof(struct dlm_message);
3556
3557         switch (mstype) {
3558         case DLM_MSG_REQUEST:
3559         case DLM_MSG_LOOKUP:
3560         case DLM_MSG_REMOVE:
3561                 mb_len += r->res_length;
3562                 break;
3563         case DLM_MSG_CONVERT:
3564         case DLM_MSG_UNLOCK:
3565         case DLM_MSG_REQUEST_REPLY:
3566         case DLM_MSG_CONVERT_REPLY:
3567         case DLM_MSG_GRANT:
3568                 if (lkb && lkb->lkb_lvbptr)
3569                         mb_len += r->res_ls->ls_lvblen;
3570                 break;
3571         }
3572
3573         return _create_message(r->res_ls, mb_len, to_nodeid, mstype,
3574                                ms_ret, mh_ret);
3575 }
3576
3577 /* further lowcomms enhancements or alternate implementations may make
3578    the return value from this function useful at some point */
3579
3580 static int send_message(struct dlm_mhandle *mh, struct dlm_message *ms)
3581 {
3582         dlm_message_out(ms);
3583         dlm_lowcomms_commit_buffer(mh);
3584         return 0;
3585 }
3586
3587 static void send_args(struct dlm_rsb *r, struct dlm_lkb *lkb,
3588                       struct dlm_message *ms)
3589 {
3590         ms->m_nodeid   = lkb->lkb_nodeid;
3591         ms->m_pid      = lkb->lkb_ownpid;
3592         ms->m_lkid     = lkb->lkb_id;
3593         ms->m_remid    = lkb->lkb_remid;
3594         ms->m_exflags  = lkb->lkb_exflags;
3595         ms->m_sbflags  = lkb->lkb_sbflags;
3596         ms->m_flags    = lkb->lkb_flags;
3597         ms->m_lvbseq   = lkb->lkb_lvbseq;
3598         ms->m_status   = lkb->lkb_status;
3599         ms->m_grmode   = lkb->lkb_grmode;
3600         ms->m_rqmode   = lkb->lkb_rqmode;
3601         ms->m_hash     = r->res_hash;
3602
3603         /* m_result and m_bastmode are set from function args,
3604            not from lkb fields */
3605
3606         if (lkb->lkb_bastfn)
3607                 ms->m_asts |= DLM_CB_BAST;
3608         if (lkb->lkb_astfn)
3609                 ms->m_asts |= DLM_CB_CAST;
3610
3611         /* compare with switch in create_message; send_remove() doesn't
3612            use send_args() */
3613
3614         switch (ms->m_type) {
3615         case DLM_MSG_REQUEST:
3616         case DLM_MSG_LOOKUP:
3617                 memcpy(ms->m_extra, r->res_name, r->res_length);
3618                 break;
3619         case DLM_MSG_CONVERT:
3620         case DLM_MSG_UNLOCK:
3621         case DLM_MSG_REQUEST_REPLY:
3622         case DLM_MSG_CONVERT_REPLY:
3623         case DLM_MSG_GRANT:
3624                 if (!lkb->lkb_lvbptr)
3625                         break;
3626                 memcpy(ms->m_extra, lkb->lkb_lvbptr, r->res_ls->ls_lvblen);
3627                 break;
3628         }
3629 }
3630
3631 static int send_common(struct dlm_rsb *r, struct dlm_lkb *lkb, int mstype)
3632 {
3633         struct dlm_message *ms;
3634         struct dlm_mhandle *mh;
3635         int to_nodeid, error;
3636
3637         to_nodeid = r->res_nodeid;
3638
3639         error = add_to_waiters(lkb, mstype, to_nodeid);
3640         if (error)
3641                 return error;
3642
3643         error = create_message(r, lkb, to_nodeid, mstype, &ms, &mh);
3644         if (error)
3645                 goto fail;
3646
3647         send_args(r, lkb, ms);
3648
3649         error = send_message(mh, ms);
3650         if (error)
3651                 goto fail;
3652         return 0;
3653
3654  fail:
3655         remove_from_waiters(lkb, msg_reply_type(mstype));
3656         return error;
3657 }
3658
3659 static int send_request(struct dlm_rsb *r, struct dlm_lkb *lkb)
3660 {
3661         return send_common(r, lkb, DLM_MSG_REQUEST);
3662 }
3663
3664 static int send_convert(struct dlm_rsb *r, struct dlm_lkb *lkb)
3665 {
3666         int error;
3667
3668         error = send_common(r, lkb, DLM_MSG_CONVERT);
3669
3670         /* down conversions go without a reply from the master */
3671         if (!error && down_conversion(lkb)) {
3672                 remove_from_waiters(lkb, DLM_MSG_CONVERT_REPLY);
3673                 r->res_ls->ls_stub_ms.m_flags = DLM_IFL_STUB_MS;
3674                 r->res_ls->ls_stub_ms.m_type = DLM_MSG_CONVERT_REPLY;
3675                 r->res_ls->ls_stub_ms.m_result = 0;
3676                 __receive_convert_reply(r, lkb, &r->res_ls->ls_stub_ms);
3677         }
3678
3679         return error;
3680 }
3681
3682 /* FIXME: if this lkb is the only lock we hold on the rsb, then set
3683    MASTER_UNCERTAIN to force the next request on the rsb to confirm
3684    that the master is still correct. */
3685
3686 static int send_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb)
3687 {
3688         return send_common(r, lkb, DLM_MSG_UNLOCK);
3689 }
3690
3691 static int send_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb)
3692 {
3693         return send_common(r, lkb, DLM_MSG_CANCEL);
3694 }
3695
3696 static int send_grant(struct dlm_rsb *r, struct dlm_lkb *lkb)
3697 {
3698         struct dlm_message *ms;
3699         struct dlm_mhandle *mh;
3700         int to_nodeid, error;
3701
3702         to_nodeid = lkb->lkb_nodeid;
3703
3704         error = create_message(r, lkb, to_nodeid, DLM_MSG_GRANT, &ms, &mh);
3705         if (error)
3706                 goto out;
3707
3708         send_args(r, lkb, ms);
3709
3710         ms->m_result = 0;
3711
3712         error = send_message(mh, ms);
3713  out:
3714         return error;
3715 }
3716
3717 static int send_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int mode)
3718 {
3719         struct dlm_message *ms;
3720         struct dlm_mhandle *mh;
3721         int to_nodeid, error;
3722
3723         to_nodeid = lkb->lkb_nodeid;
3724
3725         error = create_message(r, NULL, to_nodeid, DLM_MSG_BAST, &ms, &mh);
3726         if (error)
3727                 goto out;
3728
3729         send_args(r, lkb, ms);
3730
3731         ms->m_bastmode = mode;
3732
3733         error = send_message(mh, ms);
3734  out:
3735         return error;
3736 }
3737
3738 static int send_lookup(struct dlm_rsb *r, struct dlm_lkb *lkb)
3739 {
3740         struct dlm_message *ms;
3741         struct dlm_mhandle *mh;
3742         int to_nodeid, error;
3743
3744         to_nodeid = dlm_dir_nodeid(r);
3745
3746         error = add_to_waiters(lkb, DLM_MSG_LOOKUP, to_nodeid);
3747         if (error)
3748                 return error;
3749
3750         error = create_message(r, NULL, to_nodeid, DLM_MSG_LOOKUP, &ms, &mh);
3751         if (error)
3752                 goto fail;
3753
3754         send_args(r, lkb, ms);
3755
3756         error = send_message(mh, ms);
3757         if (error)
3758                 goto fail;
3759         return 0;
3760
3761  fail:
3762         remove_from_waiters(lkb, DLM_MSG_LOOKUP_REPLY);
3763         return error;
3764 }
3765
3766 static int send_remove(struct dlm_rsb *r)
3767 {
3768         struct dlm_message *ms;
3769         struct dlm_mhandle *mh;
3770         int to_nodeid, error;
3771
3772         to_nodeid = dlm_dir_nodeid(r);
3773
3774         error = create_message(r, NULL, to_nodeid, DLM_MSG_REMOVE, &ms, &mh);
3775         if (error)
3776                 goto out;
3777
3778         memcpy(ms->m_extra, r->res_name, r->res_length);
3779         ms->m_hash = r->res_hash;
3780
3781         error = send_message(mh, ms);
3782  out:
3783         return error;
3784 }
3785
3786 static int send_common_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
3787                              int mstype, int rv)
3788 {
3789         struct dlm_message *ms;
3790         struct dlm_mhandle *mh;
3791         int to_nodeid, error;
3792
3793         to_nodeid = lkb->lkb_nodeid;
3794
3795         error = create_message(r, lkb, to_nodeid, mstype, &ms, &mh);
3796         if (error)
3797                 goto out;
3798
3799         send_args(r, lkb, ms);
3800
3801         ms->m_result = rv;
3802
3803         error = send_message(mh, ms);
3804  out:
3805         return error;
3806 }
3807
3808 static int send_request_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv)
3809 {
3810         return send_common_reply(r, lkb, DLM_MSG_REQUEST_REPLY, rv);
3811 }
3812
3813 static int send_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv)
3814 {
3815         return send_common_reply(r, lkb, DLM_MSG_CONVERT_REPLY, rv);
3816 }
3817
3818 static int send_unlock_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv)
3819 {
3820         return send_common_reply(r, lkb, DLM_MSG_UNLOCK_REPLY, rv);
3821 }
3822
3823 static int send_cancel_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv)
3824 {
3825         return send_common_reply(r, lkb, DLM_MSG_CANCEL_REPLY, rv);
3826 }
3827
3828 static int send_lookup_reply(struct dlm_ls *ls, struct dlm_message *ms_in,
3829                              int ret_nodeid, int rv)
3830 {
3831         struct dlm_rsb *r = &ls->ls_stub_rsb;
3832         struct dlm_message *ms;
3833         struct dlm_mhandle *mh;
3834         int error, nodeid = ms_in->m_header.h_nodeid;
3835
3836         error = create_message(r, NULL, nodeid, DLM_MSG_LOOKUP_REPLY, &ms, &mh);
3837         if (error)
3838                 goto out;
3839
3840         ms->m_lkid = ms_in->m_lkid;
3841         ms->m_result = rv;
3842         ms->m_nodeid = ret_nodeid;
3843
3844         error = send_message(mh, ms);
3845  out:
3846         return error;
3847 }
3848
3849 /* which args we save from a received message depends heavily on the type
3850    of message, unlike the send side where we can safely send everything about
3851    the lkb for any type of message */
3852
3853 static void receive_flags(struct dlm_lkb *lkb, struct dlm_message *ms)
3854 {
3855         lkb->lkb_exflags = ms->m_exflags;
3856         lkb->lkb_sbflags = ms->m_sbflags;
3857         lkb->lkb_flags = (lkb->lkb_flags & 0xFFFF0000) |
3858                          (ms->m_flags & 0x0000FFFF);
3859 }
3860
3861 static void receive_flags_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
3862 {
3863         if (ms->m_flags == DLM_IFL_STUB_MS)
3864                 return;
3865
3866         lkb->lkb_sbflags = ms->m_sbflags;
3867         lkb->lkb_flags = (lkb->lkb_flags & 0xFFFF0000) |
3868                          (ms->m_flags & 0x0000FFFF);
3869 }
3870
3871 static int receive_extralen(struct dlm_message *ms)
3872 {
3873         return (ms->m_header.h_length - sizeof(struct dlm_message));
3874 }
3875
3876 static int receive_lvb(struct dlm_ls *ls, struct dlm_lkb *lkb,
3877                        struct dlm_message *ms)
3878 {
3879         int len;
3880
3881         if (lkb->lkb_exflags & DLM_LKF_VALBLK) {
3882                 if (!lkb->lkb_lvbptr)
3883                         lkb->lkb_lvbptr = dlm_allocate_lvb(ls);
3884                 if (!lkb->lkb_lvbptr)
3885                         return -ENOMEM;
3886                 len = receive_extralen(ms);
3887                 if (len > DLM_RESNAME_MAXLEN)
3888                         len = DLM_RESNAME_MAXLEN;
3889                 memcpy(lkb->lkb_lvbptr, ms->m_extra, len);
3890         }
3891         return 0;
3892 }
3893
3894 static void fake_bastfn(void *astparam, int mode)
3895 {
3896         log_print("fake_bastfn should not be called");
3897 }
3898
3899 static void fake_astfn(void *astparam)
3900 {
3901         log_print("fake_astfn should not be called");
3902 }
3903
3904 static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
3905                                 struct dlm_message *ms)
3906 {
3907         lkb->lkb_nodeid = ms->m_header.h_nodeid;
3908         lkb->lkb_ownpid = ms->m_pid;
3909         lkb->lkb_remid = ms->m_lkid;
3910         lkb->lkb_grmode = DLM_LOCK_IV;
3911         lkb->lkb_rqmode = ms->m_rqmode;
3912
3913         lkb->lkb_bastfn = (ms->m_asts & DLM_CB_BAST) ? &fake_bastfn : NULL;
3914         lkb->lkb_astfn = (ms->m_asts & DLM_CB_CAST) ? &fake_astfn : NULL;
3915
3916         if (lkb->lkb_exflags & DLM_LKF_VALBLK) {
3917                 /* lkb was just created so there won't be an lvb yet */
3918                 lkb->lkb_lvbptr = dlm_allocate_lvb(ls);
3919                 if (!lkb->lkb_lvbptr)
3920                         return -ENOMEM;
3921         }
3922
3923         return 0;
3924 }
3925
3926 static int receive_convert_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
3927                                 struct dlm_message *ms)
3928 {
3929         if (lkb->lkb_status != DLM_LKSTS_GRANTED)
3930                 return -EBUSY;
3931
3932         if (receive_lvb(ls, lkb, ms))
3933                 return -ENOMEM;
3934
3935         lkb->lkb_rqmode = ms->m_rqmode;
3936         lkb->lkb_lvbseq = ms->m_lvbseq;
3937
3938         return 0;
3939 }
3940
3941 static int receive_unlock_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
3942                                struct dlm_message *ms)
3943 {
3944         if (receive_lvb(ls, lkb, ms))
3945                 return -ENOMEM;
3946         return 0;
3947 }
3948
3949 /* We fill in the stub-lkb fields with the info that send_xxxx_reply()
3950    uses to send a reply and that the remote end uses to process the reply. */
3951
3952 static void setup_stub_lkb(struct dlm_ls *ls, struct dlm_message *ms)
3953 {
3954         struct dlm_lkb *lkb = &ls->ls_stub_lkb;
3955         lkb->lkb_nodeid = ms->m_header.h_nodeid;
3956         lkb->lkb_remid = ms->m_lkid;
3957 }
3958
3959 /* This is called after the rsb is locked so that we can safely inspect
3960    fields in the lkb. */
3961
3962 static int validate_message(struct dlm_lkb *lkb, struct dlm_message *ms)
3963 {
3964         int from = ms->m_header.h_nodeid;
3965         int error = 0;
3966
3967         switch (ms->m_type) {
3968         case DLM_MSG_CONVERT:
3969         case DLM_MSG_UNLOCK:
3970         case DLM_MSG_CANCEL:
3971                 if (!is_master_copy(lkb) || lkb->lkb_nodeid != from)
3972                         error = -EINVAL;
3973                 break;
3974
3975         case DLM_MSG_CONVERT_REPLY:
3976         case DLM_MSG_UNLOCK_REPLY:
3977         case DLM_MSG_CANCEL_REPLY:
3978         case DLM_MSG_GRANT:
3979         case DLM_MSG_BAST:
3980                 if (!is_process_copy(lkb) || lkb->lkb_nodeid != from)
3981                         error = -EINVAL;
3982                 break;
3983
3984         case DLM_MSG_REQUEST_REPLY:
3985                 if (!is_process_copy(lkb))
3986                         error = -EINVAL;
3987                 else if (lkb->lkb_nodeid != -1 && lkb->lkb_nodeid != from)
3988                         error = -EINVAL;
3989                 break;
3990
3991         default:
3992                 error = -EINVAL;
3993         }
3994
3995         if (error)
3996                 log_error(lkb->lkb_resource->res_ls,
3997                           "ignore invalid message %d from %d %x %x %x %d",
3998                           ms->m_type, from, lkb->lkb_id, lkb->lkb_remid,
3999                           lkb->lkb_flags, lkb->lkb_nodeid);
4000         return error;
4001 }
4002
4003 static void send_repeat_remove(struct dlm_ls *ls, char *ms_name, int len)
4004 {
4005         char name[DLM_RESNAME_MAXLEN + 1];
4006         struct dlm_message *ms;
4007         struct dlm_mhandle *mh;
4008         struct dlm_rsb *r;
4009         uint32_t hash, b;
4010         int rv, dir_nodeid;
4011
4012         memset(name, 0, sizeof(name));
4013         memcpy(name, ms_name, len);
4014
4015         hash = jhash(name, len, 0);
4016         b = hash & (ls->ls_rsbtbl_size - 1);
4017
4018         dir_nodeid = dlm_hash2nodeid(ls, hash);
4019
4020         log_error(ls, "send_repeat_remove dir %d %s", dir_nodeid, name);
4021
4022         spin_lock(&ls->ls_rsbtbl[b].lock);
4023         rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
4024         if (!rv) {
4025                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4026                 log_error(ls, "repeat_remove on keep %s", name);
4027                 return;
4028         }
4029
4030         rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
4031         if (!rv) {
4032                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4033                 log_error(ls, "repeat_remove on toss %s", name);
4034                 return;
4035         }
4036
4037         /* use ls->remove_name2 to avoid conflict with shrink? */
4038
4039         spin_lock(&ls->ls_remove_spin);
4040         ls->ls_remove_len = len;
4041         memcpy(ls->ls_remove_name, name, DLM_RESNAME_MAXLEN);
4042         spin_unlock(&ls->ls_remove_spin);
4043         spin_unlock(&ls->ls_rsbtbl[b].lock);
4044
4045         rv = _create_message(ls, sizeof(struct dlm_message) + len,
4046                              dir_nodeid, DLM_MSG_REMOVE, &ms, &mh);
4047         if (rv)
4048                 return;
4049
4050         memcpy(ms->m_extra, name, len);
4051         ms->m_hash = hash;
4052
4053         send_message(mh, ms);
4054
4055         spin_lock(&ls->ls_remove_spin);
4056         ls->ls_remove_len = 0;
4057         memset(ls->ls_remove_name, 0, DLM_RESNAME_MAXLEN);
4058         spin_unlock(&ls->ls_remove_spin);
4059 }
4060
4061 static int receive_request(struct dlm_ls *ls, struct dlm_message *ms)
4062 {
4063         struct dlm_lkb *lkb;
4064         struct dlm_rsb *r;
4065         int from_nodeid;
4066         int error, namelen = 0;
4067
4068         from_nodeid = ms->m_header.h_nodeid;
4069
4070         error = create_lkb(ls, &lkb);
4071         if (error)
4072                 goto fail;
4073
4074         receive_flags(lkb, ms);
4075         lkb->lkb_flags |= DLM_IFL_MSTCPY;
4076         error = receive_request_args(ls, lkb, ms);
4077         if (error) {
4078                 __put_lkb(ls, lkb);
4079                 goto fail;
4080         }
4081
4082         /* The dir node is the authority on whether we are the master
4083            for this rsb or not, so if the master sends us a request, we should
4084            recreate the rsb if we've destroyed it.   This race happens when we
4085            send a remove message to the dir node at the same time that the dir
4086            node sends us a request for the rsb. */
4087
4088         namelen = receive_extralen(ms);
4089
4090         error = find_rsb(ls, ms->m_extra, namelen, from_nodeid,
4091                          R_RECEIVE_REQUEST, &r);
4092         if (error) {
4093                 __put_lkb(ls, lkb);
4094                 goto fail;
4095         }
4096
4097         lock_rsb(r);
4098
4099         if (r->res_master_nodeid != dlm_our_nodeid()) {
4100                 error = validate_master_nodeid(ls, r, from_nodeid);
4101                 if (error) {
4102                         unlock_rsb(r);
4103                         put_rsb(r);
4104                         __put_lkb(ls, lkb);
4105                         goto fail;
4106                 }
4107         }
4108
4109         attach_lkb(r, lkb);
4110         error = do_request(r, lkb);
4111         send_request_reply(r, lkb, error);
4112         do_request_effects(r, lkb, error);
4113
4114         unlock_rsb(r);
4115         put_rsb(r);
4116
4117         if (error == -EINPROGRESS)
4118                 error = 0;
4119         if (error)
4120                 dlm_put_lkb(lkb);
4121         return 0;
4122
4123  fail:
4124         /* TODO: instead of returning ENOTBLK, add the lkb to res_lookup
4125            and do this receive_request again from process_lookup_list once
4126            we get the lookup reply.  This would avoid a many repeated
4127            ENOTBLK request failures when the lookup reply designating us
4128            as master is delayed. */
4129
4130         /* We could repeatedly return -EBADR here if our send_remove() is
4131            delayed in being sent/arriving/being processed on the dir node.
4132            Another node would repeatedly lookup up the master, and the dir
4133            node would continue returning our nodeid until our send_remove
4134            took effect.
4135
4136            We send another remove message in case our previous send_remove
4137            was lost/ignored/missed somehow. */
4138
4139         if (error != -ENOTBLK) {
4140                 log_limit(ls, "receive_request %x from %d %d",
4141                           ms->m_lkid, from_nodeid, error);
4142         }
4143
4144         if (namelen && error == -EBADR) {
4145                 send_repeat_remove(ls, ms->m_extra, namelen);
4146                 msleep(1000);
4147         }
4148
4149         setup_stub_lkb(ls, ms);
4150         send_request_reply(&ls->ls_stub_rsb, &ls->ls_stub_lkb, error);
4151         return error;
4152 }
4153
4154 static int receive_convert(struct dlm_ls *ls, struct dlm_message *ms)
4155 {
4156         struct dlm_lkb *lkb;
4157         struct dlm_rsb *r;
4158         int error, reply = 1;
4159
4160         error = find_lkb(ls, ms->m_remid, &lkb);
4161         if (error)
4162                 goto fail;
4163
4164         if (lkb->lkb_remid != ms->m_lkid) {
4165                 log_error(ls, "receive_convert %x remid %x recover_seq %llu "
4166                           "remote %d %x", lkb->lkb_id, lkb->lkb_remid,
4167                           (unsigned long long)lkb->lkb_recover_seq,
4168                           ms->m_header.h_nodeid, ms->m_lkid);
4169                 error = -ENOENT;
4170                 goto fail;
4171         }
4172
4173         r = lkb->lkb_resource;
4174
4175         hold_rsb(r);
4176         lock_rsb(r);
4177
4178         error = validate_message(lkb, ms);
4179         if (error)
4180                 goto out;
4181
4182         receive_flags(lkb, ms);
4183
4184         error = receive_convert_args(ls, lkb, ms);
4185         if (error) {
4186                 send_convert_reply(r, lkb, error);
4187                 goto out;
4188         }
4189
4190         reply = !down_conversion(lkb);
4191
4192         error = do_convert(r, lkb);
4193         if (reply)
4194                 send_convert_reply(r, lkb, error);
4195         do_convert_effects(r, lkb, error);
4196  out:
4197         unlock_rsb(r);
4198         put_rsb(r);
4199         dlm_put_lkb(lkb);
4200         return 0;
4201
4202  fail:
4203         setup_stub_lkb(ls, ms);
4204         send_convert_reply(&ls->ls_stub_rsb, &ls->ls_stub_lkb, error);
4205         return error;
4206 }
4207
4208 static int receive_unlock(struct dlm_ls *ls, struct dlm_message *ms)
4209 {
4210         struct dlm_lkb *lkb;
4211         struct dlm_rsb *r;
4212         int error;
4213
4214         error = find_lkb(ls, ms->m_remid, &lkb);
4215         if (error)
4216                 goto fail;
4217
4218         if (lkb->lkb_remid != ms->m_lkid) {
4219                 log_error(ls, "receive_unlock %x remid %x remote %d %x",
4220                           lkb->lkb_id, lkb->lkb_remid,
4221                           ms->m_header.h_nodeid, ms->m_lkid);
4222                 error = -ENOENT;
4223                 goto fail;
4224         }
4225
4226         r = lkb->lkb_resource;
4227
4228         hold_rsb(r);
4229         lock_rsb(r);
4230
4231         error = validate_message(lkb, ms);
4232         if (error)
4233                 goto out;
4234
4235         receive_flags(lkb, ms);
4236
4237         error = receive_unlock_args(ls, lkb, ms);
4238         if (error) {
4239                 send_unlock_reply(r, lkb, error);
4240                 goto out;
4241         }
4242
4243         error = do_unlock(r, lkb);
4244         send_unlock_reply(r, lkb, error);
4245         do_unlock_effects(r, lkb, error);
4246  out:
4247         unlock_rsb(r);
4248         put_rsb(r);
4249         dlm_put_lkb(lkb);
4250         return 0;
4251
4252  fail:
4253         setup_stub_lkb(ls, ms);
4254         send_unlock_reply(&ls->ls_stub_rsb, &ls->ls_stub_lkb, error);
4255         return error;
4256 }
4257
4258 static int receive_cancel(struct dlm_ls *ls, struct dlm_message *ms)
4259 {
4260         struct dlm_lkb *lkb;
4261         struct dlm_rsb *r;
4262         int error;
4263
4264         error = find_lkb(ls, ms->m_remid, &lkb);
4265         if (error)
4266                 goto fail;
4267
4268         receive_flags(lkb, ms);
4269
4270         r = lkb->lkb_resource;
4271
4272         hold_rsb(r);
4273         lock_rsb(r);
4274
4275         error = validate_message(lkb, ms);
4276         if (error)
4277                 goto out;
4278
4279         error = do_cancel(r, lkb);
4280         send_cancel_reply(r, lkb, error);
4281         do_cancel_effects(r, lkb, error);
4282  out:
4283         unlock_rsb(r);
4284         put_rsb(r);
4285         dlm_put_lkb(lkb);
4286         return 0;
4287
4288  fail:
4289         setup_stub_lkb(ls, ms);
4290         send_cancel_reply(&ls->ls_stub_rsb, &ls->ls_stub_lkb, error);
4291         return error;
4292 }
4293
4294 static int receive_grant(struct dlm_ls *ls, struct dlm_message *ms)
4295 {
4296         struct dlm_lkb *lkb;
4297         struct dlm_rsb *r;
4298         int error;
4299
4300         error = find_lkb(ls, ms->m_remid, &lkb);
4301         if (error)
4302                 return error;
4303
4304         r = lkb->lkb_resource;
4305
4306         hold_rsb(r);
4307         lock_rsb(r);
4308
4309         error = validate_message(lkb, ms);
4310         if (error)
4311                 goto out;
4312
4313         receive_flags_reply(lkb, ms);
4314         if (is_altmode(lkb))
4315                 munge_altmode(lkb, ms);
4316         grant_lock_pc(r, lkb, ms);
4317         queue_cast(r, lkb, 0);
4318  out:
4319         unlock_rsb(r);
4320         put_rsb(r);
4321         dlm_put_lkb(lkb);
4322         return 0;
4323 }
4324
4325 static int receive_bast(struct dlm_ls *ls, struct dlm_message *ms)
4326 {
4327         struct dlm_lkb *lkb;
4328         struct dlm_rsb *r;
4329         int error;
4330
4331         error = find_lkb(ls, ms->m_remid, &lkb);
4332         if (error)
4333                 return error;
4334
4335         r = lkb->lkb_resource;
4336
4337         hold_rsb(r);
4338         lock_rsb(r);
4339
4340         error = validate_message(lkb, ms);
4341         if (error)
4342                 goto out;
4343
4344         queue_bast(r, lkb, ms->m_bastmode);
4345         lkb->lkb_highbast = ms->m_bastmode;
4346  out:
4347         unlock_rsb(r);
4348         put_rsb(r);
4349         dlm_put_lkb(lkb);
4350         return 0;
4351 }
4352
4353 static void receive_lookup(struct dlm_ls *ls, struct dlm_message *ms)
4354 {
4355         int len, error, ret_nodeid, from_nodeid, our_nodeid;
4356
4357         from_nodeid = ms->m_header.h_nodeid;
4358         our_nodeid = dlm_our_nodeid();
4359
4360         len = receive_extralen(ms);
4361
4362         error = dlm_master_lookup(ls, from_nodeid, ms->m_extra, len, 0,
4363                                   &ret_nodeid, NULL);
4364
4365         /* Optimization: we're master so treat lookup as a request */
4366         if (!error && ret_nodeid == our_nodeid) {
4367                 receive_request(ls, ms);
4368                 return;
4369         }
4370         send_lookup_reply(ls, ms, ret_nodeid, error);
4371 }
4372
4373 static void receive_remove(struct dlm_ls *ls, struct dlm_message *ms)
4374 {
4375         char name[DLM_RESNAME_MAXLEN+1];
4376         struct dlm_rsb *r;
4377         uint32_t hash, b;
4378         int rv, len, dir_nodeid, from_nodeid;
4379
4380         from_nodeid = ms->m_header.h_nodeid;
4381
4382         len = receive_extralen(ms);
4383
4384         if (len > DLM_RESNAME_MAXLEN) {
4385                 log_error(ls, "receive_remove from %d bad len %d",
4386                           from_nodeid, len);
4387                 return;
4388         }
4389
4390         dir_nodeid = dlm_hash2nodeid(ls, ms->m_hash);
4391         if (dir_nodeid != dlm_our_nodeid()) {
4392                 log_error(ls, "receive_remove from %d bad nodeid %d",
4393                           from_nodeid, dir_nodeid);
4394                 return;
4395         }
4396
4397         /* Look for name on rsbtbl.toss, if it's there, kill it.
4398            If it's on rsbtbl.keep, it's being used, and we should ignore this
4399            message.  This is an expected race between the dir node sending a
4400            request to the master node at the same time as the master node sends
4401            a remove to the dir node.  The resolution to that race is for the
4402            dir node to ignore the remove message, and the master node to
4403            recreate the master rsb when it gets a request from the dir node for
4404            an rsb it doesn't have. */
4405
4406         memset(name, 0, sizeof(name));
4407         memcpy(name, ms->m_extra, len);
4408
4409         hash = jhash(name, len, 0);
4410         b = hash & (ls->ls_rsbtbl_size - 1);
4411
4412         spin_lock(&ls->ls_rsbtbl[b].lock);
4413
4414         rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].toss, name, len, &r);
4415         if (rv) {
4416                 /* verify the rsb is on keep list per comment above */
4417                 rv = dlm_search_rsb_tree(&ls->ls_rsbtbl[b].keep, name, len, &r);
4418                 if (rv) {
4419                         /* should not happen */
4420                         log_error(ls, "receive_remove from %d not found %s",
4421                                   from_nodeid, name);
4422                         spin_unlock(&ls->ls_rsbtbl[b].lock);
4423                         return;
4424                 }
4425                 if (r->res_master_nodeid != from_nodeid) {
4426                         /* should not happen */
4427                         log_error(ls, "receive_remove keep from %d master %d",
4428                                   from_nodeid, r->res_master_nodeid);
4429                         dlm_print_rsb(r);
4430                         spin_unlock(&ls->ls_rsbtbl[b].lock);
4431                         return;
4432                 }
4433
4434                 log_debug(ls, "receive_remove from %d master %d first %x %s",
4435                           from_nodeid, r->res_master_nodeid, r->res_first_lkid,
4436                           name);
4437                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4438                 return;
4439         }
4440
4441         if (r->res_master_nodeid != from_nodeid) {
4442                 log_error(ls, "receive_remove toss from %d master %d",
4443                           from_nodeid, r->res_master_nodeid);
4444                 dlm_print_rsb(r);
4445                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4446                 return;
4447         }
4448
4449         if (kref_put(&r->res_ref, kill_rsb)) {
4450                 rb_erase(&r->res_hashnode, &ls->ls_rsbtbl[b].toss);
4451                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4452                 dlm_free_rsb(r);
4453         } else {
4454                 log_error(ls, "receive_remove from %d rsb ref error",
4455                           from_nodeid);
4456                 dlm_print_rsb(r);
4457                 spin_unlock(&ls->ls_rsbtbl[b].lock);
4458         }
4459 }
4460
4461 static void receive_purge(struct dlm_ls *ls, struct dlm_message *ms)
4462 {
4463         do_purge(ls, ms->m_nodeid, ms->m_pid);
4464 }
4465
4466 static int receive_request_reply(struct dlm_ls *ls, struct dlm_message *ms)
4467 {
4468         struct dlm_lkb *lkb;
4469         struct dlm_rsb *r;
4470         int error, mstype, result;
4471         int from_nodeid = ms->m_header.h_nodeid;
4472
4473         error = find_lkb(ls, ms->m_remid, &lkb);
4474         if (error)
4475                 return error;
4476
4477         r = lkb->lkb_resource;
4478         hold_rsb(r);
4479         lock_rsb(r);
4480
4481         error = validate_message(lkb, ms);
4482         if (error)
4483                 goto out;
4484
4485         mstype = lkb->lkb_wait_type;
4486         error = remove_from_waiters(lkb, DLM_MSG_REQUEST_REPLY);
4487         if (error) {
4488                 log_error(ls, "receive_request_reply %x remote %d %x result %d",
4489                           lkb->lkb_id, from_nodeid, ms->m_lkid, ms->m_result);
4490                 dlm_dump_rsb(r);
4491                 goto out;
4492         }
4493
4494         /* Optimization: the dir node was also the master, so it took our
4495            lookup as a request and sent request reply instead of lookup reply */
4496         if (mstype == DLM_MSG_LOOKUP) {
4497                 r->res_master_nodeid = from_nodeid;
4498                 r->res_nodeid = from_nodeid;
4499                 lkb->lkb_nodeid = from_nodeid;
4500         }
4501
4502         /* this is the value returned from do_request() on the master */
4503         result = ms->m_result;
4504
4505         switch (result) {
4506         case -EAGAIN:
4507                 /* request would block (be queued) on remote master */
4508                 queue_cast(r, lkb, -EAGAIN);
4509                 confirm_master(r, -EAGAIN);
4510                 unhold_lkb(lkb); /* undoes create_lkb() */
4511                 break;
4512
4513         case -EINPROGRESS:
4514         case 0:
4515                 /* request was queued or granted on remote master */
4516                 receive_flags_reply(lkb, ms);
4517                 lkb->lkb_remid = ms->m_lkid;
4518                 if (is_altmode(lkb))
4519                         munge_altmode(lkb, ms);
4520                 if (result) {
4521                         add_lkb(r, lkb, DLM_LKSTS_WAITING);
4522                         add_timeout(lkb);
4523                 } else {
4524                         grant_lock_pc(r, lkb, ms);
4525                         queue_cast(r, lkb, 0);
4526                 }
4527                 confirm_master(r, result);
4528                 break;
4529
4530         case -EBADR:
4531         case -ENOTBLK:
4532                 /* find_rsb failed to find rsb or rsb wasn't master */
4533                 log_limit(ls, "receive_request_reply %x from %d %d "
4534                           "master %d dir %d first %x %s", lkb->lkb_id,
4535                           from_nodeid, result, r->res_master_nodeid,
4536                           r->res_dir_nodeid, r->res_first_lkid, r->res_name);
4537
4538                 if (r->res_dir_nodeid != dlm_our_nodeid() &&
4539                     r->res_master_nodeid != dlm_our_nodeid()) {
4540                         /* cause _request_lock->set_master->send_lookup */
4541                         r->res_master_nodeid = 0;
4542                         r->res_nodeid = -1;
4543                         lkb->lkb_nodeid = -1;
4544                 }
4545
4546                 if (is_overlap(lkb)) {
4547                         /* we'll ignore error in cancel/unlock reply */
4548                         queue_cast_overlap(r, lkb);
4549                         confirm_master(r, result);
4550                         unhold_lkb(lkb); /* undoes create_lkb() */
4551                 } else {
4552                         _request_lock(r, lkb);
4553
4554                         if (r->res_master_nodeid == dlm_our_nodeid())
4555                                 confirm_master(r, 0);
4556                 }
4557                 break;
4558
4559         default:
4560                 log_error(ls, "receive_request_reply %x error %d",
4561                           lkb->lkb_id, result);
4562         }
4563
4564         if (is_overlap_unlock(lkb) && (result == 0 || result == -EINPROGRESS)) {
4565                 log_debug(ls, "receive_request_reply %x result %d unlock",
4566                           lkb->lkb_id, result);
4567                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK;
4568                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
4569                 send_unlock(r, lkb);
4570         } else if (is_overlap_cancel(lkb) && (result == -EINPROGRESS)) {
4571                 log_debug(ls, "receive_request_reply %x cancel", lkb->lkb_id);
4572                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK;
4573                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
4574                 send_cancel(r, lkb);
4575         } else {
4576                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
4577                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK;
4578         }
4579  out:
4580         unlock_rsb(r);
4581         put_rsb(r);
4582         dlm_put_lkb(lkb);
4583         return 0;
4584 }
4585
4586 static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb,
4587                                     struct dlm_message *ms)
4588 {
4589         /* this is the value returned from do_convert() on the master */
4590         switch (ms->m_result) {
4591         case -EAGAIN:
4592                 /* convert would block (be queued) on remote master */
4593                 queue_cast(r, lkb, -EAGAIN);
4594                 break;
4595
4596         case -EDEADLK:
4597                 receive_flags_reply(lkb, ms);
4598                 revert_lock_pc(r, lkb);
4599                 queue_cast(r, lkb, -EDEADLK);
4600                 break;
4601
4602         case -EINPROGRESS:
4603                 /* convert was queued on remote master */
4604                 receive_flags_reply(lkb, ms);
4605                 if (is_demoted(lkb))
4606                         munge_demoted(lkb);
4607                 del_lkb(r, lkb);
4608                 add_lkb(r, lkb, DLM_LKSTS_CONVERT);
4609                 add_timeout(lkb);
4610                 break;
4611
4612         case 0:
4613                 /* convert was granted on remote master */
4614                 receive_flags_reply(lkb, ms);
4615                 if (is_demoted(lkb))
4616                         munge_demoted(lkb);
4617                 grant_lock_pc(r, lkb, ms);
4618                 queue_cast(r, lkb, 0);
4619                 break;
4620
4621         default:
4622                 log_error(r->res_ls, "receive_convert_reply %x remote %d %x %d",
4623                           lkb->lkb_id, ms->m_header.h_nodeid, ms->m_lkid,
4624                           ms->m_result);
4625                 dlm_print_rsb(r);
4626                 dlm_print_lkb(lkb);
4627         }
4628 }
4629
4630 static void _receive_convert_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4631 {
4632         struct dlm_rsb *r = lkb->lkb_resource;
4633         int error;
4634
4635         hold_rsb(r);
4636         lock_rsb(r);
4637
4638         error = validate_message(lkb, ms);
4639         if (error)
4640                 goto out;
4641
4642         /* stub reply can happen with waiters_mutex held */
4643         error = remove_from_waiters_ms(lkb, ms);
4644         if (error)
4645                 goto out;
4646
4647         __receive_convert_reply(r, lkb, ms);
4648  out:
4649         unlock_rsb(r);
4650         put_rsb(r);
4651 }
4652
4653 static int receive_convert_reply(struct dlm_ls *ls, struct dlm_message *ms)
4654 {
4655         struct dlm_lkb *lkb;
4656         int error;
4657
4658         error = find_lkb(ls, ms->m_remid, &lkb);
4659         if (error)
4660                 return error;
4661
4662         _receive_convert_reply(lkb, ms);
4663         dlm_put_lkb(lkb);
4664         return 0;
4665 }
4666
4667 static void _receive_unlock_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4668 {
4669         struct dlm_rsb *r = lkb->lkb_resource;
4670         int error;
4671
4672         hold_rsb(r);
4673         lock_rsb(r);
4674
4675         error = validate_message(lkb, ms);
4676         if (error)
4677                 goto out;
4678
4679         /* stub reply can happen with waiters_mutex held */
4680         error = remove_from_waiters_ms(lkb, ms);
4681         if (error)
4682                 goto out;
4683
4684         /* this is the value returned from do_unlock() on the master */
4685
4686         switch (ms->m_result) {
4687         case -DLM_EUNLOCK:
4688                 receive_flags_reply(lkb, ms);
4689                 remove_lock_pc(r, lkb);
4690                 queue_cast(r, lkb, -DLM_EUNLOCK);
4691                 break;
4692         case -ENOENT:
4693                 break;
4694         default:
4695                 log_error(r->res_ls, "receive_unlock_reply %x error %d",
4696                           lkb->lkb_id, ms->m_result);
4697         }
4698  out:
4699         unlock_rsb(r);
4700         put_rsb(r);
4701 }
4702
4703 static int receive_unlock_reply(struct dlm_ls *ls, struct dlm_message *ms)
4704 {
4705         struct dlm_lkb *lkb;
4706         int error;
4707
4708         error = find_lkb(ls, ms->m_remid, &lkb);
4709         if (error)
4710                 return error;
4711
4712         _receive_unlock_reply(lkb, ms);
4713         dlm_put_lkb(lkb);
4714         return 0;
4715 }
4716
4717 static void _receive_cancel_reply(struct dlm_lkb *lkb, struct dlm_message *ms)
4718 {
4719         struct dlm_rsb *r = lkb->lkb_resource;
4720         int error;
4721
4722         hold_rsb(r);
4723         lock_rsb(r);
4724
4725         error = validate_message(lkb, ms);
4726         if (error)
4727                 goto out;
4728
4729         /* stub reply can happen with waiters_mutex held */
4730         error = remove_from_waiters_ms(lkb, ms);
4731         if (error)
4732                 goto out;
4733
4734         /* this is the value returned from do_cancel() on the master */
4735
4736         switch (ms->m_result) {
4737         case -DLM_ECANCEL:
4738                 receive_flags_reply(lkb, ms);
4739                 revert_lock_pc(r, lkb);
4740                 queue_cast(r, lkb, -DLM_ECANCEL);
4741                 break;
4742         case 0:
4743                 break;
4744         default:
4745                 log_error(r->res_ls, "receive_cancel_reply %x error %d",
4746                           lkb->lkb_id, ms->m_result);
4747         }
4748  out:
4749         unlock_rsb(r);
4750         put_rsb(r);
4751 }
4752
4753 static int receive_cancel_reply(struct dlm_ls *ls, struct dlm_message *ms)
4754 {
4755         struct dlm_lkb *lkb;
4756         int error;
4757
4758         error = find_lkb(ls, ms->m_remid, &lkb);
4759         if (error)
4760                 return error;
4761
4762         _receive_cancel_reply(lkb, ms);
4763         dlm_put_lkb(lkb);
4764         return 0;
4765 }
4766
4767 static void receive_lookup_reply(struct dlm_ls *ls, struct dlm_message *ms)
4768 {
4769         struct dlm_lkb *lkb;
4770         struct dlm_rsb *r;
4771         int error, ret_nodeid;
4772         int do_lookup_list = 0;
4773
4774         error = find_lkb(ls, ms->m_lkid, &lkb);
4775         if (error) {
4776                 log_error(ls, "receive_lookup_reply no lkid %x", ms->m_lkid);
4777                 return;
4778         }
4779
4780         /* ms->m_result is the value returned by dlm_master_lookup on dir node
4781            FIXME: will a non-zero error ever be returned? */
4782
4783         r = lkb->lkb_resource;
4784         hold_rsb(r);
4785         lock_rsb(r);
4786
4787         error = remove_from_waiters(lkb, DLM_MSG_LOOKUP_REPLY);
4788         if (error)
4789                 goto out;
4790
4791         ret_nodeid = ms->m_nodeid;
4792
4793         /* We sometimes receive a request from the dir node for this
4794            rsb before we've received the dir node's loookup_reply for it.
4795            The request from the dir node implies we're the master, so we set
4796            ourself as master in receive_request_reply, and verify here that
4797            we are indeed the master. */
4798
4799         if (r->res_master_nodeid && (r->res_master_nodeid != ret_nodeid)) {
4800                 /* This should never happen */
4801                 log_error(ls, "receive_lookup_reply %x from %d ret %d "
4802                           "master %d dir %d our %d first %x %s",
4803                           lkb->lkb_id, ms->m_header.h_nodeid, ret_nodeid,
4804                           r->res_master_nodeid, r->res_dir_nodeid,
4805                           dlm_our_nodeid(), r->res_first_lkid, r->res_name);
4806         }
4807
4808         if (ret_nodeid == dlm_our_nodeid()) {
4809                 r->res_master_nodeid = ret_nodeid;
4810                 r->res_nodeid = 0;
4811                 do_lookup_list = 1;
4812                 r->res_first_lkid = 0;
4813         } else if (ret_nodeid == -1) {
4814                 /* the remote node doesn't believe it's the dir node */
4815                 log_error(ls, "receive_lookup_reply %x from %d bad ret_nodeid",
4816                           lkb->lkb_id, ms->m_header.h_nodeid);
4817                 r->res_master_nodeid = 0;
4818                 r->res_nodeid = -1;
4819                 lkb->lkb_nodeid = -1;
4820         } else {
4821                 /* set_master() will set lkb_nodeid from r */
4822                 r->res_master_nodeid = ret_nodeid;
4823                 r->res_nodeid = ret_nodeid;
4824         }
4825
4826         if (is_overlap(lkb)) {
4827                 log_debug(ls, "receive_lookup_reply %x unlock %x",
4828                           lkb->lkb_id, lkb->lkb_flags);
4829                 queue_cast_overlap(r, lkb);
4830                 unhold_lkb(lkb); /* undoes create_lkb() */
4831                 goto out_list;
4832         }
4833
4834         _request_lock(r, lkb);
4835
4836  out_list:
4837         if (do_lookup_list)
4838                 process_lookup_list(r);
4839  out:
4840         unlock_rsb(r);
4841         put_rsb(r);
4842         dlm_put_lkb(lkb);
4843 }
4844
4845 static void _receive_message(struct dlm_ls *ls, struct dlm_message *ms,
4846                              uint32_t saved_seq)
4847 {
4848         int error = 0, noent = 0;
4849
4850         if (!dlm_is_member(ls, ms->m_header.h_nodeid)) {
4851                 log_limit(ls, "receive %d from non-member %d %x %x %d",
4852                           ms->m_type, ms->m_header.h_nodeid, ms->m_lkid,
4853                           ms->m_remid, ms->m_result);
4854                 return;
4855         }
4856
4857         switch (ms->m_type) {
4858
4859         /* messages sent to a master node */
4860
4861         case DLM_MSG_REQUEST:
4862                 error = receive_request(ls, ms);
4863                 break;
4864
4865         case DLM_MSG_CONVERT:
4866                 error = receive_convert(ls, ms);
4867                 break;
4868
4869         case DLM_MSG_UNLOCK:
4870                 error = receive_unlock(ls, ms);
4871                 break;
4872
4873         case DLM_MSG_CANCEL:
4874                 noent = 1;
4875                 error = receive_cancel(ls, ms);
4876                 break;
4877
4878         /* messages sent from a master node (replies to above) */
4879
4880         case DLM_MSG_REQUEST_REPLY:
4881                 error = receive_request_reply(ls, ms);
4882                 break;
4883
4884         case DLM_MSG_CONVERT_REPLY:
4885                 error = receive_convert_reply(ls, ms);
4886                 break;
4887
4888         case DLM_MSG_UNLOCK_REPLY:
4889                 error = receive_unlock_reply(ls, ms);
4890                 break;
4891
4892         case DLM_MSG_CANCEL_REPLY:
4893                 error = receive_cancel_reply(ls, ms);
4894                 break;
4895
4896         /* messages sent from a master node (only two types of async msg) */
4897
4898         case DLM_MSG_GRANT:
4899                 noent = 1;
4900                 error = receive_grant(ls, ms);
4901                 break;
4902
4903         case DLM_MSG_BAST:
4904                 noent = 1;
4905                 error = receive_bast(ls, ms);
4906                 break;
4907
4908         /* messages sent to a dir node */
4909
4910         case DLM_MSG_LOOKUP:
4911                 receive_lookup(ls, ms);
4912                 break;
4913
4914         case DLM_MSG_REMOVE:
4915                 receive_remove(ls, ms);
4916                 break;
4917
4918         /* messages sent from a dir node (remove has no reply) */
4919
4920         case DLM_MSG_LOOKUP_REPLY:
4921                 receive_lookup_reply(ls, ms);
4922                 break;
4923
4924         /* other messages */
4925
4926         case DLM_MSG_PURGE:
4927                 receive_purge(ls, ms);
4928                 break;
4929
4930         default:
4931                 log_error(ls, "unknown message type %d", ms->m_type);
4932         }
4933
4934         /*
4935          * When checking for ENOENT, we're checking the result of
4936          * find_lkb(m_remid):
4937          *
4938          * The lock id referenced in the message wasn't found.  This may
4939          * happen in normal usage for the async messages and cancel, so
4940          * only use log_debug for them.
4941          *
4942          * Some errors are expected and normal.
4943          */
4944
4945         if (error == -ENOENT && noent) {
4946                 log_debug(ls, "receive %d no %x remote %d %x saved_seq %u",
4947                           ms->m_type, ms->m_remid, ms->m_header.h_nodeid,
4948                           ms->m_lkid, saved_seq);
4949         } else if (error == -ENOENT) {
4950                 log_error(ls, "receive %d no %x remote %d %x saved_seq %u",
4951                           ms->m_type, ms->m_remid, ms->m_header.h_nodeid,
4952                           ms->m_lkid, saved_seq);
4953
4954                 if (ms->m_type == DLM_MSG_CONVERT)
4955                         dlm_dump_rsb_hash(ls, ms->m_hash);
4956         }
4957
4958         if (error == -EINVAL) {
4959                 log_error(ls, "receive %d inval from %d lkid %x remid %x "
4960                           "saved_seq %u",
4961                           ms->m_type, ms->m_header.h_nodeid,
4962                           ms->m_lkid, ms->m_remid, saved_seq);
4963         }
4964 }
4965
4966 /* If the lockspace is in recovery mode (locking stopped), then normal
4967    messages are saved on the requestqueue for processing after recovery is
4968    done.  When not in recovery mode, we wait for dlm_recoverd to drain saved
4969    messages off the requestqueue before we process new ones. This occurs right
4970    after recovery completes when we transition from saving all messages on
4971    requestqueue, to processing all the saved messages, to processing new
4972    messages as they arrive. */
4973
4974 static void dlm_receive_message(struct dlm_ls *ls, struct dlm_message *ms,
4975                                 int nodeid)
4976 {
4977         if (dlm_locking_stopped(ls)) {
4978                 /* If we were a member of this lockspace, left, and rejoined,
4979                    other nodes may still be sending us messages from the
4980                    lockspace generation before we left. */
4981                 if (!ls->ls_generation) {
4982                         log_limit(ls, "receive %d from %d ignore old gen",
4983                                   ms->m_type, nodeid);
4984                         return;
4985                 }
4986
4987                 dlm_add_requestqueue(ls, nodeid, ms);
4988         } else {
4989                 dlm_wait_requestqueue(ls);
4990                 _receive_message(ls, ms, 0);
4991         }
4992 }
4993
4994 /* This is called by dlm_recoverd to process messages that were saved on
4995    the requestqueue. */
4996
4997 void dlm_receive_message_saved(struct dlm_ls *ls, struct dlm_message *ms,
4998                                uint32_t saved_seq)
4999 {
5000         _receive_message(ls, ms, saved_seq);
5001 }
5002
5003 /* This is called by the midcomms layer when something is received for
5004    the lockspace.  It could be either a MSG (normal message sent as part of
5005    standard locking activity) or an RCOM (recovery message sent as part of
5006    lockspace recovery). */
5007
5008 void dlm_receive_buffer(union dlm_packet *p, int nodeid)
5009 {
5010         struct dlm_header *hd = &p->header;
5011         struct dlm_ls *ls;
5012         int type = 0;
5013
5014         switch (hd->h_cmd) {
5015         case DLM_MSG:
5016                 dlm_message_in(&p->message);
5017                 type = p->message.m_type;
5018                 break;
5019         case DLM_RCOM:
5020                 dlm_rcom_in(&p->rcom);
5021                 type = p->rcom.rc_type;
5022                 break;
5023         default:
5024                 log_print("invalid h_cmd %d from %u", hd->h_cmd, nodeid);
5025                 return;
5026         }
5027
5028         if (hd->h_nodeid != nodeid) {
5029                 log_print("invalid h_nodeid %d from %d lockspace %x",
5030                           hd->h_nodeid, nodeid, hd->h_lockspace);
5031                 return;
5032         }
5033
5034         ls = dlm_find_lockspace_global(hd->h_lockspace);
5035         if (!ls) {
5036                 if (dlm_config.ci_log_debug) {
5037                         printk_ratelimited(KERN_DEBUG "dlm: invalid lockspace "
5038                                 "%u from %d cmd %d type %d\n",
5039                                 hd->h_lockspace, nodeid, hd->h_cmd, type);
5040                 }
5041
5042                 if (hd->h_cmd == DLM_RCOM && type == DLM_RCOM_STATUS)
5043                         dlm_send_ls_not_ready(nodeid, &p->rcom);
5044                 return;
5045         }
5046
5047         /* this rwsem allows dlm_ls_stop() to wait for all dlm_recv threads to
5048            be inactive (in this ls) before transitioning to recovery mode */
5049
5050         down_read(&ls->ls_recv_active);
5051         if (hd->h_cmd == DLM_MSG)
5052                 dlm_receive_message(ls, &p->message, nodeid);
5053         else
5054                 dlm_receive_rcom(ls, &p->rcom, nodeid);
5055         up_read(&ls->ls_recv_active);
5056
5057         dlm_put_lockspace(ls);
5058 }
5059
5060 static void recover_convert_waiter(struct dlm_ls *ls, struct dlm_lkb *lkb,
5061                                    struct dlm_message *ms_stub)
5062 {
5063         if (middle_conversion(lkb)) {
5064                 hold_lkb(lkb);
5065                 memset(ms_stub, 0, sizeof(struct dlm_message));
5066                 ms_stub->m_flags = DLM_IFL_STUB_MS;
5067                 ms_stub->m_type = DLM_MSG_CONVERT_REPLY;
5068                 ms_stub->m_result = -EINPROGRESS;
5069                 ms_stub->m_header.h_nodeid = lkb->lkb_nodeid;
5070                 _receive_convert_reply(lkb, ms_stub);
5071
5072                 /* Same special case as in receive_rcom_lock_args() */
5073                 lkb->lkb_grmode = DLM_LOCK_IV;
5074                 rsb_set_flag(lkb->lkb_resource, RSB_RECOVER_CONVERT);
5075                 unhold_lkb(lkb);
5076
5077         } else if (lkb->lkb_rqmode >= lkb->lkb_grmode) {
5078                 lkb->lkb_flags |= DLM_IFL_RESEND;
5079         }
5080
5081         /* lkb->lkb_rqmode < lkb->lkb_grmode shouldn't happen since down
5082            conversions are async; there's no reply from the remote master */
5083 }
5084
5085 /* A waiting lkb needs recovery if the master node has failed, or
5086    the master node is changing (only when no directory is used) */
5087
5088 static int waiter_needs_recovery(struct dlm_ls *ls, struct dlm_lkb *lkb,
5089                                  int dir_nodeid)
5090 {
5091         if (dlm_no_directory(ls))
5092                 return 1;
5093
5094         if (dlm_is_removed(ls, lkb->lkb_wait_nodeid))
5095                 return 1;
5096
5097         return 0;
5098 }
5099
5100 /* Recovery for locks that are waiting for replies from nodes that are now
5101    gone.  We can just complete unlocks and cancels by faking a reply from the
5102    dead node.  Requests and up-conversions we flag to be resent after
5103    recovery.  Down-conversions can just be completed with a fake reply like
5104    unlocks.  Conversions between PR and CW need special attention. */
5105
5106 void dlm_recover_waiters_pre(struct dlm_ls *ls)
5107 {
5108         struct dlm_lkb *lkb, *safe;
5109         struct dlm_message *ms_stub;
5110         int wait_type, stub_unlock_result, stub_cancel_result;
5111         int dir_nodeid;
5112
5113         ms_stub = kmalloc(sizeof(struct dlm_message), GFP_KERNEL);
5114         if (!ms_stub) {
5115                 log_error(ls, "dlm_recover_waiters_pre no mem");
5116                 return;
5117         }
5118
5119         mutex_lock(&ls->ls_waiters_mutex);
5120
5121         list_for_each_entry_safe(lkb, safe, &ls->ls_waiters, lkb_wait_reply) {
5122
5123                 dir_nodeid = dlm_dir_nodeid(lkb->lkb_resource);
5124
5125                 /* exclude debug messages about unlocks because there can be so
5126                    many and they aren't very interesting */
5127
5128                 if (lkb->lkb_wait_type != DLM_MSG_UNLOCK) {
5129                         log_debug(ls, "waiter %x remote %x msg %d r_nodeid %d "
5130                                   "lkb_nodeid %d wait_nodeid %d dir_nodeid %d",
5131                                   lkb->lkb_id,
5132                                   lkb->lkb_remid,
5133                                   lkb->lkb_wait_type,
5134                                   lkb->lkb_resource->res_nodeid,
5135                                   lkb->lkb_nodeid,
5136                                   lkb->lkb_wait_nodeid,
5137                                   dir_nodeid);
5138                 }
5139
5140                 /* all outstanding lookups, regardless of destination  will be
5141                    resent after recovery is done */
5142
5143                 if (lkb->lkb_wait_type == DLM_MSG_LOOKUP) {
5144                         lkb->lkb_flags |= DLM_IFL_RESEND;
5145                         continue;
5146                 }
5147
5148                 if (!waiter_needs_recovery(ls, lkb, dir_nodeid))
5149                         continue;
5150
5151                 wait_type = lkb->lkb_wait_type;
5152                 stub_unlock_result = -DLM_EUNLOCK;
5153                 stub_cancel_result = -DLM_ECANCEL;
5154
5155                 /* Main reply may have been received leaving a zero wait_type,
5156                    but a reply for the overlapping op may not have been
5157                    received.  In that case we need to fake the appropriate
5158                    reply for the overlap op. */
5159
5160                 if (!wait_type) {
5161                         if (is_overlap_cancel(lkb)) {
5162                                 wait_type = DLM_MSG_CANCEL;
5163                                 if (lkb->lkb_grmode == DLM_LOCK_IV)
5164                                         stub_cancel_result = 0;
5165                         }
5166                         if (is_overlap_unlock(lkb)) {
5167                                 wait_type = DLM_MSG_UNLOCK;
5168                                 if (lkb->lkb_grmode == DLM_LOCK_IV)
5169                                         stub_unlock_result = -ENOENT;
5170                         }
5171
5172                         log_debug(ls, "rwpre overlap %x %x %d %d %d",
5173                                   lkb->lkb_id, lkb->lkb_flags, wait_type,
5174                                   stub_cancel_result, stub_unlock_result);
5175                 }
5176
5177                 switch (wait_type) {
5178
5179                 case DLM_MSG_REQUEST:
5180                         lkb->lkb_flags |= DLM_IFL_RESEND;
5181                         break;
5182
5183                 case DLM_MSG_CONVERT:
5184                         recover_convert_waiter(ls, lkb, ms_stub);
5185                         break;
5186
5187                 case DLM_MSG_UNLOCK:
5188                         hold_lkb(lkb);
5189                         memset(ms_stub, 0, sizeof(struct dlm_message));
5190                         ms_stub->m_flags = DLM_IFL_STUB_MS;
5191                         ms_stub->m_type = DLM_MSG_UNLOCK_REPLY;
5192                         ms_stub->m_result = stub_unlock_result;
5193                         ms_stub->m_header.h_nodeid = lkb->lkb_nodeid;
5194                         _receive_unlock_reply(lkb, ms_stub);
5195                         dlm_put_lkb(lkb);
5196                         break;
5197
5198                 case DLM_MSG_CANCEL:
5199                         hold_lkb(lkb);
5200                         memset(ms_stub, 0, sizeof(struct dlm_message));
5201                         ms_stub->m_flags = DLM_IFL_STUB_MS;
5202                         ms_stub->m_type = DLM_MSG_CANCEL_REPLY;
5203                         ms_stub->m_result = stub_cancel_result;
5204                         ms_stub->m_header.h_nodeid = lkb->lkb_nodeid;
5205                         _receive_cancel_reply(lkb, ms_stub);
5206                         dlm_put_lkb(lkb);
5207                         break;
5208
5209                 default:
5210                         log_error(ls, "invalid lkb wait_type %d %d",
5211                                   lkb->lkb_wait_type, wait_type);
5212                 }
5213                 schedule();
5214         }
5215         mutex_unlock(&ls->ls_waiters_mutex);
5216         kfree(ms_stub);
5217 }
5218
5219 static struct dlm_lkb *find_resend_waiter(struct dlm_ls *ls)
5220 {
5221         struct dlm_lkb *lkb;
5222         int found = 0;
5223
5224         mutex_lock(&ls->ls_waiters_mutex);
5225         list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) {
5226                 if (lkb->lkb_flags & DLM_IFL_RESEND) {
5227                         hold_lkb(lkb);
5228                         found = 1;
5229                         break;
5230                 }
5231         }
5232         mutex_unlock(&ls->ls_waiters_mutex);
5233
5234         if (!found)
5235                 lkb = NULL;
5236         return lkb;
5237 }
5238
5239 /* Deal with lookups and lkb's marked RESEND from _pre.  We may now be the
5240    master or dir-node for r.  Processing the lkb may result in it being placed
5241    back on waiters. */
5242
5243 /* We do this after normal locking has been enabled and any saved messages
5244    (in requestqueue) have been processed.  We should be confident that at
5245    this point we won't get or process a reply to any of these waiting
5246    operations.  But, new ops may be coming in on the rsbs/locks here from
5247    userspace or remotely. */
5248
5249 /* there may have been an overlap unlock/cancel prior to recovery or after
5250    recovery.  if before, the lkb may still have a pos wait_count; if after, the
5251    overlap flag would just have been set and nothing new sent.  we can be
5252    confident here than any replies to either the initial op or overlap ops
5253    prior to recovery have been received. */
5254
5255 int dlm_recover_waiters_post(struct dlm_ls *ls)
5256 {
5257         struct dlm_lkb *lkb;
5258         struct dlm_rsb *r;
5259         int error = 0, mstype, err, oc, ou;
5260
5261         while (1) {
5262                 if (dlm_locking_stopped(ls)) {
5263                         log_debug(ls, "recover_waiters_post aborted");
5264                         error = -EINTR;
5265                         break;
5266                 }
5267
5268                 lkb = find_resend_waiter(ls);
5269                 if (!lkb)
5270                         break;
5271
5272                 r = lkb->lkb_resource;
5273                 hold_rsb(r);
5274                 lock_rsb(r);
5275
5276                 mstype = lkb->lkb_wait_type;
5277                 oc = is_overlap_cancel(lkb);
5278                 ou = is_overlap_unlock(lkb);
5279                 err = 0;
5280
5281                 log_debug(ls, "waiter %x remote %x msg %d r_nodeid %d "
5282                           "lkb_nodeid %d wait_nodeid %d dir_nodeid %d "
5283                           "overlap %d %d", lkb->lkb_id, lkb->lkb_remid, mstype,
5284                           r->res_nodeid, lkb->lkb_nodeid, lkb->lkb_wait_nodeid,
5285                           dlm_dir_nodeid(r), oc, ou);
5286
5287                 /* At this point we assume that we won't get a reply to any
5288                    previous op or overlap op on this lock.  First, do a big
5289                    remove_from_waiters() for all previous ops. */
5290
5291                 lkb->lkb_flags &= ~DLM_IFL_RESEND;
5292                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK;
5293                 lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL;
5294                 lkb->lkb_wait_type = 0;
5295                 lkb->lkb_wait_count = 0;
5296                 mutex_lock(&ls->ls_waiters_mutex);
5297                 list_del_init(&lkb->lkb_wait_reply);
5298                 mutex_unlock(&ls->ls_waiters_mutex);
5299                 unhold_lkb(lkb); /* for waiters list */
5300
5301                 if (oc || ou) {
5302                         /* do an unlock or cancel instead of resending */
5303                         switch (mstype) {
5304                         case DLM_MSG_LOOKUP:
5305                         case DLM_MSG_REQUEST:
5306                                 queue_cast(r, lkb, ou ? -DLM_EUNLOCK :
5307                                                         -DLM_ECANCEL);
5308                                 unhold_lkb(lkb); /* undoes create_lkb() */
5309                                 break;
5310                         case DLM_MSG_CONVERT:
5311                                 if (oc) {
5312                                         queue_cast(r, lkb, -DLM_ECANCEL);
5313                                 } else {
5314                                         lkb->lkb_exflags |= DLM_LKF_FORCEUNLOCK;
5315                                         _unlock_lock(r, lkb);
5316                                 }
5317                                 break;
5318                         default:
5319                                 err = 1;
5320                         }
5321                 } else {
5322                         switch (mstype) {
5323                         case DLM_MSG_LOOKUP:
5324                         case DLM_MSG_REQUEST:
5325                                 _request_lock(r, lkb);
5326                                 if (is_master(r))
5327                                         confirm_master(r, 0);
5328                                 break;
5329                         case DLM_MSG_CONVERT:
5330                                 _convert_lock(r, lkb);
5331                                 break;
5332                         default:
5333                                 err = 1;
5334                         }
5335                 }
5336
5337                 if (err) {
5338                         log_error(ls, "waiter %x msg %d r_nodeid %d "
5339                                   "dir_nodeid %d overlap %d %d",
5340                                   lkb->lkb_id, mstype, r->res_nodeid,
5341                                   dlm_dir_nodeid(r), oc, ou);
5342                 }
5343                 unlock_rsb(r);
5344                 put_rsb(r);
5345                 dlm_put_lkb(lkb);
5346         }
5347
5348         return error;
5349 }
5350
5351 static void purge_mstcpy_list(struct dlm_ls *ls, struct dlm_rsb *r,
5352                               struct list_head *list)
5353 {
5354         struct dlm_lkb *lkb, *safe;
5355
5356         list_for_each_entry_safe(lkb, safe, list, lkb_statequeue) {
5357                 if (!is_master_copy(lkb))
5358                         continue;
5359
5360                 /* don't purge lkbs we've added in recover_master_copy for
5361                    the current recovery seq */
5362
5363                 if (lkb->lkb_recover_seq == ls->ls_recover_seq)
5364                         continue;
5365
5366                 del_lkb(r, lkb);
5367
5368                 /* this put should free the lkb */
5369                 if (!dlm_put_lkb(lkb))
5370                         log_error(ls, "purged mstcpy lkb not released");
5371         }
5372 }
5373
5374 void dlm_purge_mstcpy_locks(struct dlm_rsb *r)
5375 {
5376         struct dlm_ls *ls = r->res_ls;
5377
5378         purge_mstcpy_list(ls, r, &r->res_grantqueue);
5379         purge_mstcpy_list(ls, r, &r->res_convertqueue);
5380         purge_mstcpy_list(ls, r, &r->res_waitqueue);
5381 }
5382
5383 static void purge_dead_list(struct dlm_ls *ls, struct dlm_rsb *r,
5384                             struct list_head *list,
5385                             int nodeid_gone, unsigned int *count)
5386 {
5387         struct dlm_lkb *lkb, *safe;
5388
5389         list_for_each_entry_safe(lkb, safe, list, lkb_statequeue) {
5390                 if (!is_master_copy(lkb))
5391                         continue;
5392
5393                 if ((lkb->lkb_nodeid == nodeid_gone) ||
5394                     dlm_is_removed(ls, lkb->lkb_nodeid)) {
5395
5396                         /* tell recover_lvb to invalidate the lvb
5397                            because a node holding EX/PW failed */
5398                         if ((lkb->lkb_exflags & DLM_LKF_VALBLK) &&
5399                             (lkb->lkb_grmode >= DLM_LOCK_PW)) {
5400                                 rsb_set_flag(r, RSB_RECOVER_LVB_INVAL);
5401                         }
5402
5403                         del_lkb(r, lkb);
5404
5405                         /* this put should free the lkb */
5406                         if (!dlm_put_lkb(lkb))
5407                                 log_error(ls, "purged dead lkb not released");
5408
5409                         rsb_set_flag(r, RSB_RECOVER_GRANT);
5410
5411                         (*count)++;
5412                 }
5413         }
5414 }
5415
5416 /* Get rid of locks held by nodes that are gone. */
5417
5418 void dlm_recover_purge(struct dlm_ls *ls)
5419 {
5420         struct dlm_rsb *r;
5421         struct dlm_member *memb;
5422         int nodes_count = 0;
5423         int nodeid_gone = 0;
5424         unsigned int lkb_count = 0;
5425
5426         /* cache one removed nodeid to optimize the common
5427            case of a single node removed */
5428
5429         list_for_each_entry(memb, &ls->ls_nodes_gone, list) {
5430                 nodes_count++;
5431                 nodeid_gone = memb->nodeid;
5432         }
5433
5434         if (!nodes_count)
5435                 return;
5436
5437         down_write(&ls->ls_root_sem);
5438         list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
5439                 hold_rsb(r);
5440                 lock_rsb(r);
5441                 if (is_master(r)) {
5442                         purge_dead_list(ls, r, &r->res_grantqueue,
5443                                         nodeid_gone, &lkb_count);
5444                         purge_dead_list(ls, r, &r->res_convertqueue,
5445                                         nodeid_gone, &lkb_count);
5446                         purge_dead_list(ls, r, &r->res_waitqueue,
5447                                         nodeid_gone, &lkb_count);
5448                 }
5449                 unlock_rsb(r);
5450                 unhold_rsb(r);
5451                 cond_resched();
5452         }
5453         up_write(&ls->ls_root_sem);
5454
5455         if (lkb_count)
5456                 log_debug(ls, "dlm_recover_purge %u locks for %u nodes",
5457                           lkb_count, nodes_count);
5458 }
5459
5460 static struct dlm_rsb *find_grant_rsb(struct dlm_ls *ls, int bucket)
5461 {
5462         struct rb_node *n;
5463         struct dlm_rsb *r;
5464
5465         spin_lock(&ls->ls_rsbtbl[bucket].lock);
5466         for (n = rb_first(&ls->ls_rsbtbl[bucket].keep); n; n = rb_next(n)) {
5467                 r = rb_entry(n, struct dlm_rsb, res_hashnode);
5468
5469                 if (!rsb_flag(r, RSB_RECOVER_GRANT))
5470                         continue;
5471                 if (!is_master(r)) {
5472                         rsb_clear_flag(r, RSB_RECOVER_GRANT);
5473                         continue;
5474                 }
5475                 hold_rsb(r);
5476                 spin_unlock(&ls->ls_rsbtbl[bucket].lock);
5477                 return r;
5478         }
5479         spin_unlock(&ls->ls_rsbtbl[bucket].lock);
5480         return NULL;
5481 }
5482
5483 /*
5484  * Attempt to grant locks on resources that we are the master of.
5485  * Locks may have become grantable during recovery because locks
5486  * from departed nodes have been purged (or not rebuilt), allowing
5487  * previously blocked locks to now be granted.  The subset of rsb's
5488  * we are interested in are those with lkb's on either the convert or
5489  * waiting queues.
5490  *
5491  * Simplest would be to go through each master rsb and check for non-empty
5492  * convert or waiting queues, and attempt to grant on those rsbs.
5493  * Checking the queues requires lock_rsb, though, for which we'd need
5494  * to release the rsbtbl lock.  This would make iterating through all
5495  * rsb's very inefficient.  So, we rely on earlier recovery routines
5496  * to set RECOVER_GRANT on any rsb's that we should attempt to grant
5497  * locks for.
5498  */
5499
5500 void dlm_recover_grant(struct dlm_ls *ls)
5501 {
5502         struct dlm_rsb *r;
5503         int bucket = 0;
5504         unsigned int count = 0;
5505         unsigned int rsb_count = 0;
5506         unsigned int lkb_count = 0;
5507
5508         while (1) {
5509                 r = find_grant_rsb(ls, bucket);
5510                 if (!r) {
5511                         if (bucket == ls->ls_rsbtbl_size - 1)
5512                                 break;
5513                         bucket++;
5514                         continue;
5515                 }
5516                 rsb_count++;
5517                 count = 0;
5518                 lock_rsb(r);
5519                 /* the RECOVER_GRANT flag is checked in the grant path */
5520                 grant_pending_locks(r, &count);
5521                 rsb_clear_flag(r, RSB_RECOVER_GRANT);
5522                 lkb_count += count;
5523                 confirm_master(r, 0);
5524                 unlock_rsb(r);
5525                 put_rsb(r);
5526                 cond_resched();
5527         }
5528
5529         if (lkb_count)
5530                 log_debug(ls, "dlm_recover_grant %u locks on %u resources",
5531                           lkb_count, rsb_count);
5532 }
5533
5534 static struct dlm_lkb *search_remid_list(struct list_head *head, int nodeid,
5535                                          uint32_t remid)
5536 {
5537         struct dlm_lkb *lkb;
5538
5539         list_for_each_entry(lkb, head, lkb_statequeue) {
5540                 if (lkb->lkb_nodeid == nodeid && lkb->lkb_remid == remid)
5541                         return lkb;
5542         }
5543         return NULL;
5544 }
5545
5546 static struct dlm_lkb *search_remid(struct dlm_rsb *r, int nodeid,
5547                                     uint32_t remid)
5548 {
5549         struct dlm_lkb *lkb;
5550
5551         lkb = search_remid_list(&r->res_grantqueue, nodeid, remid);
5552         if (lkb)
5553                 return lkb;
5554         lkb = search_remid_list(&r->res_convertqueue, nodeid, remid);
5555         if (lkb)
5556                 return lkb;
5557         lkb = search_remid_list(&r->res_waitqueue, nodeid, remid);
5558         if (lkb)
5559                 return lkb;
5560         return NULL;
5561 }
5562
5563 /* needs at least dlm_rcom + rcom_lock */
5564 static int receive_rcom_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb,
5565                                   struct dlm_rsb *r, struct dlm_rcom *rc)
5566 {
5567         struct rcom_lock *rl = (struct rcom_lock *) rc->rc_buf;
5568
5569         lkb->lkb_nodeid = rc->rc_header.h_nodeid;
5570         lkb->lkb_ownpid = le32_to_cpu(rl->rl_ownpid);
5571         lkb->lkb_remid = le32_to_cpu(rl->rl_lkid);
5572         lkb->lkb_exflags = le32_to_cpu(rl->rl_exflags);
5573         lkb->lkb_flags = le32_to_cpu(rl->rl_flags) & 0x0000FFFF;
5574         lkb->lkb_flags |= DLM_IFL_MSTCPY;
5575         lkb->lkb_lvbseq = le32_to_cpu(rl->rl_lvbseq);
5576         lkb->lkb_rqmode = rl->rl_rqmode;
5577         lkb->lkb_grmode = rl->rl_grmode;
5578         /* don't set lkb_status because add_lkb wants to itself */
5579
5580         lkb->lkb_bastfn = (rl->rl_asts & DLM_CB_BAST) ? &fake_bastfn : NULL;
5581         lkb->lkb_astfn = (rl->rl_asts & DLM_CB_CAST) ? &fake_astfn : NULL;
5582
5583         if (lkb->lkb_exflags & DLM_LKF_VALBLK) {
5584                 int lvblen = rc->rc_header.h_length - sizeof(struct dlm_rcom) -
5585                          sizeof(struct rcom_lock);
5586                 if (lvblen > ls->ls_lvblen)
5587                         return -EINVAL;
5588                 lkb->lkb_lvbptr = dlm_allocate_lvb(ls);
5589                 if (!lkb->lkb_lvbptr)
5590                         return -ENOMEM;
5591                 memcpy(lkb->lkb_lvbptr, rl->rl_lvb, lvblen);
5592         }
5593
5594         /* Conversions between PR and CW (middle modes) need special handling.
5595            The real granted mode of these converting locks cannot be determined
5596            until all locks have been rebuilt on the rsb (recover_conversion) */
5597
5598         if (rl->rl_wait_type == cpu_to_le16(DLM_MSG_CONVERT) &&
5599             middle_conversion(lkb)) {
5600                 rl->rl_status = DLM_LKSTS_CONVERT;
5601                 lkb->lkb_grmode = DLM_LOCK_IV;
5602                 rsb_set_flag(r, RSB_RECOVER_CONVERT);
5603         }
5604
5605         return 0;
5606 }
5607
5608 /* This lkb may have been recovered in a previous aborted recovery so we need
5609    to check if the rsb already has an lkb with the given remote nodeid/lkid.
5610    If so we just send back a standard reply.  If not, we create a new lkb with
5611    the given values and send back our lkid.  We send back our lkid by sending
5612    back the rcom_lock struct we got but with the remid field filled in. */
5613
5614 /* needs at least dlm_rcom + rcom_lock */
5615 int dlm_recover_master_copy(struct dlm_ls *ls, struct dlm_rcom *rc)
5616 {
5617         struct rcom_lock *rl = (struct rcom_lock *) rc->rc_buf;
5618         struct dlm_rsb *r;
5619         struct dlm_lkb *lkb;
5620         uint32_t remid = 0;
5621         int from_nodeid = rc->rc_header.h_nodeid;
5622         int error;
5623
5624         if (rl->rl_parent_lkid) {
5625                 error = -EOPNOTSUPP;
5626                 goto out;
5627         }
5628
5629         remid = le32_to_cpu(rl->rl_lkid);
5630
5631         /* In general we expect the rsb returned to be R_MASTER, but we don't
5632            have to require it.  Recovery of masters on one node can overlap
5633            recovery of locks on another node, so one node can send us MSTCPY
5634            locks before we've made ourselves master of this rsb.  We can still
5635            add new MSTCPY locks that we receive here without any harm; when
5636            we make ourselves master, dlm_recover_masters() won't touch the
5637            MSTCPY locks we've received early. */
5638
5639         error = find_rsb(ls, rl->rl_name, le16_to_cpu(rl->rl_namelen),
5640                          from_nodeid, R_RECEIVE_RECOVER, &r);
5641         if (error)
5642                 goto out;
5643
5644         lock_rsb(r);
5645
5646         if (dlm_no_directory(ls) && (dlm_dir_nodeid(r) != dlm_our_nodeid())) {
5647                 log_error(ls, "dlm_recover_master_copy remote %d %x not dir",
5648                           from_nodeid, remid);
5649                 error = -EBADR;
5650                 goto out_unlock;
5651         }
5652
5653         lkb = search_remid(r, from_nodeid, remid);
5654         if (lkb) {
5655                 error = -EEXIST;
5656                 goto out_remid;
5657         }
5658
5659         error = create_lkb(ls, &lkb);
5660         if (error)
5661                 goto out_unlock;
5662
5663         error = receive_rcom_lock_args(ls, lkb, r, rc);
5664         if (error) {
5665                 __put_lkb(ls, lkb);
5666                 goto out_unlock;
5667         }
5668
5669         attach_lkb(r, lkb);
5670         add_lkb(r, lkb, rl->rl_status);
5671         error = 0;
5672         ls->ls_recover_locks_in++;
5673
5674         if (!list_empty(&r->res_waitqueue) || !list_empty(&r->res_convertqueue))
5675                 rsb_set_flag(r, RSB_RECOVER_GRANT);
5676
5677  out_remid:
5678         /* this is the new value returned to the lock holder for
5679            saving in its process-copy lkb */
5680         rl->rl_remid = cpu_to_le32(lkb->lkb_id);
5681
5682         lkb->lkb_recover_seq = ls->ls_recover_seq;
5683
5684  out_unlock:
5685         unlock_rsb(r);
5686         put_rsb(r);
5687  out:
5688         if (error && error != -EEXIST)
5689                 log_debug(ls, "dlm_recover_master_copy remote %d %x error %d",
5690                           from_nodeid, remid, error);
5691         rl->rl_result = cpu_to_le32(error);
5692         return error;
5693 }
5694
5695 /* needs at least dlm_rcom + rcom_lock */
5696 int dlm_recover_process_copy(struct dlm_ls *ls, struct dlm_rcom *rc)
5697 {
5698         struct rcom_lock *rl = (struct rcom_lock *) rc->rc_buf;
5699         struct dlm_rsb *r;
5700         struct dlm_lkb *lkb;
5701         uint32_t lkid, remid;
5702         int error, result;
5703
5704         lkid = le32_to_cpu(rl->rl_lkid);
5705         remid = le32_to_cpu(rl->rl_remid);
5706         result = le32_to_cpu(rl->rl_result);
5707
5708         error = find_lkb(ls, lkid, &lkb);
5709         if (error) {
5710                 log_error(ls, "dlm_recover_process_copy no %x remote %d %x %d",
5711                           lkid, rc->rc_header.h_nodeid, remid, result);
5712                 return error;
5713         }
5714
5715         r = lkb->lkb_resource;
5716         hold_rsb(r);
5717         lock_rsb(r);
5718
5719         if (!is_process_copy(lkb)) {
5720                 log_error(ls, "dlm_recover_process_copy bad %x remote %d %x %d",
5721                           lkid, rc->rc_header.h_nodeid, remid, result);
5722                 dlm_dump_rsb(r);
5723                 unlock_rsb(r);
5724                 put_rsb(r);
5725                 dlm_put_lkb(lkb);
5726                 return -EINVAL;
5727         }
5728
5729         switch (result) {
5730         case -EBADR:
5731                 /* There's a chance the new master received our lock before
5732                    dlm_recover_master_reply(), this wouldn't happen if we did
5733                    a barrier between recover_masters and recover_locks. */
5734
5735                 log_debug(ls, "dlm_recover_process_copy %x remote %d %x %d",
5736                           lkid, rc->rc_header.h_nodeid, remid, result);
5737         
5738                 dlm_send_rcom_lock(r, lkb);
5739                 goto out;
5740         case -EEXIST:
5741         case 0:
5742                 lkb->lkb_remid = remid;
5743                 break;
5744         default:
5745                 log_error(ls, "dlm_recover_process_copy %x remote %d %x %d unk",
5746                           lkid, rc->rc_header.h_nodeid, remid, result);
5747         }
5748
5749         /* an ack for dlm_recover_locks() which waits for replies from
5750            all the locks it sends to new masters */
5751         dlm_recovered_lock(r);
5752  out:
5753         unlock_rsb(r);
5754         put_rsb(r);
5755         dlm_put_lkb(lkb);
5756
5757         return 0;
5758 }
5759
5760 int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua,
5761                      int mode, uint32_t flags, void *name, unsigned int namelen,
5762                      unsigned long timeout_cs)
5763 {
5764         struct dlm_lkb *lkb;
5765         struct dlm_args args;
5766         int error;
5767
5768         dlm_lock_recovery(ls);
5769
5770         error = create_lkb(ls, &lkb);
5771         if (error) {
5772                 kfree(ua);
5773                 goto out;
5774         }
5775
5776         if (flags & DLM_LKF_VALBLK) {
5777                 ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_NOFS);
5778                 if (!ua->lksb.sb_lvbptr) {
5779                         kfree(ua);
5780                         __put_lkb(ls, lkb);
5781                         error = -ENOMEM;
5782                         goto out;
5783                 }
5784         }
5785
5786         /* After ua is attached to lkb it will be freed by dlm_free_lkb().
5787            When DLM_IFL_USER is set, the dlm knows that this is a userspace
5788            lock and that lkb_astparam is the dlm_user_args structure. */
5789
5790         error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs,
5791                               fake_astfn, ua, fake_bastfn, &args);
5792         lkb->lkb_flags |= DLM_IFL_USER;
5793
5794         if (error) {
5795                 __put_lkb(ls, lkb);
5796                 goto out;
5797         }
5798
5799         error = request_lock(ls, lkb, name, namelen, &args);
5800
5801         switch (error) {
5802         case 0:
5803                 break;
5804         case -EINPROGRESS:
5805                 error = 0;
5806                 break;
5807         case -EAGAIN:
5808                 error = 0;
5809                 /* fall through */
5810         default:
5811                 __put_lkb(ls, lkb);
5812                 goto out;
5813         }
5814
5815         /* add this new lkb to the per-process list of locks */
5816         spin_lock(&ua->proc->locks_spin);
5817         hold_lkb(lkb);
5818         list_add_tail(&lkb->lkb_ownqueue, &ua->proc->locks);
5819         spin_unlock(&ua->proc->locks_spin);
5820  out:
5821         dlm_unlock_recovery(ls);
5822         return error;
5823 }
5824
5825 int dlm_user_convert(struct dlm_ls *ls, struct dlm_user_args *ua_tmp,
5826                      int mode, uint32_t flags, uint32_t lkid, char *lvb_in,
5827                      unsigned long timeout_cs)
5828 {
5829         struct dlm_lkb *lkb;
5830         struct dlm_args args;
5831         struct dlm_user_args *ua;
5832         int error;
5833
5834         dlm_lock_recovery(ls);
5835
5836         error = find_lkb(ls, lkid, &lkb);
5837         if (error)
5838                 goto out;
5839
5840         /* user can change the params on its lock when it converts it, or
5841            add an lvb that didn't exist before */
5842
5843         ua = lkb->lkb_ua;
5844
5845         if (flags & DLM_LKF_VALBLK && !ua->lksb.sb_lvbptr) {
5846                 ua->lksb.sb_lvbptr = kzalloc(DLM_USER_LVB_LEN, GFP_NOFS);
5847                 if (!ua->lksb.sb_lvbptr) {
5848                         error = -ENOMEM;
5849                         goto out_put;
5850                 }
5851         }
5852         if (lvb_in && ua->lksb.sb_lvbptr)
5853                 memcpy(ua->lksb.sb_lvbptr, lvb_in, DLM_USER_LVB_LEN);
5854
5855         ua->xid = ua_tmp->xid;
5856         ua->castparam = ua_tmp->castparam;
5857         ua->castaddr = ua_tmp->castaddr;
5858         ua->bastparam = ua_tmp->bastparam;
5859         ua->bastaddr = ua_tmp->bastaddr;
5860         ua->user_lksb = ua_tmp->user_lksb;
5861
5862         error = set_lock_args(mode, &ua->lksb, flags, 0, timeout_cs,
5863                               fake_astfn, ua, fake_bastfn, &args);
5864         if (error)
5865                 goto out_put;
5866
5867         error = convert_lock(ls, lkb, &args);
5868
5869         if (error == -EINPROGRESS || error == -EAGAIN || error == -EDEADLK)
5870                 error = 0;
5871  out_put:
5872         dlm_put_lkb(lkb);
5873  out:
5874         dlm_unlock_recovery(ls);
5875         kfree(ua_tmp);
5876         return error;
5877 }
5878
5879 int dlm_user_unlock(struct dlm_ls *ls, struct dlm_user_args *ua_tmp,
5880                     uint32_t flags, uint32_t lkid, char *lvb_in)
5881 {
5882         struct dlm_lkb *lkb;
5883         struct dlm_args args;
5884         struct dlm_user_args *ua;
5885         int error;
5886
5887         dlm_lock_recovery(ls);
5888
5889         error = find_lkb(ls, lkid, &lkb);
5890         if (error)
5891                 goto out;
5892
5893         ua = lkb->lkb_ua;
5894
5895         if (lvb_in && ua->lksb.sb_lvbptr)
5896                 memcpy(ua->lksb.sb_lvbptr, lvb_in, DLM_USER_LVB_LEN);
5897         if (ua_tmp->castparam)
5898                 ua->castparam = ua_tmp->castparam;
5899         ua->user_lksb = ua_tmp->user_lksb;
5900
5901         error = set_unlock_args(flags, ua, &args);
5902         if (error)
5903                 goto out_put;
5904
5905         error = unlock_lock(ls, lkb, &args);
5906
5907         if (error == -DLM_EUNLOCK)
5908                 error = 0;
5909         /* from validate_unlock_args() */
5910         if (error == -EBUSY && (flags & DLM_LKF_FORCEUNLOCK))
5911                 error = 0;
5912         if (error)
5913                 goto out_put;
5914
5915         spin_lock(&ua->proc->locks_spin);
5916         /* dlm_user_add_cb() may have already taken lkb off the proc list */
5917         if (!list_empty(&lkb->lkb_ownqueue))
5918                 list_move(&lkb->lkb_ownqueue, &ua->proc->unlocking);
5919         spin_unlock(&ua->proc->locks_spin);
5920  out_put:
5921         dlm_put_lkb(lkb);
5922  out:
5923         dlm_unlock_recovery(ls);
5924         kfree(ua_tmp);
5925         return error;
5926 }
5927
5928 int dlm_user_cancel(struct dlm_ls *ls, struct dlm_user_args *ua_tmp,
5929                     uint32_t flags, uint32_t lkid)
5930 {
5931         struct dlm_lkb *lkb;
5932         struct dlm_args args;
5933         struct dlm_user_args *ua;
5934         int error;
5935
5936         dlm_lock_recovery(ls);
5937
5938         error = find_lkb(ls, lkid, &lkb);
5939         if (error)
5940                 goto out;
5941
5942         ua = lkb->lkb_ua;
5943         if (ua_tmp->castparam)
5944                 ua->castparam = ua_tmp->castparam;
5945         ua->user_lksb = ua_tmp->user_lksb;
5946
5947         error = set_unlock_args(flags, ua, &args);
5948         if (error)
5949                 goto out_put;
5950
5951         error = cancel_lock(ls, lkb, &args);
5952
5953         if (error == -DLM_ECANCEL)
5954                 error = 0;
5955         /* from validate_unlock_args() */
5956         if (error == -EBUSY)
5957                 error = 0;
5958  out_put:
5959         dlm_put_lkb(lkb);
5960  out:
5961         dlm_unlock_recovery(ls);
5962         kfree(ua_tmp);
5963         return error;
5964 }
5965
5966 int dlm_user_deadlock(struct dlm_ls *ls, uint32_t flags, uint32_t lkid)
5967 {
5968         struct dlm_lkb *lkb;
5969         struct dlm_args args;
5970         struct dlm_user_args *ua;
5971         struct dlm_rsb *r;
5972         int error;
5973
5974         dlm_lock_recovery(ls);
5975
5976         error = find_lkb(ls, lkid, &lkb);
5977         if (error)
5978                 goto out;
5979
5980         ua = lkb->lkb_ua;
5981
5982         error = set_unlock_args(flags, ua, &args);
5983         if (error)
5984                 goto out_put;
5985
5986         /* same as cancel_lock(), but set DEADLOCK_CANCEL after lock_rsb */
5987
5988         r = lkb->lkb_resource;
5989         hold_rsb(r);
5990         lock_rsb(r);
5991
5992         error = validate_unlock_args(lkb, &args);
5993         if (error)
5994                 goto out_r;
5995         lkb->lkb_flags |= DLM_IFL_DEADLOCK_CANCEL;
5996
5997         error = _cancel_lock(r, lkb);
5998  out_r:
5999         unlock_rsb(r);
6000         put_rsb(r);
6001
6002         if (error == -DLM_ECANCEL)
6003                 error = 0;
6004         /* from validate_unlock_args() */
6005         if (error == -EBUSY)
6006                 error = 0;
6007  out_put:
6008         dlm_put_lkb(lkb);
6009  out:
6010         dlm_unlock_recovery(ls);
6011         return error;
6012 }
6013
6014 /* lkb's that are removed from the waiters list by revert are just left on the
6015    orphans list with the granted orphan locks, to be freed by purge */
6016
6017 static int orphan_proc_lock(struct dlm_ls *ls, struct dlm_lkb *lkb)
6018 {
6019         struct dlm_args args;
6020         int error;
6021
6022         hold_lkb(lkb);
6023         mutex_lock(&ls->ls_orphans_mutex);
6024         list_add_tail(&lkb->lkb_ownqueue, &ls->ls_orphans);
6025         mutex_unlock(&ls->ls_orphans_mutex);
6026
6027         set_unlock_args(0, lkb->lkb_ua, &args);
6028
6029         error = cancel_lock(ls, lkb, &args);
6030         if (error == -DLM_ECANCEL)
6031                 error = 0;
6032         return error;
6033 }
6034
6035 /* The FORCEUNLOCK flag allows the unlock to go ahead even if the lkb isn't
6036    granted.  Regardless of what rsb queue the lock is on, it's removed and
6037    freed.  The IVVALBLK flag causes the lvb on the resource to be invalidated
6038    if our lock is PW/EX (it's ignored if our granted mode is smaller.) */
6039
6040 static int unlock_proc_lock(struct dlm_ls *ls, struct dlm_lkb *lkb)
6041 {
6042         struct dlm_args args;
6043         int error;
6044
6045         set_unlock_args(DLM_LKF_FORCEUNLOCK | DLM_LKF_IVVALBLK,
6046                         lkb->lkb_ua, &args);
6047
6048         error = unlock_lock(ls, lkb, &args);
6049         if (error == -DLM_EUNLOCK)
6050                 error = 0;
6051         return error;
6052 }
6053
6054 /* We have to release clear_proc_locks mutex before calling unlock_proc_lock()
6055    (which does lock_rsb) due to deadlock with receiving a message that does
6056    lock_rsb followed by dlm_user_add_cb() */
6057
6058 static struct dlm_lkb *del_proc_lock(struct dlm_ls *ls,
6059                                      struct dlm_user_proc *proc)
6060 {
6061         struct dlm_lkb *lkb = NULL;
6062
6063         mutex_lock(&ls->ls_clear_proc_locks);
6064         if (list_empty(&proc->locks))
6065                 goto out;
6066
6067         lkb = list_entry(proc->locks.next, struct dlm_lkb, lkb_ownqueue);
6068         list_del_init(&lkb->lkb_ownqueue);
6069
6070         if (lkb->lkb_exflags & DLM_LKF_PERSISTENT)
6071                 lkb->lkb_flags |= DLM_IFL_ORPHAN;
6072         else
6073                 lkb->lkb_flags |= DLM_IFL_DEAD;
6074  out:
6075         mutex_unlock(&ls->ls_clear_proc_locks);
6076         return lkb;
6077 }
6078
6079 /* The ls_clear_proc_locks mutex protects against dlm_user_add_cb() which
6080    1) references lkb->ua which we free here and 2) adds lkbs to proc->asts,
6081    which we clear here. */
6082
6083 /* proc CLOSING flag is set so no more device_reads should look at proc->asts
6084    list, and no more device_writes should add lkb's to proc->locks list; so we
6085    shouldn't need to take asts_spin or locks_spin here.  this assumes that
6086    device reads/writes/closes are serialized -- FIXME: we may need to serialize
6087    them ourself. */
6088
6089 void dlm_clear_proc_locks(struct dlm_ls *ls, struct dlm_user_proc *proc)
6090 {
6091         struct dlm_lkb *lkb, *safe;
6092
6093         dlm_lock_recovery(ls);
6094
6095         while (1) {
6096                 lkb = del_proc_lock(ls, proc);
6097                 if (!lkb)
6098                         break;
6099                 del_timeout(lkb);
6100                 if (lkb->lkb_exflags & DLM_LKF_PERSISTENT)
6101                         orphan_proc_lock(ls, lkb);
6102                 else
6103                         unlock_proc_lock(ls, lkb);
6104
6105                 /* this removes the reference for the proc->locks list
6106                    added by dlm_user_request, it may result in the lkb
6107                    being freed */
6108
6109                 dlm_put_lkb(lkb);
6110         }
6111
6112         mutex_lock(&ls->ls_clear_proc_locks);
6113
6114         /* in-progress unlocks */
6115         list_for_each_entry_safe(lkb, safe, &proc->unlocking, lkb_ownqueue) {
6116                 list_del_init(&lkb->lkb_ownqueue);
6117                 lkb->lkb_flags |= DLM_IFL_DEAD;
6118                 dlm_put_lkb(lkb);
6119         }
6120
6121         list_for_each_entry_safe(lkb, safe, &proc->asts, lkb_cb_list) {
6122                 memset(&lkb->lkb_callbacks, 0,
6123                        sizeof(struct dlm_callback) * DLM_CALLBACKS_SIZE);
6124                 list_del_init(&lkb->lkb_cb_list);
6125                 dlm_put_lkb(lkb);
6126         }
6127
6128         mutex_unlock(&ls->ls_clear_proc_locks);
6129         dlm_unlock_recovery(ls);
6130 }
6131
6132 static void purge_proc_locks(struct dlm_ls *ls, struct dlm_user_proc *proc)
6133 {
6134         struct dlm_lkb *lkb, *safe;
6135
6136         while (1) {
6137                 lkb = NULL;
6138                 spin_lock(&proc->locks_spin);
6139                 if (!list_empty(&proc->locks)) {
6140                         lkb = list_entry(proc->locks.next, struct dlm_lkb,
6141                                          lkb_ownqueue);
6142                         list_del_init(&lkb->lkb_ownqueue);
6143                 }
6144                 spin_unlock(&proc->locks_spin);
6145
6146                 if (!lkb)
6147                         break;
6148
6149                 lkb->lkb_flags |= DLM_IFL_DEAD;
6150                 unlock_proc_lock(ls, lkb);
6151                 dlm_put_lkb(lkb); /* ref from proc->locks list */
6152         }
6153
6154         spin_lock(&proc->locks_spin);
6155         list_for_each_entry_safe(lkb, safe, &proc->unlocking, lkb_ownqueue) {
6156                 list_del_init(&lkb->lkb_ownqueue);
6157                 lkb->lkb_flags |= DLM_IFL_DEAD;
6158                 dlm_put_lkb(lkb);
6159         }
6160         spin_unlock(&proc->locks_spin);
6161
6162         spin_lock(&proc->asts_spin);
6163         list_for_each_entry_safe(lkb, safe, &proc->asts, lkb_cb_list) {
6164                 memset(&lkb->lkb_callbacks, 0,
6165                        sizeof(struct dlm_callback) * DLM_CALLBACKS_SIZE);
6166                 list_del_init(&lkb->lkb_cb_list);
6167                 dlm_put_lkb(lkb);
6168         }
6169         spin_unlock(&proc->asts_spin);
6170 }
6171
6172 /* pid of 0 means purge all orphans */
6173
6174 static void do_purge(struct dlm_ls *ls, int nodeid, int pid)
6175 {
6176         struct dlm_lkb *lkb, *safe;
6177
6178         mutex_lock(&ls->ls_orphans_mutex);
6179         list_for_each_entry_safe(lkb, safe, &ls->ls_orphans, lkb_ownqueue) {
6180                 if (pid && lkb->lkb_ownpid != pid)
6181                         continue;
6182                 unlock_proc_lock(ls, lkb);
6183                 list_del_init(&lkb->lkb_ownqueue);
6184                 dlm_put_lkb(lkb);
6185         }
6186         mutex_unlock(&ls->ls_orphans_mutex);
6187 }
6188
6189 static int send_purge(struct dlm_ls *ls, int nodeid, int pid)
6190 {
6191         struct dlm_message *ms;
6192         struct dlm_mhandle *mh;
6193         int error;
6194
6195         error = _create_message(ls, sizeof(struct dlm_message), nodeid,
6196                                 DLM_MSG_PURGE, &ms, &mh);
6197         if (error)
6198                 return error;
6199         ms->m_nodeid = nodeid;
6200         ms->m_pid = pid;
6201
6202         return send_message(mh, ms);
6203 }
6204
6205 int dlm_user_purge(struct dlm_ls *ls, struct dlm_user_proc *proc,
6206                    int nodeid, int pid)
6207 {
6208         int error = 0;
6209
6210         if (nodeid != dlm_our_nodeid()) {
6211                 error = send_purge(ls, nodeid, pid);
6212         } else {
6213                 dlm_lock_recovery(ls);
6214                 if (pid == current->pid)
6215                         purge_proc_locks(ls, proc);
6216                 else
6217                         do_purge(ls, nodeid, pid);
6218                 dlm_unlock_recovery(ls);
6219         }
6220         return error;
6221 }
6222