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