1 /* 2 * linux/fs/locks.c 3 * 4 * Provide support for fcntl()'s F_GETLK, F_SETLK, and F_SETLKW calls. 5 * Doug Evans (dje@spiff.uucp), August 07, 1992 6 * 7 * Deadlock detection added. 8 * FIXME: one thing isn't handled yet: 9 * - mandatory locks (requires lots of changes elsewhere) 10 * Kelly Carmichael (kelly@[142.24.8.65]), September 17, 1994. 11 * 12 * Miscellaneous edits, and a total rewrite of posix_lock_file() code. 13 * Kai Petzke (wpp@marie.physik.tu-berlin.de), 1994 14 * 15 * Converted file_lock_table to a linked list from an array, which eliminates 16 * the limits on how many active file locks are open. 17 * Chad Page (pageone@netcom.com), November 27, 1994 18 * 19 * Removed dependency on file descriptors. dup()'ed file descriptors now 20 * get the same locks as the original file descriptors, and a close() on 21 * any file descriptor removes ALL the locks on the file for the current 22 * process. Since locks still depend on the process id, locks are inherited 23 * after an exec() but not after a fork(). This agrees with POSIX, and both 24 * BSD and SVR4 practice. 25 * Andy Walker (andy@lysaker.kvaerner.no), February 14, 1995 26 * 27 * Scrapped free list which is redundant now that we allocate locks 28 * dynamically with kmalloc()/kfree(). 29 * Andy Walker (andy@lysaker.kvaerner.no), February 21, 1995 30 * 31 * Implemented two lock personalities - FL_FLOCK and FL_POSIX. 32 * 33 * FL_POSIX locks are created with calls to fcntl() and lockf() through the 34 * fcntl() system call. They have the semantics described above. 35 * 36 * FL_FLOCK locks are created with calls to flock(), through the flock() 37 * system call, which is new. Old C libraries implement flock() via fcntl() 38 * and will continue to use the old, broken implementation. 39 * 40 * FL_FLOCK locks follow the 4.4 BSD flock() semantics. They are associated 41 * with a file pointer (filp). As a result they can be shared by a parent 42 * process and its children after a fork(). They are removed when the last 43 * file descriptor referring to the file pointer is closed (unless explicitly 44 * unlocked). 45 * 46 * FL_FLOCK locks never deadlock, an existing lock is always removed before 47 * upgrading from shared to exclusive (or vice versa). When this happens 48 * any processes blocked by the current lock are woken up and allowed to 49 * run before the new lock is applied. 50 * Andy Walker (andy@lysaker.kvaerner.no), June 09, 1995 51 * 52 * Removed some race conditions in flock_lock_file(), marked other possible 53 * races. Just grep for FIXME to see them. 54 * Dmitry Gorodchanin (pgmdsg@ibi.com), February 09, 1996. 55 * 56 * Addressed Dmitry's concerns. Deadlock checking no longer recursive. 57 * Lock allocation changed to GFP_ATOMIC as we can't afford to sleep 58 * once we've checked for blocking and deadlocking. 59 * Andy Walker (andy@lysaker.kvaerner.no), April 03, 1996. 60 * 61 * Initial implementation of mandatory locks. SunOS turned out to be 62 * a rotten model, so I implemented the "obvious" semantics. 63 * See 'Documentation/filesystems/mandatory-locking.txt' for details. 64 * Andy Walker (andy@lysaker.kvaerner.no), April 06, 1996. 65 * 66 * Don't allow mandatory locks on mmap()'ed files. Added simple functions to 67 * check if a file has mandatory locks, used by mmap(), open() and creat() to 68 * see if system call should be rejected. Ref. HP-UX/SunOS/Solaris Reference 69 * Manual, Section 2. 70 * Andy Walker (andy@lysaker.kvaerner.no), April 09, 1996. 71 * 72 * Tidied up block list handling. Added '/proc/locks' interface. 73 * Andy Walker (andy@lysaker.kvaerner.no), April 24, 1996. 74 * 75 * Fixed deadlock condition for pathological code that mixes calls to 76 * flock() and fcntl(). 77 * Andy Walker (andy@lysaker.kvaerner.no), April 29, 1996. 78 * 79 * Allow only one type of locking scheme (FL_POSIX or FL_FLOCK) to be in use 80 * for a given file at a time. Changed the CONFIG_LOCK_MANDATORY scheme to 81 * guarantee sensible behaviour in the case where file system modules might 82 * be compiled with different options than the kernel itself. 83 * Andy Walker (andy@lysaker.kvaerner.no), May 15, 1996. 84 * 85 * Added a couple of missing wake_up() calls. Thanks to Thomas Meckel 86 * (Thomas.Meckel@mni.fh-giessen.de) for spotting this. 87 * Andy Walker (andy@lysaker.kvaerner.no), May 15, 1996. 88 * 89 * Changed FL_POSIX locks to use the block list in the same way as FL_FLOCK 90 * locks. Changed process synchronisation to avoid dereferencing locks that 91 * have already been freed. 92 * Andy Walker (andy@lysaker.kvaerner.no), Sep 21, 1996. 93 * 94 * Made the block list a circular list to minimise searching in the list. 95 * Andy Walker (andy@lysaker.kvaerner.no), Sep 25, 1996. 96 * 97 * Made mandatory locking a mount option. Default is not to allow mandatory 98 * locking. 99 * Andy Walker (andy@lysaker.kvaerner.no), Oct 04, 1996. 100 * 101 * Some adaptations for NFS support. 102 * Olaf Kirch (okir@monad.swb.de), Dec 1996, 103 * 104 * Fixed /proc/locks interface so that we can't overrun the buffer we are handed. 105 * Andy Walker (andy@lysaker.kvaerner.no), May 12, 1997. 106 * 107 * Use slab allocator instead of kmalloc/kfree. 108 * Use generic list implementation from <linux/list.h>. 109 * Sped up posix_locks_deadlock by only considering blocked locks. 110 * Matthew Wilcox <willy@debian.org>, March, 2000. 111 * 112 * Leases and LOCK_MAND 113 * Matthew Wilcox <willy@debian.org>, June, 2000. 114 * Stephen Rothwell <sfr@canb.auug.org.au>, June, 2000. 115 */ 116 117 #include <linux/capability.h> 118 #include <linux/file.h> 119 #include <linux/fdtable.h> 120 #include <linux/fs.h> 121 #include <linux/init.h> 122 #include <linux/module.h> 123 #include <linux/security.h> 124 #include <linux/slab.h> 125 #include <linux/syscalls.h> 126 #include <linux/time.h> 127 #include <linux/rcupdate.h> 128 #include <linux/pid_namespace.h> 129 #include <linux/hashtable.h> 130 #include <linux/percpu.h> 131 #include <linux/lglock.h> 132 133 #define CREATE_TRACE_POINTS 134 #include <trace/events/filelock.h> 135 136 #include <asm/uaccess.h> 137 138 #define IS_POSIX(fl) (fl->fl_flags & FL_POSIX) 139 #define IS_FLOCK(fl) (fl->fl_flags & FL_FLOCK) 140 #define IS_LEASE(fl) (fl->fl_flags & (FL_LEASE|FL_DELEG|FL_LAYOUT)) 141 #define IS_OFDLCK(fl) (fl->fl_flags & FL_OFDLCK) 142 143 static bool lease_breaking(struct file_lock *fl) 144 { 145 return fl->fl_flags & (FL_UNLOCK_PENDING | FL_DOWNGRADE_PENDING); 146 } 147 148 static int target_leasetype(struct file_lock *fl) 149 { 150 if (fl->fl_flags & FL_UNLOCK_PENDING) 151 return F_UNLCK; 152 if (fl->fl_flags & FL_DOWNGRADE_PENDING) 153 return F_RDLCK; 154 return fl->fl_type; 155 } 156 157 int leases_enable = 1; 158 int lease_break_time = 45; 159 160 /* 161 * The global file_lock_list is only used for displaying /proc/locks, so we 162 * keep a list on each CPU, with each list protected by its own spinlock via 163 * the file_lock_lglock. Note that alterations to the list also require that 164 * the relevant flc_lock is held. 165 */ 166 DEFINE_STATIC_LGLOCK(file_lock_lglock); 167 static DEFINE_PER_CPU(struct hlist_head, file_lock_list); 168 169 /* 170 * The blocked_hash is used to find POSIX lock loops for deadlock detection. 171 * It is protected by blocked_lock_lock. 172 * 173 * We hash locks by lockowner in order to optimize searching for the lock a 174 * particular lockowner is waiting on. 175 * 176 * FIXME: make this value scale via some heuristic? We generally will want more 177 * buckets when we have more lockowners holding locks, but that's a little 178 * difficult to determine without knowing what the workload will look like. 179 */ 180 #define BLOCKED_HASH_BITS 7 181 static DEFINE_HASHTABLE(blocked_hash, BLOCKED_HASH_BITS); 182 183 /* 184 * This lock protects the blocked_hash. Generally, if you're accessing it, you 185 * want to be holding this lock. 186 * 187 * In addition, it also protects the fl->fl_block list, and the fl->fl_next 188 * pointer for file_lock structures that are acting as lock requests (in 189 * contrast to those that are acting as records of acquired locks). 190 * 191 * Note that when we acquire this lock in order to change the above fields, 192 * we often hold the flc_lock as well. In certain cases, when reading the fields 193 * protected by this lock, we can skip acquiring it iff we already hold the 194 * flc_lock. 195 * 196 * In particular, adding an entry to the fl_block list requires that you hold 197 * both the flc_lock and the blocked_lock_lock (acquired in that order). 198 * Deleting an entry from the list however only requires the file_lock_lock. 199 */ 200 static DEFINE_SPINLOCK(blocked_lock_lock); 201 202 static struct kmem_cache *flctx_cache __read_mostly; 203 static struct kmem_cache *filelock_cache __read_mostly; 204 205 static struct file_lock_context * 206 locks_get_lock_context(struct inode *inode, int type) 207 { 208 struct file_lock_context *ctx; 209 210 /* paired with cmpxchg() below */ 211 ctx = smp_load_acquire(&inode->i_flctx); 212 if (likely(ctx) || type == F_UNLCK) 213 goto out; 214 215 ctx = kmem_cache_alloc(flctx_cache, GFP_KERNEL); 216 if (!ctx) 217 goto out; 218 219 spin_lock_init(&ctx->flc_lock); 220 INIT_LIST_HEAD(&ctx->flc_flock); 221 INIT_LIST_HEAD(&ctx->flc_posix); 222 INIT_LIST_HEAD(&ctx->flc_lease); 223 224 /* 225 * Assign the pointer if it's not already assigned. If it is, then 226 * free the context we just allocated. 227 */ 228 if (cmpxchg(&inode->i_flctx, NULL, ctx)) { 229 kmem_cache_free(flctx_cache, ctx); 230 ctx = smp_load_acquire(&inode->i_flctx); 231 } 232 out: 233 return ctx; 234 } 235 236 void 237 locks_free_lock_context(struct file_lock_context *ctx) 238 { 239 if (ctx) { 240 WARN_ON_ONCE(!list_empty(&ctx->flc_flock)); 241 WARN_ON_ONCE(!list_empty(&ctx->flc_posix)); 242 WARN_ON_ONCE(!list_empty(&ctx->flc_lease)); 243 kmem_cache_free(flctx_cache, ctx); 244 } 245 } 246 247 static void locks_init_lock_heads(struct file_lock *fl) 248 { 249 INIT_HLIST_NODE(&fl->fl_link); 250 INIT_LIST_HEAD(&fl->fl_list); 251 INIT_LIST_HEAD(&fl->fl_block); 252 init_waitqueue_head(&fl->fl_wait); 253 } 254 255 /* Allocate an empty lock structure. */ 256 struct file_lock *locks_alloc_lock(void) 257 { 258 struct file_lock *fl = kmem_cache_zalloc(filelock_cache, GFP_KERNEL); 259 260 if (fl) 261 locks_init_lock_heads(fl); 262 263 return fl; 264 } 265 EXPORT_SYMBOL_GPL(locks_alloc_lock); 266 267 void locks_release_private(struct file_lock *fl) 268 { 269 if (fl->fl_ops) { 270 if (fl->fl_ops->fl_release_private) 271 fl->fl_ops->fl_release_private(fl); 272 fl->fl_ops = NULL; 273 } 274 275 if (fl->fl_lmops) { 276 if (fl->fl_lmops->lm_put_owner) { 277 fl->fl_lmops->lm_put_owner(fl->fl_owner); 278 fl->fl_owner = NULL; 279 } 280 fl->fl_lmops = NULL; 281 } 282 } 283 EXPORT_SYMBOL_GPL(locks_release_private); 284 285 /* Free a lock which is not in use. */ 286 void locks_free_lock(struct file_lock *fl) 287 { 288 BUG_ON(waitqueue_active(&fl->fl_wait)); 289 BUG_ON(!list_empty(&fl->fl_list)); 290 BUG_ON(!list_empty(&fl->fl_block)); 291 BUG_ON(!hlist_unhashed(&fl->fl_link)); 292 293 locks_release_private(fl); 294 kmem_cache_free(filelock_cache, fl); 295 } 296 EXPORT_SYMBOL(locks_free_lock); 297 298 static void 299 locks_dispose_list(struct list_head *dispose) 300 { 301 struct file_lock *fl; 302 303 while (!list_empty(dispose)) { 304 fl = list_first_entry(dispose, struct file_lock, fl_list); 305 list_del_init(&fl->fl_list); 306 locks_free_lock(fl); 307 } 308 } 309 310 void locks_init_lock(struct file_lock *fl) 311 { 312 memset(fl, 0, sizeof(struct file_lock)); 313 locks_init_lock_heads(fl); 314 } 315 316 EXPORT_SYMBOL(locks_init_lock); 317 318 /* 319 * Initialize a new lock from an existing file_lock structure. 320 */ 321 void locks_copy_conflock(struct file_lock *new, struct file_lock *fl) 322 { 323 new->fl_owner = fl->fl_owner; 324 new->fl_pid = fl->fl_pid; 325 new->fl_file = NULL; 326 new->fl_flags = fl->fl_flags; 327 new->fl_type = fl->fl_type; 328 new->fl_start = fl->fl_start; 329 new->fl_end = fl->fl_end; 330 new->fl_lmops = fl->fl_lmops; 331 new->fl_ops = NULL; 332 333 if (fl->fl_lmops) { 334 if (fl->fl_lmops->lm_get_owner) 335 fl->fl_lmops->lm_get_owner(fl->fl_owner); 336 } 337 } 338 EXPORT_SYMBOL(locks_copy_conflock); 339 340 void locks_copy_lock(struct file_lock *new, struct file_lock *fl) 341 { 342 /* "new" must be a freshly-initialized lock */ 343 WARN_ON_ONCE(new->fl_ops); 344 345 locks_copy_conflock(new, fl); 346 347 new->fl_file = fl->fl_file; 348 new->fl_ops = fl->fl_ops; 349 350 if (fl->fl_ops) { 351 if (fl->fl_ops->fl_copy_lock) 352 fl->fl_ops->fl_copy_lock(new, fl); 353 } 354 } 355 356 EXPORT_SYMBOL(locks_copy_lock); 357 358 static inline int flock_translate_cmd(int cmd) { 359 if (cmd & LOCK_MAND) 360 return cmd & (LOCK_MAND | LOCK_RW); 361 switch (cmd) { 362 case LOCK_SH: 363 return F_RDLCK; 364 case LOCK_EX: 365 return F_WRLCK; 366 case LOCK_UN: 367 return F_UNLCK; 368 } 369 return -EINVAL; 370 } 371 372 /* Fill in a file_lock structure with an appropriate FLOCK lock. */ 373 static struct file_lock * 374 flock_make_lock(struct file *filp, unsigned int cmd) 375 { 376 struct file_lock *fl; 377 int type = flock_translate_cmd(cmd); 378 379 if (type < 0) 380 return ERR_PTR(type); 381 382 fl = locks_alloc_lock(); 383 if (fl == NULL) 384 return ERR_PTR(-ENOMEM); 385 386 fl->fl_file = filp; 387 fl->fl_owner = filp; 388 fl->fl_pid = current->tgid; 389 fl->fl_flags = FL_FLOCK; 390 fl->fl_type = type; 391 fl->fl_end = OFFSET_MAX; 392 393 return fl; 394 } 395 396 static int assign_type(struct file_lock *fl, long type) 397 { 398 switch (type) { 399 case F_RDLCK: 400 case F_WRLCK: 401 case F_UNLCK: 402 fl->fl_type = type; 403 break; 404 default: 405 return -EINVAL; 406 } 407 return 0; 408 } 409 410 static int flock64_to_posix_lock(struct file *filp, struct file_lock *fl, 411 struct flock64 *l) 412 { 413 switch (l->l_whence) { 414 case SEEK_SET: 415 fl->fl_start = 0; 416 break; 417 case SEEK_CUR: 418 fl->fl_start = filp->f_pos; 419 break; 420 case SEEK_END: 421 fl->fl_start = i_size_read(file_inode(filp)); 422 break; 423 default: 424 return -EINVAL; 425 } 426 if (l->l_start > OFFSET_MAX - fl->fl_start) 427 return -EOVERFLOW; 428 fl->fl_start += l->l_start; 429 if (fl->fl_start < 0) 430 return -EINVAL; 431 432 /* POSIX-1996 leaves the case l->l_len < 0 undefined; 433 POSIX-2001 defines it. */ 434 if (l->l_len > 0) { 435 if (l->l_len - 1 > OFFSET_MAX - fl->fl_start) 436 return -EOVERFLOW; 437 fl->fl_end = fl->fl_start + l->l_len - 1; 438 439 } else if (l->l_len < 0) { 440 if (fl->fl_start + l->l_len < 0) 441 return -EINVAL; 442 fl->fl_end = fl->fl_start - 1; 443 fl->fl_start += l->l_len; 444 } else 445 fl->fl_end = OFFSET_MAX; 446 447 fl->fl_owner = current->files; 448 fl->fl_pid = current->tgid; 449 fl->fl_file = filp; 450 fl->fl_flags = FL_POSIX; 451 fl->fl_ops = NULL; 452 fl->fl_lmops = NULL; 453 454 return assign_type(fl, l->l_type); 455 } 456 457 /* Verify a "struct flock" and copy it to a "struct file_lock" as a POSIX 458 * style lock. 459 */ 460 static int flock_to_posix_lock(struct file *filp, struct file_lock *fl, 461 struct flock *l) 462 { 463 struct flock64 ll = { 464 .l_type = l->l_type, 465 .l_whence = l->l_whence, 466 .l_start = l->l_start, 467 .l_len = l->l_len, 468 }; 469 470 return flock64_to_posix_lock(filp, fl, &ll); 471 } 472 473 /* default lease lock manager operations */ 474 static bool 475 lease_break_callback(struct file_lock *fl) 476 { 477 kill_fasync(&fl->fl_fasync, SIGIO, POLL_MSG); 478 return false; 479 } 480 481 static void 482 lease_setup(struct file_lock *fl, void **priv) 483 { 484 struct file *filp = fl->fl_file; 485 struct fasync_struct *fa = *priv; 486 487 /* 488 * fasync_insert_entry() returns the old entry if any. If there was no 489 * old entry, then it used "priv" and inserted it into the fasync list. 490 * Clear the pointer to indicate that it shouldn't be freed. 491 */ 492 if (!fasync_insert_entry(fa->fa_fd, filp, &fl->fl_fasync, fa)) 493 *priv = NULL; 494 495 __f_setown(filp, task_pid(current), PIDTYPE_PID, 0); 496 } 497 498 static const struct lock_manager_operations lease_manager_ops = { 499 .lm_break = lease_break_callback, 500 .lm_change = lease_modify, 501 .lm_setup = lease_setup, 502 }; 503 504 /* 505 * Initialize a lease, use the default lock manager operations 506 */ 507 static int lease_init(struct file *filp, long type, struct file_lock *fl) 508 { 509 if (assign_type(fl, type) != 0) 510 return -EINVAL; 511 512 fl->fl_owner = filp; 513 fl->fl_pid = current->tgid; 514 515 fl->fl_file = filp; 516 fl->fl_flags = FL_LEASE; 517 fl->fl_start = 0; 518 fl->fl_end = OFFSET_MAX; 519 fl->fl_ops = NULL; 520 fl->fl_lmops = &lease_manager_ops; 521 return 0; 522 } 523 524 /* Allocate a file_lock initialised to this type of lease */ 525 static struct file_lock *lease_alloc(struct file *filp, long type) 526 { 527 struct file_lock *fl = locks_alloc_lock(); 528 int error = -ENOMEM; 529 530 if (fl == NULL) 531 return ERR_PTR(error); 532 533 error = lease_init(filp, type, fl); 534 if (error) { 535 locks_free_lock(fl); 536 return ERR_PTR(error); 537 } 538 return fl; 539 } 540 541 /* Check if two locks overlap each other. 542 */ 543 static inline int locks_overlap(struct file_lock *fl1, struct file_lock *fl2) 544 { 545 return ((fl1->fl_end >= fl2->fl_start) && 546 (fl2->fl_end >= fl1->fl_start)); 547 } 548 549 /* 550 * Check whether two locks have the same owner. 551 */ 552 static int posix_same_owner(struct file_lock *fl1, struct file_lock *fl2) 553 { 554 if (fl1->fl_lmops && fl1->fl_lmops->lm_compare_owner) 555 return fl2->fl_lmops == fl1->fl_lmops && 556 fl1->fl_lmops->lm_compare_owner(fl1, fl2); 557 return fl1->fl_owner == fl2->fl_owner; 558 } 559 560 /* Must be called with the flc_lock held! */ 561 static void locks_insert_global_locks(struct file_lock *fl) 562 { 563 lg_local_lock(&file_lock_lglock); 564 fl->fl_link_cpu = smp_processor_id(); 565 hlist_add_head(&fl->fl_link, this_cpu_ptr(&file_lock_list)); 566 lg_local_unlock(&file_lock_lglock); 567 } 568 569 /* Must be called with the flc_lock held! */ 570 static void locks_delete_global_locks(struct file_lock *fl) 571 { 572 /* 573 * Avoid taking lock if already unhashed. This is safe since this check 574 * is done while holding the flc_lock, and new insertions into the list 575 * also require that it be held. 576 */ 577 if (hlist_unhashed(&fl->fl_link)) 578 return; 579 lg_local_lock_cpu(&file_lock_lglock, fl->fl_link_cpu); 580 hlist_del_init(&fl->fl_link); 581 lg_local_unlock_cpu(&file_lock_lglock, fl->fl_link_cpu); 582 } 583 584 static unsigned long 585 posix_owner_key(struct file_lock *fl) 586 { 587 if (fl->fl_lmops && fl->fl_lmops->lm_owner_key) 588 return fl->fl_lmops->lm_owner_key(fl); 589 return (unsigned long)fl->fl_owner; 590 } 591 592 static void locks_insert_global_blocked(struct file_lock *waiter) 593 { 594 lockdep_assert_held(&blocked_lock_lock); 595 596 hash_add(blocked_hash, &waiter->fl_link, posix_owner_key(waiter)); 597 } 598 599 static void locks_delete_global_blocked(struct file_lock *waiter) 600 { 601 lockdep_assert_held(&blocked_lock_lock); 602 603 hash_del(&waiter->fl_link); 604 } 605 606 /* Remove waiter from blocker's block list. 607 * When blocker ends up pointing to itself then the list is empty. 608 * 609 * Must be called with blocked_lock_lock held. 610 */ 611 static void __locks_delete_block(struct file_lock *waiter) 612 { 613 locks_delete_global_blocked(waiter); 614 list_del_init(&waiter->fl_block); 615 waiter->fl_next = NULL; 616 } 617 618 static void locks_delete_block(struct file_lock *waiter) 619 { 620 spin_lock(&blocked_lock_lock); 621 __locks_delete_block(waiter); 622 spin_unlock(&blocked_lock_lock); 623 } 624 625 /* Insert waiter into blocker's block list. 626 * We use a circular list so that processes can be easily woken up in 627 * the order they blocked. The documentation doesn't require this but 628 * it seems like the reasonable thing to do. 629 * 630 * Must be called with both the flc_lock and blocked_lock_lock held. The 631 * fl_block list itself is protected by the blocked_lock_lock, but by ensuring 632 * that the flc_lock is also held on insertions we can avoid taking the 633 * blocked_lock_lock in some cases when we see that the fl_block list is empty. 634 */ 635 static void __locks_insert_block(struct file_lock *blocker, 636 struct file_lock *waiter) 637 { 638 BUG_ON(!list_empty(&waiter->fl_block)); 639 waiter->fl_next = blocker; 640 list_add_tail(&waiter->fl_block, &blocker->fl_block); 641 if (IS_POSIX(blocker) && !IS_OFDLCK(blocker)) 642 locks_insert_global_blocked(waiter); 643 } 644 645 /* Must be called with flc_lock held. */ 646 static void locks_insert_block(struct file_lock *blocker, 647 struct file_lock *waiter) 648 { 649 spin_lock(&blocked_lock_lock); 650 __locks_insert_block(blocker, waiter); 651 spin_unlock(&blocked_lock_lock); 652 } 653 654 /* 655 * Wake up processes blocked waiting for blocker. 656 * 657 * Must be called with the inode->flc_lock held! 658 */ 659 static void locks_wake_up_blocks(struct file_lock *blocker) 660 { 661 /* 662 * Avoid taking global lock if list is empty. This is safe since new 663 * blocked requests are only added to the list under the flc_lock, and 664 * the flc_lock is always held here. Note that removal from the fl_block 665 * list does not require the flc_lock, so we must recheck list_empty() 666 * after acquiring the blocked_lock_lock. 667 */ 668 if (list_empty(&blocker->fl_block)) 669 return; 670 671 spin_lock(&blocked_lock_lock); 672 while (!list_empty(&blocker->fl_block)) { 673 struct file_lock *waiter; 674 675 waiter = list_first_entry(&blocker->fl_block, 676 struct file_lock, fl_block); 677 __locks_delete_block(waiter); 678 if (waiter->fl_lmops && waiter->fl_lmops->lm_notify) 679 waiter->fl_lmops->lm_notify(waiter); 680 else 681 wake_up(&waiter->fl_wait); 682 } 683 spin_unlock(&blocked_lock_lock); 684 } 685 686 static void 687 locks_insert_lock_ctx(struct file_lock *fl, struct list_head *before) 688 { 689 fl->fl_nspid = get_pid(task_tgid(current)); 690 list_add_tail(&fl->fl_list, before); 691 locks_insert_global_locks(fl); 692 } 693 694 static void 695 locks_unlink_lock_ctx(struct file_lock *fl) 696 { 697 locks_delete_global_locks(fl); 698 list_del_init(&fl->fl_list); 699 if (fl->fl_nspid) { 700 put_pid(fl->fl_nspid); 701 fl->fl_nspid = NULL; 702 } 703 locks_wake_up_blocks(fl); 704 } 705 706 static void 707 locks_delete_lock_ctx(struct file_lock *fl, struct list_head *dispose) 708 { 709 locks_unlink_lock_ctx(fl); 710 if (dispose) 711 list_add(&fl->fl_list, dispose); 712 else 713 locks_free_lock(fl); 714 } 715 716 /* Determine if lock sys_fl blocks lock caller_fl. Common functionality 717 * checks for shared/exclusive status of overlapping locks. 718 */ 719 static int locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 720 { 721 if (sys_fl->fl_type == F_WRLCK) 722 return 1; 723 if (caller_fl->fl_type == F_WRLCK) 724 return 1; 725 return 0; 726 } 727 728 /* Determine if lock sys_fl blocks lock caller_fl. POSIX specific 729 * checking before calling the locks_conflict(). 730 */ 731 static int posix_locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 732 { 733 /* POSIX locks owned by the same process do not conflict with 734 * each other. 735 */ 736 if (posix_same_owner(caller_fl, sys_fl)) 737 return (0); 738 739 /* Check whether they overlap */ 740 if (!locks_overlap(caller_fl, sys_fl)) 741 return 0; 742 743 return (locks_conflict(caller_fl, sys_fl)); 744 } 745 746 /* Determine if lock sys_fl blocks lock caller_fl. FLOCK specific 747 * checking before calling the locks_conflict(). 748 */ 749 static int flock_locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 750 { 751 /* FLOCK locks referring to the same filp do not conflict with 752 * each other. 753 */ 754 if (caller_fl->fl_file == sys_fl->fl_file) 755 return (0); 756 if ((caller_fl->fl_type & LOCK_MAND) || (sys_fl->fl_type & LOCK_MAND)) 757 return 0; 758 759 return (locks_conflict(caller_fl, sys_fl)); 760 } 761 762 void 763 posix_test_lock(struct file *filp, struct file_lock *fl) 764 { 765 struct file_lock *cfl; 766 struct file_lock_context *ctx; 767 struct inode *inode = file_inode(filp); 768 769 ctx = smp_load_acquire(&inode->i_flctx); 770 if (!ctx || list_empty_careful(&ctx->flc_posix)) { 771 fl->fl_type = F_UNLCK; 772 return; 773 } 774 775 spin_lock(&ctx->flc_lock); 776 list_for_each_entry(cfl, &ctx->flc_posix, fl_list) { 777 if (posix_locks_conflict(fl, cfl)) { 778 locks_copy_conflock(fl, cfl); 779 if (cfl->fl_nspid) 780 fl->fl_pid = pid_vnr(cfl->fl_nspid); 781 goto out; 782 } 783 } 784 fl->fl_type = F_UNLCK; 785 out: 786 spin_unlock(&ctx->flc_lock); 787 return; 788 } 789 EXPORT_SYMBOL(posix_test_lock); 790 791 /* 792 * Deadlock detection: 793 * 794 * We attempt to detect deadlocks that are due purely to posix file 795 * locks. 796 * 797 * We assume that a task can be waiting for at most one lock at a time. 798 * So for any acquired lock, the process holding that lock may be 799 * waiting on at most one other lock. That lock in turns may be held by 800 * someone waiting for at most one other lock. Given a requested lock 801 * caller_fl which is about to wait for a conflicting lock block_fl, we 802 * follow this chain of waiters to ensure we are not about to create a 803 * cycle. 804 * 805 * Since we do this before we ever put a process to sleep on a lock, we 806 * are ensured that there is never a cycle; that is what guarantees that 807 * the while() loop in posix_locks_deadlock() eventually completes. 808 * 809 * Note: the above assumption may not be true when handling lock 810 * requests from a broken NFS client. It may also fail in the presence 811 * of tasks (such as posix threads) sharing the same open file table. 812 * To handle those cases, we just bail out after a few iterations. 813 * 814 * For FL_OFDLCK locks, the owner is the filp, not the files_struct. 815 * Because the owner is not even nominally tied to a thread of 816 * execution, the deadlock detection below can't reasonably work well. Just 817 * skip it for those. 818 * 819 * In principle, we could do a more limited deadlock detection on FL_OFDLCK 820 * locks that just checks for the case where two tasks are attempting to 821 * upgrade from read to write locks on the same inode. 822 */ 823 824 #define MAX_DEADLK_ITERATIONS 10 825 826 /* Find a lock that the owner of the given block_fl is blocking on. */ 827 static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl) 828 { 829 struct file_lock *fl; 830 831 hash_for_each_possible(blocked_hash, fl, fl_link, posix_owner_key(block_fl)) { 832 if (posix_same_owner(fl, block_fl)) 833 return fl->fl_next; 834 } 835 return NULL; 836 } 837 838 /* Must be called with the blocked_lock_lock held! */ 839 static int posix_locks_deadlock(struct file_lock *caller_fl, 840 struct file_lock *block_fl) 841 { 842 int i = 0; 843 844 lockdep_assert_held(&blocked_lock_lock); 845 846 /* 847 * This deadlock detector can't reasonably detect deadlocks with 848 * FL_OFDLCK locks, since they aren't owned by a process, per-se. 849 */ 850 if (IS_OFDLCK(caller_fl)) 851 return 0; 852 853 while ((block_fl = what_owner_is_waiting_for(block_fl))) { 854 if (i++ > MAX_DEADLK_ITERATIONS) 855 return 0; 856 if (posix_same_owner(caller_fl, block_fl)) 857 return 1; 858 } 859 return 0; 860 } 861 862 /* Try to create a FLOCK lock on filp. We always insert new FLOCK locks 863 * after any leases, but before any posix locks. 864 * 865 * Note that if called with an FL_EXISTS argument, the caller may determine 866 * whether or not a lock was successfully freed by testing the return 867 * value for -ENOENT. 868 */ 869 static int flock_lock_inode(struct inode *inode, struct file_lock *request) 870 { 871 struct file_lock *new_fl = NULL; 872 struct file_lock *fl; 873 struct file_lock_context *ctx; 874 int error = 0; 875 bool found = false; 876 LIST_HEAD(dispose); 877 878 ctx = locks_get_lock_context(inode, request->fl_type); 879 if (!ctx) { 880 if (request->fl_type != F_UNLCK) 881 return -ENOMEM; 882 return (request->fl_flags & FL_EXISTS) ? -ENOENT : 0; 883 } 884 885 if (!(request->fl_flags & FL_ACCESS) && (request->fl_type != F_UNLCK)) { 886 new_fl = locks_alloc_lock(); 887 if (!new_fl) 888 return -ENOMEM; 889 } 890 891 spin_lock(&ctx->flc_lock); 892 if (request->fl_flags & FL_ACCESS) 893 goto find_conflict; 894 895 list_for_each_entry(fl, &ctx->flc_flock, fl_list) { 896 if (request->fl_file != fl->fl_file) 897 continue; 898 if (request->fl_type == fl->fl_type) 899 goto out; 900 found = true; 901 locks_delete_lock_ctx(fl, &dispose); 902 break; 903 } 904 905 if (request->fl_type == F_UNLCK) { 906 if ((request->fl_flags & FL_EXISTS) && !found) 907 error = -ENOENT; 908 goto out; 909 } 910 911 find_conflict: 912 list_for_each_entry(fl, &ctx->flc_flock, fl_list) { 913 if (!flock_locks_conflict(request, fl)) 914 continue; 915 error = -EAGAIN; 916 if (!(request->fl_flags & FL_SLEEP)) 917 goto out; 918 error = FILE_LOCK_DEFERRED; 919 locks_insert_block(fl, request); 920 goto out; 921 } 922 if (request->fl_flags & FL_ACCESS) 923 goto out; 924 locks_copy_lock(new_fl, request); 925 locks_insert_lock_ctx(new_fl, &ctx->flc_flock); 926 new_fl = NULL; 927 error = 0; 928 929 out: 930 spin_unlock(&ctx->flc_lock); 931 if (new_fl) 932 locks_free_lock(new_fl); 933 locks_dispose_list(&dispose); 934 return error; 935 } 936 937 static int __posix_lock_file(struct inode *inode, struct file_lock *request, struct file_lock *conflock) 938 { 939 struct file_lock *fl, *tmp; 940 struct file_lock *new_fl = NULL; 941 struct file_lock *new_fl2 = NULL; 942 struct file_lock *left = NULL; 943 struct file_lock *right = NULL; 944 struct file_lock_context *ctx; 945 int error; 946 bool added = false; 947 LIST_HEAD(dispose); 948 949 ctx = locks_get_lock_context(inode, request->fl_type); 950 if (!ctx) 951 return (request->fl_type == F_UNLCK) ? 0 : -ENOMEM; 952 953 /* 954 * We may need two file_lock structures for this operation, 955 * so we get them in advance to avoid races. 956 * 957 * In some cases we can be sure, that no new locks will be needed 958 */ 959 if (!(request->fl_flags & FL_ACCESS) && 960 (request->fl_type != F_UNLCK || 961 request->fl_start != 0 || request->fl_end != OFFSET_MAX)) { 962 new_fl = locks_alloc_lock(); 963 new_fl2 = locks_alloc_lock(); 964 } 965 966 spin_lock(&ctx->flc_lock); 967 /* 968 * New lock request. Walk all POSIX locks and look for conflicts. If 969 * there are any, either return error or put the request on the 970 * blocker's list of waiters and the global blocked_hash. 971 */ 972 if (request->fl_type != F_UNLCK) { 973 list_for_each_entry(fl, &ctx->flc_posix, fl_list) { 974 if (!posix_locks_conflict(request, fl)) 975 continue; 976 if (conflock) 977 locks_copy_conflock(conflock, fl); 978 error = -EAGAIN; 979 if (!(request->fl_flags & FL_SLEEP)) 980 goto out; 981 /* 982 * Deadlock detection and insertion into the blocked 983 * locks list must be done while holding the same lock! 984 */ 985 error = -EDEADLK; 986 spin_lock(&blocked_lock_lock); 987 if (likely(!posix_locks_deadlock(request, fl))) { 988 error = FILE_LOCK_DEFERRED; 989 __locks_insert_block(fl, request); 990 } 991 spin_unlock(&blocked_lock_lock); 992 goto out; 993 } 994 } 995 996 /* If we're just looking for a conflict, we're done. */ 997 error = 0; 998 if (request->fl_flags & FL_ACCESS) 999 goto out; 1000 1001 /* Find the first old lock with the same owner as the new lock */ 1002 list_for_each_entry(fl, &ctx->flc_posix, fl_list) { 1003 if (posix_same_owner(request, fl)) 1004 break; 1005 } 1006 1007 /* Process locks with this owner. */ 1008 list_for_each_entry_safe_from(fl, tmp, &ctx->flc_posix, fl_list) { 1009 if (!posix_same_owner(request, fl)) 1010 break; 1011 1012 /* Detect adjacent or overlapping regions (if same lock type) */ 1013 if (request->fl_type == fl->fl_type) { 1014 /* In all comparisons of start vs end, use 1015 * "start - 1" rather than "end + 1". If end 1016 * is OFFSET_MAX, end + 1 will become negative. 1017 */ 1018 if (fl->fl_end < request->fl_start - 1) 1019 continue; 1020 /* If the next lock in the list has entirely bigger 1021 * addresses than the new one, insert the lock here. 1022 */ 1023 if (fl->fl_start - 1 > request->fl_end) 1024 break; 1025 1026 /* If we come here, the new and old lock are of the 1027 * same type and adjacent or overlapping. Make one 1028 * lock yielding from the lower start address of both 1029 * locks to the higher end address. 1030 */ 1031 if (fl->fl_start > request->fl_start) 1032 fl->fl_start = request->fl_start; 1033 else 1034 request->fl_start = fl->fl_start; 1035 if (fl->fl_end < request->fl_end) 1036 fl->fl_end = request->fl_end; 1037 else 1038 request->fl_end = fl->fl_end; 1039 if (added) { 1040 locks_delete_lock_ctx(fl, &dispose); 1041 continue; 1042 } 1043 request = fl; 1044 added = true; 1045 } else { 1046 /* Processing for different lock types is a bit 1047 * more complex. 1048 */ 1049 if (fl->fl_end < request->fl_start) 1050 continue; 1051 if (fl->fl_start > request->fl_end) 1052 break; 1053 if (request->fl_type == F_UNLCK) 1054 added = true; 1055 if (fl->fl_start < request->fl_start) 1056 left = fl; 1057 /* If the next lock in the list has a higher end 1058 * address than the new one, insert the new one here. 1059 */ 1060 if (fl->fl_end > request->fl_end) { 1061 right = fl; 1062 break; 1063 } 1064 if (fl->fl_start >= request->fl_start) { 1065 /* The new lock completely replaces an old 1066 * one (This may happen several times). 1067 */ 1068 if (added) { 1069 locks_delete_lock_ctx(fl, &dispose); 1070 continue; 1071 } 1072 /* 1073 * Replace the old lock with new_fl, and 1074 * remove the old one. It's safe to do the 1075 * insert here since we know that we won't be 1076 * using new_fl later, and that the lock is 1077 * just replacing an existing lock. 1078 */ 1079 error = -ENOLCK; 1080 if (!new_fl) 1081 goto out; 1082 locks_copy_lock(new_fl, request); 1083 request = new_fl; 1084 new_fl = NULL; 1085 locks_insert_lock_ctx(request, &fl->fl_list); 1086 locks_delete_lock_ctx(fl, &dispose); 1087 added = true; 1088 } 1089 } 1090 } 1091 1092 /* 1093 * The above code only modifies existing locks in case of merging or 1094 * replacing. If new lock(s) need to be inserted all modifications are 1095 * done below this, so it's safe yet to bail out. 1096 */ 1097 error = -ENOLCK; /* "no luck" */ 1098 if (right && left == right && !new_fl2) 1099 goto out; 1100 1101 error = 0; 1102 if (!added) { 1103 if (request->fl_type == F_UNLCK) { 1104 if (request->fl_flags & FL_EXISTS) 1105 error = -ENOENT; 1106 goto out; 1107 } 1108 1109 if (!new_fl) { 1110 error = -ENOLCK; 1111 goto out; 1112 } 1113 locks_copy_lock(new_fl, request); 1114 locks_insert_lock_ctx(new_fl, &fl->fl_list); 1115 fl = new_fl; 1116 new_fl = NULL; 1117 } 1118 if (right) { 1119 if (left == right) { 1120 /* The new lock breaks the old one in two pieces, 1121 * so we have to use the second new lock. 1122 */ 1123 left = new_fl2; 1124 new_fl2 = NULL; 1125 locks_copy_lock(left, right); 1126 locks_insert_lock_ctx(left, &fl->fl_list); 1127 } 1128 right->fl_start = request->fl_end + 1; 1129 locks_wake_up_blocks(right); 1130 } 1131 if (left) { 1132 left->fl_end = request->fl_start - 1; 1133 locks_wake_up_blocks(left); 1134 } 1135 out: 1136 spin_unlock(&ctx->flc_lock); 1137 /* 1138 * Free any unused locks. 1139 */ 1140 if (new_fl) 1141 locks_free_lock(new_fl); 1142 if (new_fl2) 1143 locks_free_lock(new_fl2); 1144 locks_dispose_list(&dispose); 1145 return error; 1146 } 1147 1148 /** 1149 * posix_lock_file - Apply a POSIX-style lock to a file 1150 * @filp: The file to apply the lock to 1151 * @fl: The lock to be applied 1152 * @conflock: Place to return a copy of the conflicting lock, if found. 1153 * 1154 * Add a POSIX style lock to a file. 1155 * We merge adjacent & overlapping locks whenever possible. 1156 * POSIX locks are sorted by owner task, then by starting address 1157 * 1158 * Note that if called with an FL_EXISTS argument, the caller may determine 1159 * whether or not a lock was successfully freed by testing the return 1160 * value for -ENOENT. 1161 */ 1162 int posix_lock_file(struct file *filp, struct file_lock *fl, 1163 struct file_lock *conflock) 1164 { 1165 return __posix_lock_file(file_inode(filp), fl, conflock); 1166 } 1167 EXPORT_SYMBOL(posix_lock_file); 1168 1169 /** 1170 * posix_lock_inode_wait - Apply a POSIX-style lock to a file 1171 * @inode: inode of file to which lock request should be applied 1172 * @fl: The lock to be applied 1173 * 1174 * Apply a POSIX style lock request to an inode. 1175 */ 1176 static int posix_lock_inode_wait(struct inode *inode, struct file_lock *fl) 1177 { 1178 int error; 1179 might_sleep (); 1180 for (;;) { 1181 error = __posix_lock_file(inode, fl, NULL); 1182 if (error != FILE_LOCK_DEFERRED) 1183 break; 1184 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 1185 if (!error) 1186 continue; 1187 1188 locks_delete_block(fl); 1189 break; 1190 } 1191 return error; 1192 } 1193 1194 /** 1195 * locks_mandatory_locked - Check for an active lock 1196 * @file: the file to check 1197 * 1198 * Searches the inode's list of locks to find any POSIX locks which conflict. 1199 * This function is called from locks_verify_locked() only. 1200 */ 1201 int locks_mandatory_locked(struct file *file) 1202 { 1203 int ret; 1204 struct inode *inode = file_inode(file); 1205 struct file_lock_context *ctx; 1206 struct file_lock *fl; 1207 1208 ctx = smp_load_acquire(&inode->i_flctx); 1209 if (!ctx || list_empty_careful(&ctx->flc_posix)) 1210 return 0; 1211 1212 /* 1213 * Search the lock list for this inode for any POSIX locks. 1214 */ 1215 spin_lock(&ctx->flc_lock); 1216 ret = 0; 1217 list_for_each_entry(fl, &ctx->flc_posix, fl_list) { 1218 if (fl->fl_owner != current->files && 1219 fl->fl_owner != file) { 1220 ret = -EAGAIN; 1221 break; 1222 } 1223 } 1224 spin_unlock(&ctx->flc_lock); 1225 return ret; 1226 } 1227 1228 /** 1229 * locks_mandatory_area - Check for a conflicting lock 1230 * @read_write: %FLOCK_VERIFY_WRITE for exclusive access, %FLOCK_VERIFY_READ 1231 * for shared 1232 * @inode: the file to check 1233 * @filp: how the file was opened (if it was) 1234 * @offset: start of area to check 1235 * @count: length of area to check 1236 * 1237 * Searches the inode's list of locks to find any POSIX locks which conflict. 1238 * This function is called from rw_verify_area() and 1239 * locks_verify_truncate(). 1240 */ 1241 int locks_mandatory_area(int read_write, struct inode *inode, 1242 struct file *filp, loff_t offset, 1243 size_t count) 1244 { 1245 struct file_lock fl; 1246 int error; 1247 bool sleep = false; 1248 1249 locks_init_lock(&fl); 1250 fl.fl_pid = current->tgid; 1251 fl.fl_file = filp; 1252 fl.fl_flags = FL_POSIX | FL_ACCESS; 1253 if (filp && !(filp->f_flags & O_NONBLOCK)) 1254 sleep = true; 1255 fl.fl_type = (read_write == FLOCK_VERIFY_WRITE) ? F_WRLCK : F_RDLCK; 1256 fl.fl_start = offset; 1257 fl.fl_end = offset + count - 1; 1258 1259 for (;;) { 1260 if (filp) { 1261 fl.fl_owner = filp; 1262 fl.fl_flags &= ~FL_SLEEP; 1263 error = __posix_lock_file(inode, &fl, NULL); 1264 if (!error) 1265 break; 1266 } 1267 1268 if (sleep) 1269 fl.fl_flags |= FL_SLEEP; 1270 fl.fl_owner = current->files; 1271 error = __posix_lock_file(inode, &fl, NULL); 1272 if (error != FILE_LOCK_DEFERRED) 1273 break; 1274 error = wait_event_interruptible(fl.fl_wait, !fl.fl_next); 1275 if (!error) { 1276 /* 1277 * If we've been sleeping someone might have 1278 * changed the permissions behind our back. 1279 */ 1280 if (__mandatory_lock(inode)) 1281 continue; 1282 } 1283 1284 locks_delete_block(&fl); 1285 break; 1286 } 1287 1288 return error; 1289 } 1290 1291 EXPORT_SYMBOL(locks_mandatory_area); 1292 1293 static void lease_clear_pending(struct file_lock *fl, int arg) 1294 { 1295 switch (arg) { 1296 case F_UNLCK: 1297 fl->fl_flags &= ~FL_UNLOCK_PENDING; 1298 /* fall through: */ 1299 case F_RDLCK: 1300 fl->fl_flags &= ~FL_DOWNGRADE_PENDING; 1301 } 1302 } 1303 1304 /* We already had a lease on this file; just change its type */ 1305 int lease_modify(struct file_lock *fl, int arg, struct list_head *dispose) 1306 { 1307 int error = assign_type(fl, arg); 1308 1309 if (error) 1310 return error; 1311 lease_clear_pending(fl, arg); 1312 locks_wake_up_blocks(fl); 1313 if (arg == F_UNLCK) { 1314 struct file *filp = fl->fl_file; 1315 1316 f_delown(filp); 1317 filp->f_owner.signum = 0; 1318 fasync_helper(0, fl->fl_file, 0, &fl->fl_fasync); 1319 if (fl->fl_fasync != NULL) { 1320 printk(KERN_ERR "locks_delete_lock: fasync == %p\n", fl->fl_fasync); 1321 fl->fl_fasync = NULL; 1322 } 1323 locks_delete_lock_ctx(fl, dispose); 1324 } 1325 return 0; 1326 } 1327 EXPORT_SYMBOL(lease_modify); 1328 1329 static bool past_time(unsigned long then) 1330 { 1331 if (!then) 1332 /* 0 is a special value meaning "this never expires": */ 1333 return false; 1334 return time_after(jiffies, then); 1335 } 1336 1337 static void time_out_leases(struct inode *inode, struct list_head *dispose) 1338 { 1339 struct file_lock_context *ctx = inode->i_flctx; 1340 struct file_lock *fl, *tmp; 1341 1342 lockdep_assert_held(&ctx->flc_lock); 1343 1344 list_for_each_entry_safe(fl, tmp, &ctx->flc_lease, fl_list) { 1345 trace_time_out_leases(inode, fl); 1346 if (past_time(fl->fl_downgrade_time)) 1347 lease_modify(fl, F_RDLCK, dispose); 1348 if (past_time(fl->fl_break_time)) 1349 lease_modify(fl, F_UNLCK, dispose); 1350 } 1351 } 1352 1353 static bool leases_conflict(struct file_lock *lease, struct file_lock *breaker) 1354 { 1355 if ((breaker->fl_flags & FL_LAYOUT) != (lease->fl_flags & FL_LAYOUT)) 1356 return false; 1357 if ((breaker->fl_flags & FL_DELEG) && (lease->fl_flags & FL_LEASE)) 1358 return false; 1359 return locks_conflict(breaker, lease); 1360 } 1361 1362 static bool 1363 any_leases_conflict(struct inode *inode, struct file_lock *breaker) 1364 { 1365 struct file_lock_context *ctx = inode->i_flctx; 1366 struct file_lock *fl; 1367 1368 lockdep_assert_held(&ctx->flc_lock); 1369 1370 list_for_each_entry(fl, &ctx->flc_lease, fl_list) { 1371 if (leases_conflict(fl, breaker)) 1372 return true; 1373 } 1374 return false; 1375 } 1376 1377 /** 1378 * __break_lease - revoke all outstanding leases on file 1379 * @inode: the inode of the file to return 1380 * @mode: O_RDONLY: break only write leases; O_WRONLY or O_RDWR: 1381 * break all leases 1382 * @type: FL_LEASE: break leases and delegations; FL_DELEG: break 1383 * only delegations 1384 * 1385 * break_lease (inlined for speed) has checked there already is at least 1386 * some kind of lock (maybe a lease) on this file. Leases are broken on 1387 * a call to open() or truncate(). This function can sleep unless you 1388 * specified %O_NONBLOCK to your open(). 1389 */ 1390 int __break_lease(struct inode *inode, unsigned int mode, unsigned int type) 1391 { 1392 int error = 0; 1393 struct file_lock_context *ctx; 1394 struct file_lock *new_fl, *fl, *tmp; 1395 unsigned long break_time; 1396 int want_write = (mode & O_ACCMODE) != O_RDONLY; 1397 LIST_HEAD(dispose); 1398 1399 new_fl = lease_alloc(NULL, want_write ? F_WRLCK : F_RDLCK); 1400 if (IS_ERR(new_fl)) 1401 return PTR_ERR(new_fl); 1402 new_fl->fl_flags = type; 1403 1404 /* typically we will check that ctx is non-NULL before calling */ 1405 ctx = smp_load_acquire(&inode->i_flctx); 1406 if (!ctx) { 1407 WARN_ON_ONCE(1); 1408 return error; 1409 } 1410 1411 spin_lock(&ctx->flc_lock); 1412 1413 time_out_leases(inode, &dispose); 1414 1415 if (!any_leases_conflict(inode, new_fl)) 1416 goto out; 1417 1418 break_time = 0; 1419 if (lease_break_time > 0) { 1420 break_time = jiffies + lease_break_time * HZ; 1421 if (break_time == 0) 1422 break_time++; /* so that 0 means no break time */ 1423 } 1424 1425 list_for_each_entry_safe(fl, tmp, &ctx->flc_lease, fl_list) { 1426 if (!leases_conflict(fl, new_fl)) 1427 continue; 1428 if (want_write) { 1429 if (fl->fl_flags & FL_UNLOCK_PENDING) 1430 continue; 1431 fl->fl_flags |= FL_UNLOCK_PENDING; 1432 fl->fl_break_time = break_time; 1433 } else { 1434 if (lease_breaking(fl)) 1435 continue; 1436 fl->fl_flags |= FL_DOWNGRADE_PENDING; 1437 fl->fl_downgrade_time = break_time; 1438 } 1439 if (fl->fl_lmops->lm_break(fl)) 1440 locks_delete_lock_ctx(fl, &dispose); 1441 } 1442 1443 if (list_empty(&ctx->flc_lease)) 1444 goto out; 1445 1446 if (mode & O_NONBLOCK) { 1447 trace_break_lease_noblock(inode, new_fl); 1448 error = -EWOULDBLOCK; 1449 goto out; 1450 } 1451 1452 restart: 1453 fl = list_first_entry(&ctx->flc_lease, struct file_lock, fl_list); 1454 break_time = fl->fl_break_time; 1455 if (break_time != 0) 1456 break_time -= jiffies; 1457 if (break_time == 0) 1458 break_time++; 1459 locks_insert_block(fl, new_fl); 1460 trace_break_lease_block(inode, new_fl); 1461 spin_unlock(&ctx->flc_lock); 1462 locks_dispose_list(&dispose); 1463 error = wait_event_interruptible_timeout(new_fl->fl_wait, 1464 !new_fl->fl_next, break_time); 1465 spin_lock(&ctx->flc_lock); 1466 trace_break_lease_unblock(inode, new_fl); 1467 locks_delete_block(new_fl); 1468 if (error >= 0) { 1469 /* 1470 * Wait for the next conflicting lease that has not been 1471 * broken yet 1472 */ 1473 if (error == 0) 1474 time_out_leases(inode, &dispose); 1475 if (any_leases_conflict(inode, new_fl)) 1476 goto restart; 1477 error = 0; 1478 } 1479 out: 1480 spin_unlock(&ctx->flc_lock); 1481 locks_dispose_list(&dispose); 1482 locks_free_lock(new_fl); 1483 return error; 1484 } 1485 1486 EXPORT_SYMBOL(__break_lease); 1487 1488 /** 1489 * lease_get_mtime - get the last modified time of an inode 1490 * @inode: the inode 1491 * @time: pointer to a timespec which will contain the last modified time 1492 * 1493 * This is to force NFS clients to flush their caches for files with 1494 * exclusive leases. The justification is that if someone has an 1495 * exclusive lease, then they could be modifying it. 1496 */ 1497 void lease_get_mtime(struct inode *inode, struct timespec *time) 1498 { 1499 bool has_lease = false; 1500 struct file_lock_context *ctx; 1501 struct file_lock *fl; 1502 1503 ctx = smp_load_acquire(&inode->i_flctx); 1504 if (ctx && !list_empty_careful(&ctx->flc_lease)) { 1505 spin_lock(&ctx->flc_lock); 1506 if (!list_empty(&ctx->flc_lease)) { 1507 fl = list_first_entry(&ctx->flc_lease, 1508 struct file_lock, fl_list); 1509 if (fl->fl_type == F_WRLCK) 1510 has_lease = true; 1511 } 1512 spin_unlock(&ctx->flc_lock); 1513 } 1514 1515 if (has_lease) 1516 *time = current_fs_time(inode->i_sb); 1517 else 1518 *time = inode->i_mtime; 1519 } 1520 1521 EXPORT_SYMBOL(lease_get_mtime); 1522 1523 /** 1524 * fcntl_getlease - Enquire what lease is currently active 1525 * @filp: the file 1526 * 1527 * The value returned by this function will be one of 1528 * (if no lease break is pending): 1529 * 1530 * %F_RDLCK to indicate a shared lease is held. 1531 * 1532 * %F_WRLCK to indicate an exclusive lease is held. 1533 * 1534 * %F_UNLCK to indicate no lease is held. 1535 * 1536 * (if a lease break is pending): 1537 * 1538 * %F_RDLCK to indicate an exclusive lease needs to be 1539 * changed to a shared lease (or removed). 1540 * 1541 * %F_UNLCK to indicate the lease needs to be removed. 1542 * 1543 * XXX: sfr & willy disagree over whether F_INPROGRESS 1544 * should be returned to userspace. 1545 */ 1546 int fcntl_getlease(struct file *filp) 1547 { 1548 struct file_lock *fl; 1549 struct inode *inode = file_inode(filp); 1550 struct file_lock_context *ctx; 1551 int type = F_UNLCK; 1552 LIST_HEAD(dispose); 1553 1554 ctx = smp_load_acquire(&inode->i_flctx); 1555 if (ctx && !list_empty_careful(&ctx->flc_lease)) { 1556 spin_lock(&ctx->flc_lock); 1557 time_out_leases(file_inode(filp), &dispose); 1558 list_for_each_entry(fl, &ctx->flc_lease, fl_list) { 1559 if (fl->fl_file != filp) 1560 continue; 1561 type = target_leasetype(fl); 1562 break; 1563 } 1564 spin_unlock(&ctx->flc_lock); 1565 locks_dispose_list(&dispose); 1566 } 1567 return type; 1568 } 1569 1570 /** 1571 * check_conflicting_open - see if the given dentry points to a file that has 1572 * an existing open that would conflict with the 1573 * desired lease. 1574 * @dentry: dentry to check 1575 * @arg: type of lease that we're trying to acquire 1576 * @flags: current lock flags 1577 * 1578 * Check to see if there's an existing open fd on this file that would 1579 * conflict with the lease we're trying to set. 1580 */ 1581 static int 1582 check_conflicting_open(const struct dentry *dentry, const long arg, int flags) 1583 { 1584 int ret = 0; 1585 struct inode *inode = dentry->d_inode; 1586 1587 if (flags & FL_LAYOUT) 1588 return 0; 1589 1590 if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0)) 1591 return -EAGAIN; 1592 1593 if ((arg == F_WRLCK) && ((d_count(dentry) > 1) || 1594 (atomic_read(&inode->i_count) > 1))) 1595 ret = -EAGAIN; 1596 1597 return ret; 1598 } 1599 1600 static int 1601 generic_add_lease(struct file *filp, long arg, struct file_lock **flp, void **priv) 1602 { 1603 struct file_lock *fl, *my_fl = NULL, *lease; 1604 struct dentry *dentry = filp->f_path.dentry; 1605 struct inode *inode = dentry->d_inode; 1606 struct file_lock_context *ctx; 1607 bool is_deleg = (*flp)->fl_flags & FL_DELEG; 1608 int error; 1609 LIST_HEAD(dispose); 1610 1611 lease = *flp; 1612 trace_generic_add_lease(inode, lease); 1613 1614 /* Note that arg is never F_UNLCK here */ 1615 ctx = locks_get_lock_context(inode, arg); 1616 if (!ctx) 1617 return -ENOMEM; 1618 1619 /* 1620 * In the delegation case we need mutual exclusion with 1621 * a number of operations that take the i_mutex. We trylock 1622 * because delegations are an optional optimization, and if 1623 * there's some chance of a conflict--we'd rather not 1624 * bother, maybe that's a sign this just isn't a good file to 1625 * hand out a delegation on. 1626 */ 1627 if (is_deleg && !mutex_trylock(&inode->i_mutex)) 1628 return -EAGAIN; 1629 1630 if (is_deleg && arg == F_WRLCK) { 1631 /* Write delegations are not currently supported: */ 1632 mutex_unlock(&inode->i_mutex); 1633 WARN_ON_ONCE(1); 1634 return -EINVAL; 1635 } 1636 1637 spin_lock(&ctx->flc_lock); 1638 time_out_leases(inode, &dispose); 1639 error = check_conflicting_open(dentry, arg, lease->fl_flags); 1640 if (error) 1641 goto out; 1642 1643 /* 1644 * At this point, we know that if there is an exclusive 1645 * lease on this file, then we hold it on this filp 1646 * (otherwise our open of this file would have blocked). 1647 * And if we are trying to acquire an exclusive lease, 1648 * then the file is not open by anyone (including us) 1649 * except for this filp. 1650 */ 1651 error = -EAGAIN; 1652 list_for_each_entry(fl, &ctx->flc_lease, fl_list) { 1653 if (fl->fl_file == filp && 1654 fl->fl_owner == lease->fl_owner) { 1655 my_fl = fl; 1656 continue; 1657 } 1658 1659 /* 1660 * No exclusive leases if someone else has a lease on 1661 * this file: 1662 */ 1663 if (arg == F_WRLCK) 1664 goto out; 1665 /* 1666 * Modifying our existing lease is OK, but no getting a 1667 * new lease if someone else is opening for write: 1668 */ 1669 if (fl->fl_flags & FL_UNLOCK_PENDING) 1670 goto out; 1671 } 1672 1673 if (my_fl != NULL) { 1674 lease = my_fl; 1675 error = lease->fl_lmops->lm_change(lease, arg, &dispose); 1676 if (error) 1677 goto out; 1678 goto out_setup; 1679 } 1680 1681 error = -EINVAL; 1682 if (!leases_enable) 1683 goto out; 1684 1685 locks_insert_lock_ctx(lease, &ctx->flc_lease); 1686 /* 1687 * The check in break_lease() is lockless. It's possible for another 1688 * open to race in after we did the earlier check for a conflicting 1689 * open but before the lease was inserted. Check again for a 1690 * conflicting open and cancel the lease if there is one. 1691 * 1692 * We also add a barrier here to ensure that the insertion of the lock 1693 * precedes these checks. 1694 */ 1695 smp_mb(); 1696 error = check_conflicting_open(dentry, arg, lease->fl_flags); 1697 if (error) { 1698 locks_unlink_lock_ctx(lease); 1699 goto out; 1700 } 1701 1702 out_setup: 1703 if (lease->fl_lmops->lm_setup) 1704 lease->fl_lmops->lm_setup(lease, priv); 1705 out: 1706 spin_unlock(&ctx->flc_lock); 1707 locks_dispose_list(&dispose); 1708 if (is_deleg) 1709 mutex_unlock(&inode->i_mutex); 1710 if (!error && !my_fl) 1711 *flp = NULL; 1712 return error; 1713 } 1714 1715 static int generic_delete_lease(struct file *filp, void *owner) 1716 { 1717 int error = -EAGAIN; 1718 struct file_lock *fl, *victim = NULL; 1719 struct inode *inode = file_inode(filp); 1720 struct file_lock_context *ctx; 1721 LIST_HEAD(dispose); 1722 1723 ctx = smp_load_acquire(&inode->i_flctx); 1724 if (!ctx) { 1725 trace_generic_delete_lease(inode, NULL); 1726 return error; 1727 } 1728 1729 spin_lock(&ctx->flc_lock); 1730 list_for_each_entry(fl, &ctx->flc_lease, fl_list) { 1731 if (fl->fl_file == filp && 1732 fl->fl_owner == owner) { 1733 victim = fl; 1734 break; 1735 } 1736 } 1737 trace_generic_delete_lease(inode, victim); 1738 if (victim) 1739 error = fl->fl_lmops->lm_change(victim, F_UNLCK, &dispose); 1740 spin_unlock(&ctx->flc_lock); 1741 locks_dispose_list(&dispose); 1742 return error; 1743 } 1744 1745 /** 1746 * generic_setlease - sets a lease on an open file 1747 * @filp: file pointer 1748 * @arg: type of lease to obtain 1749 * @flp: input - file_lock to use, output - file_lock inserted 1750 * @priv: private data for lm_setup (may be NULL if lm_setup 1751 * doesn't require it) 1752 * 1753 * The (input) flp->fl_lmops->lm_break function is required 1754 * by break_lease(). 1755 */ 1756 int generic_setlease(struct file *filp, long arg, struct file_lock **flp, 1757 void **priv) 1758 { 1759 struct inode *inode = file_inode(filp); 1760 int error; 1761 1762 if ((!uid_eq(current_fsuid(), inode->i_uid)) && !capable(CAP_LEASE)) 1763 return -EACCES; 1764 if (!S_ISREG(inode->i_mode)) 1765 return -EINVAL; 1766 error = security_file_lock(filp, arg); 1767 if (error) 1768 return error; 1769 1770 switch (arg) { 1771 case F_UNLCK: 1772 return generic_delete_lease(filp, *priv); 1773 case F_RDLCK: 1774 case F_WRLCK: 1775 if (!(*flp)->fl_lmops->lm_break) { 1776 WARN_ON_ONCE(1); 1777 return -ENOLCK; 1778 } 1779 1780 return generic_add_lease(filp, arg, flp, priv); 1781 default: 1782 return -EINVAL; 1783 } 1784 } 1785 EXPORT_SYMBOL(generic_setlease); 1786 1787 /** 1788 * vfs_setlease - sets a lease on an open file 1789 * @filp: file pointer 1790 * @arg: type of lease to obtain 1791 * @lease: file_lock to use when adding a lease 1792 * @priv: private info for lm_setup when adding a lease (may be 1793 * NULL if lm_setup doesn't require it) 1794 * 1795 * Call this to establish a lease on the file. The "lease" argument is not 1796 * used for F_UNLCK requests and may be NULL. For commands that set or alter 1797 * an existing lease, the (*lease)->fl_lmops->lm_break operation must be set; 1798 * if not, this function will return -ENOLCK (and generate a scary-looking 1799 * stack trace). 1800 * 1801 * The "priv" pointer is passed directly to the lm_setup function as-is. It 1802 * may be NULL if the lm_setup operation doesn't require it. 1803 */ 1804 int 1805 vfs_setlease(struct file *filp, long arg, struct file_lock **lease, void **priv) 1806 { 1807 if (filp->f_op->setlease) 1808 return filp->f_op->setlease(filp, arg, lease, priv); 1809 else 1810 return generic_setlease(filp, arg, lease, priv); 1811 } 1812 EXPORT_SYMBOL_GPL(vfs_setlease); 1813 1814 static int do_fcntl_add_lease(unsigned int fd, struct file *filp, long arg) 1815 { 1816 struct file_lock *fl; 1817 struct fasync_struct *new; 1818 int error; 1819 1820 fl = lease_alloc(filp, arg); 1821 if (IS_ERR(fl)) 1822 return PTR_ERR(fl); 1823 1824 new = fasync_alloc(); 1825 if (!new) { 1826 locks_free_lock(fl); 1827 return -ENOMEM; 1828 } 1829 new->fa_fd = fd; 1830 1831 error = vfs_setlease(filp, arg, &fl, (void **)&new); 1832 if (fl) 1833 locks_free_lock(fl); 1834 if (new) 1835 fasync_free(new); 1836 return error; 1837 } 1838 1839 /** 1840 * fcntl_setlease - sets a lease on an open file 1841 * @fd: open file descriptor 1842 * @filp: file pointer 1843 * @arg: type of lease to obtain 1844 * 1845 * Call this fcntl to establish a lease on the file. 1846 * Note that you also need to call %F_SETSIG to 1847 * receive a signal when the lease is broken. 1848 */ 1849 int fcntl_setlease(unsigned int fd, struct file *filp, long arg) 1850 { 1851 if (arg == F_UNLCK) 1852 return vfs_setlease(filp, F_UNLCK, NULL, (void **)&filp); 1853 return do_fcntl_add_lease(fd, filp, arg); 1854 } 1855 1856 /** 1857 * flock_lock_inode_wait - Apply a FLOCK-style lock to a file 1858 * @inode: inode of the file to apply to 1859 * @fl: The lock to be applied 1860 * 1861 * Apply a FLOCK style lock request to an inode. 1862 */ 1863 static int flock_lock_inode_wait(struct inode *inode, struct file_lock *fl) 1864 { 1865 int error; 1866 might_sleep(); 1867 for (;;) { 1868 error = flock_lock_inode(inode, fl); 1869 if (error != FILE_LOCK_DEFERRED) 1870 break; 1871 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 1872 if (!error) 1873 continue; 1874 1875 locks_delete_block(fl); 1876 break; 1877 } 1878 return error; 1879 } 1880 1881 /** 1882 * locks_lock_inode_wait - Apply a lock to an inode 1883 * @inode: inode of the file to apply to 1884 * @fl: The lock to be applied 1885 * 1886 * Apply a POSIX or FLOCK style lock request to an inode. 1887 */ 1888 int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl) 1889 { 1890 int res = 0; 1891 switch (fl->fl_flags & (FL_POSIX|FL_FLOCK)) { 1892 case FL_POSIX: 1893 res = posix_lock_inode_wait(inode, fl); 1894 break; 1895 case FL_FLOCK: 1896 res = flock_lock_inode_wait(inode, fl); 1897 break; 1898 default: 1899 BUG(); 1900 } 1901 return res; 1902 } 1903 EXPORT_SYMBOL(locks_lock_inode_wait); 1904 1905 /** 1906 * sys_flock: - flock() system call. 1907 * @fd: the file descriptor to lock. 1908 * @cmd: the type of lock to apply. 1909 * 1910 * Apply a %FL_FLOCK style lock to an open file descriptor. 1911 * The @cmd can be one of 1912 * 1913 * %LOCK_SH -- a shared lock. 1914 * 1915 * %LOCK_EX -- an exclusive lock. 1916 * 1917 * %LOCK_UN -- remove an existing lock. 1918 * 1919 * %LOCK_MAND -- a `mandatory' flock. This exists to emulate Windows Share Modes. 1920 * 1921 * %LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other 1922 * processes read and write access respectively. 1923 */ 1924 SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd) 1925 { 1926 struct fd f = fdget(fd); 1927 struct file_lock *lock; 1928 int can_sleep, unlock; 1929 int error; 1930 1931 error = -EBADF; 1932 if (!f.file) 1933 goto out; 1934 1935 can_sleep = !(cmd & LOCK_NB); 1936 cmd &= ~LOCK_NB; 1937 unlock = (cmd == LOCK_UN); 1938 1939 if (!unlock && !(cmd & LOCK_MAND) && 1940 !(f.file->f_mode & (FMODE_READ|FMODE_WRITE))) 1941 goto out_putf; 1942 1943 lock = flock_make_lock(f.file, cmd); 1944 if (IS_ERR(lock)) { 1945 error = PTR_ERR(lock); 1946 goto out_putf; 1947 } 1948 1949 if (can_sleep) 1950 lock->fl_flags |= FL_SLEEP; 1951 1952 error = security_file_lock(f.file, lock->fl_type); 1953 if (error) 1954 goto out_free; 1955 1956 if (f.file->f_op->flock) 1957 error = f.file->f_op->flock(f.file, 1958 (can_sleep) ? F_SETLKW : F_SETLK, 1959 lock); 1960 else 1961 error = locks_lock_file_wait(f.file, lock); 1962 1963 out_free: 1964 locks_free_lock(lock); 1965 1966 out_putf: 1967 fdput(f); 1968 out: 1969 return error; 1970 } 1971 1972 /** 1973 * vfs_test_lock - test file byte range lock 1974 * @filp: The file to test lock for 1975 * @fl: The lock to test; also used to hold result 1976 * 1977 * Returns -ERRNO on failure. Indicates presence of conflicting lock by 1978 * setting conf->fl_type to something other than F_UNLCK. 1979 */ 1980 int vfs_test_lock(struct file *filp, struct file_lock *fl) 1981 { 1982 if (filp->f_op->lock) 1983 return filp->f_op->lock(filp, F_GETLK, fl); 1984 posix_test_lock(filp, fl); 1985 return 0; 1986 } 1987 EXPORT_SYMBOL_GPL(vfs_test_lock); 1988 1989 static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) 1990 { 1991 flock->l_pid = IS_OFDLCK(fl) ? -1 : fl->fl_pid; 1992 #if BITS_PER_LONG == 32 1993 /* 1994 * Make sure we can represent the posix lock via 1995 * legacy 32bit flock. 1996 */ 1997 if (fl->fl_start > OFFT_OFFSET_MAX) 1998 return -EOVERFLOW; 1999 if (fl->fl_end != OFFSET_MAX && fl->fl_end > OFFT_OFFSET_MAX) 2000 return -EOVERFLOW; 2001 #endif 2002 flock->l_start = fl->fl_start; 2003 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 2004 fl->fl_end - fl->fl_start + 1; 2005 flock->l_whence = 0; 2006 flock->l_type = fl->fl_type; 2007 return 0; 2008 } 2009 2010 #if BITS_PER_LONG == 32 2011 static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) 2012 { 2013 flock->l_pid = IS_OFDLCK(fl) ? -1 : fl->fl_pid; 2014 flock->l_start = fl->fl_start; 2015 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 2016 fl->fl_end - fl->fl_start + 1; 2017 flock->l_whence = 0; 2018 flock->l_type = fl->fl_type; 2019 } 2020 #endif 2021 2022 /* Report the first existing lock that would conflict with l. 2023 * This implements the F_GETLK command of fcntl(). 2024 */ 2025 int fcntl_getlk(struct file *filp, unsigned int cmd, struct flock __user *l) 2026 { 2027 struct file_lock file_lock; 2028 struct flock flock; 2029 int error; 2030 2031 error = -EFAULT; 2032 if (copy_from_user(&flock, l, sizeof(flock))) 2033 goto out; 2034 error = -EINVAL; 2035 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 2036 goto out; 2037 2038 error = flock_to_posix_lock(filp, &file_lock, &flock); 2039 if (error) 2040 goto out; 2041 2042 if (cmd == F_OFD_GETLK) { 2043 error = -EINVAL; 2044 if (flock.l_pid != 0) 2045 goto out; 2046 2047 cmd = F_GETLK; 2048 file_lock.fl_flags |= FL_OFDLCK; 2049 file_lock.fl_owner = filp; 2050 } 2051 2052 error = vfs_test_lock(filp, &file_lock); 2053 if (error) 2054 goto out; 2055 2056 flock.l_type = file_lock.fl_type; 2057 if (file_lock.fl_type != F_UNLCK) { 2058 error = posix_lock_to_flock(&flock, &file_lock); 2059 if (error) 2060 goto rel_priv; 2061 } 2062 error = -EFAULT; 2063 if (!copy_to_user(l, &flock, sizeof(flock))) 2064 error = 0; 2065 rel_priv: 2066 locks_release_private(&file_lock); 2067 out: 2068 return error; 2069 } 2070 2071 /** 2072 * vfs_lock_file - file byte range lock 2073 * @filp: The file to apply the lock to 2074 * @cmd: type of locking operation (F_SETLK, F_GETLK, etc.) 2075 * @fl: The lock to be applied 2076 * @conf: Place to return a copy of the conflicting lock, if found. 2077 * 2078 * A caller that doesn't care about the conflicting lock may pass NULL 2079 * as the final argument. 2080 * 2081 * If the filesystem defines a private ->lock() method, then @conf will 2082 * be left unchanged; so a caller that cares should initialize it to 2083 * some acceptable default. 2084 * 2085 * To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX 2086 * locks, the ->lock() interface may return asynchronously, before the lock has 2087 * been granted or denied by the underlying filesystem, if (and only if) 2088 * lm_grant is set. Callers expecting ->lock() to return asynchronously 2089 * will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) 2090 * the request is for a blocking lock. When ->lock() does return asynchronously, 2091 * it must return FILE_LOCK_DEFERRED, and call ->lm_grant() when the lock 2092 * request completes. 2093 * If the request is for non-blocking lock the file system should return 2094 * FILE_LOCK_DEFERRED then try to get the lock and call the callback routine 2095 * with the result. If the request timed out the callback routine will return a 2096 * nonzero return code and the file system should release the lock. The file 2097 * system is also responsible to keep a corresponding posix lock when it 2098 * grants a lock so the VFS can find out which locks are locally held and do 2099 * the correct lock cleanup when required. 2100 * The underlying filesystem must not drop the kernel lock or call 2101 * ->lm_grant() before returning to the caller with a FILE_LOCK_DEFERRED 2102 * return code. 2103 */ 2104 int vfs_lock_file(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf) 2105 { 2106 if (filp->f_op->lock) 2107 return filp->f_op->lock(filp, cmd, fl); 2108 else 2109 return posix_lock_file(filp, fl, conf); 2110 } 2111 EXPORT_SYMBOL_GPL(vfs_lock_file); 2112 2113 static int do_lock_file_wait(struct file *filp, unsigned int cmd, 2114 struct file_lock *fl) 2115 { 2116 int error; 2117 2118 error = security_file_lock(filp, fl->fl_type); 2119 if (error) 2120 return error; 2121 2122 for (;;) { 2123 error = vfs_lock_file(filp, cmd, fl, NULL); 2124 if (error != FILE_LOCK_DEFERRED) 2125 break; 2126 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 2127 if (!error) 2128 continue; 2129 2130 locks_delete_block(fl); 2131 break; 2132 } 2133 2134 return error; 2135 } 2136 2137 /* Ensure that fl->fl_file has compatible f_mode for F_SETLK calls */ 2138 static int 2139 check_fmode_for_setlk(struct file_lock *fl) 2140 { 2141 switch (fl->fl_type) { 2142 case F_RDLCK: 2143 if (!(fl->fl_file->f_mode & FMODE_READ)) 2144 return -EBADF; 2145 break; 2146 case F_WRLCK: 2147 if (!(fl->fl_file->f_mode & FMODE_WRITE)) 2148 return -EBADF; 2149 } 2150 return 0; 2151 } 2152 2153 /* Apply the lock described by l to an open file descriptor. 2154 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 2155 */ 2156 int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd, 2157 struct flock __user *l) 2158 { 2159 struct file_lock *file_lock = locks_alloc_lock(); 2160 struct flock flock; 2161 struct inode *inode; 2162 struct file *f; 2163 int error; 2164 2165 if (file_lock == NULL) 2166 return -ENOLCK; 2167 2168 /* 2169 * This might block, so we do it before checking the inode. 2170 */ 2171 error = -EFAULT; 2172 if (copy_from_user(&flock, l, sizeof(flock))) 2173 goto out; 2174 2175 inode = file_inode(filp); 2176 2177 /* Don't allow mandatory locks on files that may be memory mapped 2178 * and shared. 2179 */ 2180 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 2181 error = -EAGAIN; 2182 goto out; 2183 } 2184 2185 again: 2186 error = flock_to_posix_lock(filp, file_lock, &flock); 2187 if (error) 2188 goto out; 2189 2190 error = check_fmode_for_setlk(file_lock); 2191 if (error) 2192 goto out; 2193 2194 /* 2195 * If the cmd is requesting file-private locks, then set the 2196 * FL_OFDLCK flag and override the owner. 2197 */ 2198 switch (cmd) { 2199 case F_OFD_SETLK: 2200 error = -EINVAL; 2201 if (flock.l_pid != 0) 2202 goto out; 2203 2204 cmd = F_SETLK; 2205 file_lock->fl_flags |= FL_OFDLCK; 2206 file_lock->fl_owner = filp; 2207 break; 2208 case F_OFD_SETLKW: 2209 error = -EINVAL; 2210 if (flock.l_pid != 0) 2211 goto out; 2212 2213 cmd = F_SETLKW; 2214 file_lock->fl_flags |= FL_OFDLCK; 2215 file_lock->fl_owner = filp; 2216 /* Fallthrough */ 2217 case F_SETLKW: 2218 file_lock->fl_flags |= FL_SLEEP; 2219 } 2220 2221 error = do_lock_file_wait(filp, cmd, file_lock); 2222 2223 /* 2224 * Attempt to detect a close/fcntl race and recover by 2225 * releasing the lock that was just acquired. 2226 */ 2227 /* 2228 * we need that spin_lock here - it prevents reordering between 2229 * update of i_flctx->flc_posix and check for it done in close(). 2230 * rcu_read_lock() wouldn't do. 2231 */ 2232 spin_lock(¤t->files->file_lock); 2233 f = fcheck(fd); 2234 spin_unlock(¤t->files->file_lock); 2235 if (!error && f != filp && flock.l_type != F_UNLCK) { 2236 flock.l_type = F_UNLCK; 2237 goto again; 2238 } 2239 2240 out: 2241 locks_free_lock(file_lock); 2242 return error; 2243 } 2244 2245 #if BITS_PER_LONG == 32 2246 /* Report the first existing lock that would conflict with l. 2247 * This implements the F_GETLK command of fcntl(). 2248 */ 2249 int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 __user *l) 2250 { 2251 struct file_lock file_lock; 2252 struct flock64 flock; 2253 int error; 2254 2255 error = -EFAULT; 2256 if (copy_from_user(&flock, l, sizeof(flock))) 2257 goto out; 2258 error = -EINVAL; 2259 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 2260 goto out; 2261 2262 error = flock64_to_posix_lock(filp, &file_lock, &flock); 2263 if (error) 2264 goto out; 2265 2266 if (cmd == F_OFD_GETLK) { 2267 error = -EINVAL; 2268 if (flock.l_pid != 0) 2269 goto out; 2270 2271 cmd = F_GETLK64; 2272 file_lock.fl_flags |= FL_OFDLCK; 2273 file_lock.fl_owner = filp; 2274 } 2275 2276 error = vfs_test_lock(filp, &file_lock); 2277 if (error) 2278 goto out; 2279 2280 flock.l_type = file_lock.fl_type; 2281 if (file_lock.fl_type != F_UNLCK) 2282 posix_lock_to_flock64(&flock, &file_lock); 2283 2284 error = -EFAULT; 2285 if (!copy_to_user(l, &flock, sizeof(flock))) 2286 error = 0; 2287 2288 locks_release_private(&file_lock); 2289 out: 2290 return error; 2291 } 2292 2293 /* Apply the lock described by l to an open file descriptor. 2294 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 2295 */ 2296 int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd, 2297 struct flock64 __user *l) 2298 { 2299 struct file_lock *file_lock = locks_alloc_lock(); 2300 struct flock64 flock; 2301 struct inode *inode; 2302 struct file *f; 2303 int error; 2304 2305 if (file_lock == NULL) 2306 return -ENOLCK; 2307 2308 /* 2309 * This might block, so we do it before checking the inode. 2310 */ 2311 error = -EFAULT; 2312 if (copy_from_user(&flock, l, sizeof(flock))) 2313 goto out; 2314 2315 inode = file_inode(filp); 2316 2317 /* Don't allow mandatory locks on files that may be memory mapped 2318 * and shared. 2319 */ 2320 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 2321 error = -EAGAIN; 2322 goto out; 2323 } 2324 2325 again: 2326 error = flock64_to_posix_lock(filp, file_lock, &flock); 2327 if (error) 2328 goto out; 2329 2330 error = check_fmode_for_setlk(file_lock); 2331 if (error) 2332 goto out; 2333 2334 /* 2335 * If the cmd is requesting file-private locks, then set the 2336 * FL_OFDLCK flag and override the owner. 2337 */ 2338 switch (cmd) { 2339 case F_OFD_SETLK: 2340 error = -EINVAL; 2341 if (flock.l_pid != 0) 2342 goto out; 2343 2344 cmd = F_SETLK64; 2345 file_lock->fl_flags |= FL_OFDLCK; 2346 file_lock->fl_owner = filp; 2347 break; 2348 case F_OFD_SETLKW: 2349 error = -EINVAL; 2350 if (flock.l_pid != 0) 2351 goto out; 2352 2353 cmd = F_SETLKW64; 2354 file_lock->fl_flags |= FL_OFDLCK; 2355 file_lock->fl_owner = filp; 2356 /* Fallthrough */ 2357 case F_SETLKW64: 2358 file_lock->fl_flags |= FL_SLEEP; 2359 } 2360 2361 error = do_lock_file_wait(filp, cmd, file_lock); 2362 2363 /* 2364 * Attempt to detect a close/fcntl race and recover by 2365 * releasing the lock that was just acquired. 2366 */ 2367 spin_lock(¤t->files->file_lock); 2368 f = fcheck(fd); 2369 spin_unlock(¤t->files->file_lock); 2370 if (!error && f != filp && flock.l_type != F_UNLCK) { 2371 flock.l_type = F_UNLCK; 2372 goto again; 2373 } 2374 2375 out: 2376 locks_free_lock(file_lock); 2377 return error; 2378 } 2379 #endif /* BITS_PER_LONG == 32 */ 2380 2381 /* 2382 * This function is called when the file is being removed 2383 * from the task's fd array. POSIX locks belonging to this task 2384 * are deleted at this time. 2385 */ 2386 void locks_remove_posix(struct file *filp, fl_owner_t owner) 2387 { 2388 struct file_lock lock; 2389 struct file_lock_context *ctx; 2390 2391 /* 2392 * If there are no locks held on this file, we don't need to call 2393 * posix_lock_file(). Another process could be setting a lock on this 2394 * file at the same time, but we wouldn't remove that lock anyway. 2395 */ 2396 ctx = smp_load_acquire(&file_inode(filp)->i_flctx); 2397 if (!ctx || list_empty(&ctx->flc_posix)) 2398 return; 2399 2400 lock.fl_type = F_UNLCK; 2401 lock.fl_flags = FL_POSIX | FL_CLOSE; 2402 lock.fl_start = 0; 2403 lock.fl_end = OFFSET_MAX; 2404 lock.fl_owner = owner; 2405 lock.fl_pid = current->tgid; 2406 lock.fl_file = filp; 2407 lock.fl_ops = NULL; 2408 lock.fl_lmops = NULL; 2409 2410 vfs_lock_file(filp, F_SETLK, &lock, NULL); 2411 2412 if (lock.fl_ops && lock.fl_ops->fl_release_private) 2413 lock.fl_ops->fl_release_private(&lock); 2414 } 2415 2416 EXPORT_SYMBOL(locks_remove_posix); 2417 2418 /* The i_flctx must be valid when calling into here */ 2419 static void 2420 locks_remove_flock(struct file *filp, struct file_lock_context *flctx) 2421 { 2422 struct file_lock fl = { 2423 .fl_owner = filp, 2424 .fl_pid = current->tgid, 2425 .fl_file = filp, 2426 .fl_flags = FL_FLOCK, 2427 .fl_type = F_UNLCK, 2428 .fl_end = OFFSET_MAX, 2429 }; 2430 struct inode *inode = file_inode(filp); 2431 2432 if (list_empty(&flctx->flc_flock)) 2433 return; 2434 2435 if (filp->f_op->flock) 2436 filp->f_op->flock(filp, F_SETLKW, &fl); 2437 else 2438 flock_lock_inode(inode, &fl); 2439 2440 if (fl.fl_ops && fl.fl_ops->fl_release_private) 2441 fl.fl_ops->fl_release_private(&fl); 2442 } 2443 2444 /* The i_flctx must be valid when calling into here */ 2445 static void 2446 locks_remove_lease(struct file *filp, struct file_lock_context *ctx) 2447 { 2448 struct file_lock *fl, *tmp; 2449 LIST_HEAD(dispose); 2450 2451 if (list_empty(&ctx->flc_lease)) 2452 return; 2453 2454 spin_lock(&ctx->flc_lock); 2455 list_for_each_entry_safe(fl, tmp, &ctx->flc_lease, fl_list) 2456 if (filp == fl->fl_file) 2457 lease_modify(fl, F_UNLCK, &dispose); 2458 spin_unlock(&ctx->flc_lock); 2459 locks_dispose_list(&dispose); 2460 } 2461 2462 /* 2463 * This function is called on the last close of an open file. 2464 */ 2465 void locks_remove_file(struct file *filp) 2466 { 2467 struct file_lock_context *ctx; 2468 2469 ctx = smp_load_acquire(&file_inode(filp)->i_flctx); 2470 if (!ctx) 2471 return; 2472 2473 /* remove any OFD locks */ 2474 locks_remove_posix(filp, filp); 2475 2476 /* remove flock locks */ 2477 locks_remove_flock(filp, ctx); 2478 2479 /* remove any leases */ 2480 locks_remove_lease(filp, ctx); 2481 } 2482 2483 /** 2484 * posix_unblock_lock - stop waiting for a file lock 2485 * @waiter: the lock which was waiting 2486 * 2487 * lockd needs to block waiting for locks. 2488 */ 2489 int 2490 posix_unblock_lock(struct file_lock *waiter) 2491 { 2492 int status = 0; 2493 2494 spin_lock(&blocked_lock_lock); 2495 if (waiter->fl_next) 2496 __locks_delete_block(waiter); 2497 else 2498 status = -ENOENT; 2499 spin_unlock(&blocked_lock_lock); 2500 return status; 2501 } 2502 EXPORT_SYMBOL(posix_unblock_lock); 2503 2504 /** 2505 * vfs_cancel_lock - file byte range unblock lock 2506 * @filp: The file to apply the unblock to 2507 * @fl: The lock to be unblocked 2508 * 2509 * Used by lock managers to cancel blocked requests 2510 */ 2511 int vfs_cancel_lock(struct file *filp, struct file_lock *fl) 2512 { 2513 if (filp->f_op->lock) 2514 return filp->f_op->lock(filp, F_CANCELLK, fl); 2515 return 0; 2516 } 2517 2518 EXPORT_SYMBOL_GPL(vfs_cancel_lock); 2519 2520 #ifdef CONFIG_PROC_FS 2521 #include <linux/proc_fs.h> 2522 #include <linux/seq_file.h> 2523 2524 struct locks_iterator { 2525 int li_cpu; 2526 loff_t li_pos; 2527 }; 2528 2529 static void lock_get_status(struct seq_file *f, struct file_lock *fl, 2530 loff_t id, char *pfx) 2531 { 2532 struct inode *inode = NULL; 2533 unsigned int fl_pid; 2534 2535 if (fl->fl_nspid) 2536 fl_pid = pid_vnr(fl->fl_nspid); 2537 else 2538 fl_pid = fl->fl_pid; 2539 2540 if (fl->fl_file != NULL) 2541 inode = file_inode(fl->fl_file); 2542 2543 seq_printf(f, "%lld:%s ", id, pfx); 2544 if (IS_POSIX(fl)) { 2545 if (fl->fl_flags & FL_ACCESS) 2546 seq_puts(f, "ACCESS"); 2547 else if (IS_OFDLCK(fl)) 2548 seq_puts(f, "OFDLCK"); 2549 else 2550 seq_puts(f, "POSIX "); 2551 2552 seq_printf(f, " %s ", 2553 (inode == NULL) ? "*NOINODE*" : 2554 mandatory_lock(inode) ? "MANDATORY" : "ADVISORY "); 2555 } else if (IS_FLOCK(fl)) { 2556 if (fl->fl_type & LOCK_MAND) { 2557 seq_puts(f, "FLOCK MSNFS "); 2558 } else { 2559 seq_puts(f, "FLOCK ADVISORY "); 2560 } 2561 } else if (IS_LEASE(fl)) { 2562 if (fl->fl_flags & FL_DELEG) 2563 seq_puts(f, "DELEG "); 2564 else 2565 seq_puts(f, "LEASE "); 2566 2567 if (lease_breaking(fl)) 2568 seq_puts(f, "BREAKING "); 2569 else if (fl->fl_file) 2570 seq_puts(f, "ACTIVE "); 2571 else 2572 seq_puts(f, "BREAKER "); 2573 } else { 2574 seq_puts(f, "UNKNOWN UNKNOWN "); 2575 } 2576 if (fl->fl_type & LOCK_MAND) { 2577 seq_printf(f, "%s ", 2578 (fl->fl_type & LOCK_READ) 2579 ? (fl->fl_type & LOCK_WRITE) ? "RW " : "READ " 2580 : (fl->fl_type & LOCK_WRITE) ? "WRITE" : "NONE "); 2581 } else { 2582 seq_printf(f, "%s ", 2583 (lease_breaking(fl)) 2584 ? (fl->fl_type == F_UNLCK) ? "UNLCK" : "READ " 2585 : (fl->fl_type == F_WRLCK) ? "WRITE" : "READ "); 2586 } 2587 if (inode) { 2588 /* userspace relies on this representation of dev_t */ 2589 seq_printf(f, "%d %02x:%02x:%ld ", fl_pid, 2590 MAJOR(inode->i_sb->s_dev), 2591 MINOR(inode->i_sb->s_dev), inode->i_ino); 2592 } else { 2593 seq_printf(f, "%d <none>:0 ", fl_pid); 2594 } 2595 if (IS_POSIX(fl)) { 2596 if (fl->fl_end == OFFSET_MAX) 2597 seq_printf(f, "%Ld EOF\n", fl->fl_start); 2598 else 2599 seq_printf(f, "%Ld %Ld\n", fl->fl_start, fl->fl_end); 2600 } else { 2601 seq_puts(f, "0 EOF\n"); 2602 } 2603 } 2604 2605 static int locks_show(struct seq_file *f, void *v) 2606 { 2607 struct locks_iterator *iter = f->private; 2608 struct file_lock *fl, *bfl; 2609 2610 fl = hlist_entry(v, struct file_lock, fl_link); 2611 2612 lock_get_status(f, fl, iter->li_pos, ""); 2613 2614 list_for_each_entry(bfl, &fl->fl_block, fl_block) 2615 lock_get_status(f, bfl, iter->li_pos, " ->"); 2616 2617 return 0; 2618 } 2619 2620 static void __show_fd_locks(struct seq_file *f, 2621 struct list_head *head, int *id, 2622 struct file *filp, struct files_struct *files) 2623 { 2624 struct file_lock *fl; 2625 2626 list_for_each_entry(fl, head, fl_list) { 2627 2628 if (filp != fl->fl_file) 2629 continue; 2630 if (fl->fl_owner != files && 2631 fl->fl_owner != filp) 2632 continue; 2633 2634 (*id)++; 2635 seq_puts(f, "lock:\t"); 2636 lock_get_status(f, fl, *id, ""); 2637 } 2638 } 2639 2640 void show_fd_locks(struct seq_file *f, 2641 struct file *filp, struct files_struct *files) 2642 { 2643 struct inode *inode = file_inode(filp); 2644 struct file_lock_context *ctx; 2645 int id = 0; 2646 2647 ctx = smp_load_acquire(&inode->i_flctx); 2648 if (!ctx) 2649 return; 2650 2651 spin_lock(&ctx->flc_lock); 2652 __show_fd_locks(f, &ctx->flc_flock, &id, filp, files); 2653 __show_fd_locks(f, &ctx->flc_posix, &id, filp, files); 2654 __show_fd_locks(f, &ctx->flc_lease, &id, filp, files); 2655 spin_unlock(&ctx->flc_lock); 2656 } 2657 2658 static void *locks_start(struct seq_file *f, loff_t *pos) 2659 __acquires(&blocked_lock_lock) 2660 { 2661 struct locks_iterator *iter = f->private; 2662 2663 iter->li_pos = *pos + 1; 2664 lg_global_lock(&file_lock_lglock); 2665 spin_lock(&blocked_lock_lock); 2666 return seq_hlist_start_percpu(&file_lock_list, &iter->li_cpu, *pos); 2667 } 2668 2669 static void *locks_next(struct seq_file *f, void *v, loff_t *pos) 2670 { 2671 struct locks_iterator *iter = f->private; 2672 2673 ++iter->li_pos; 2674 return seq_hlist_next_percpu(v, &file_lock_list, &iter->li_cpu, pos); 2675 } 2676 2677 static void locks_stop(struct seq_file *f, void *v) 2678 __releases(&blocked_lock_lock) 2679 { 2680 spin_unlock(&blocked_lock_lock); 2681 lg_global_unlock(&file_lock_lglock); 2682 } 2683 2684 static const struct seq_operations locks_seq_operations = { 2685 .start = locks_start, 2686 .next = locks_next, 2687 .stop = locks_stop, 2688 .show = locks_show, 2689 }; 2690 2691 static int locks_open(struct inode *inode, struct file *filp) 2692 { 2693 return seq_open_private(filp, &locks_seq_operations, 2694 sizeof(struct locks_iterator)); 2695 } 2696 2697 static const struct file_operations proc_locks_operations = { 2698 .open = locks_open, 2699 .read = seq_read, 2700 .llseek = seq_lseek, 2701 .release = seq_release_private, 2702 }; 2703 2704 static int __init proc_locks_init(void) 2705 { 2706 proc_create("locks", 0, NULL, &proc_locks_operations); 2707 return 0; 2708 } 2709 module_init(proc_locks_init); 2710 #endif 2711 2712 static int __init filelock_init(void) 2713 { 2714 int i; 2715 2716 flctx_cache = kmem_cache_create("file_lock_ctx", 2717 sizeof(struct file_lock_context), 0, SLAB_PANIC, NULL); 2718 2719 filelock_cache = kmem_cache_create("file_lock_cache", 2720 sizeof(struct file_lock), 0, SLAB_PANIC, NULL); 2721 2722 lg_lock_init(&file_lock_lglock, "file_lock_lglock"); 2723 2724 for_each_possible_cpu(i) 2725 INIT_HLIST_HEAD(per_cpu_ptr(&file_lock_list, i)); 2726 2727 return 0; 2728 } 2729 2730 core_initcall(filelock_init); 2731