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/mandatory.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/fs.h> 120 #include <linux/init.h> 121 #include <linux/module.h> 122 #include <linux/security.h> 123 #include <linux/slab.h> 124 #include <linux/smp_lock.h> 125 #include <linux/syscalls.h> 126 #include <linux/time.h> 127 #include <linux/rcupdate.h> 128 #include <linux/pid_namespace.h> 129 130 #include <asm/uaccess.h> 131 132 #define IS_POSIX(fl) (fl->fl_flags & FL_POSIX) 133 #define IS_FLOCK(fl) (fl->fl_flags & FL_FLOCK) 134 #define IS_LEASE(fl) (fl->fl_flags & FL_LEASE) 135 136 int leases_enable = 1; 137 int lease_break_time = 45; 138 139 #define for_each_lock(inode, lockp) \ 140 for (lockp = &inode->i_flock; *lockp != NULL; lockp = &(*lockp)->fl_next) 141 142 static LIST_HEAD(file_lock_list); 143 static LIST_HEAD(blocked_list); 144 145 static struct kmem_cache *filelock_cache __read_mostly; 146 147 /* Allocate an empty lock structure. */ 148 static struct file_lock *locks_alloc_lock(void) 149 { 150 return kmem_cache_alloc(filelock_cache, GFP_KERNEL); 151 } 152 153 static void locks_release_private(struct file_lock *fl) 154 { 155 if (fl->fl_ops) { 156 if (fl->fl_ops->fl_release_private) 157 fl->fl_ops->fl_release_private(fl); 158 fl->fl_ops = NULL; 159 } 160 if (fl->fl_lmops) { 161 if (fl->fl_lmops->fl_release_private) 162 fl->fl_lmops->fl_release_private(fl); 163 fl->fl_lmops = NULL; 164 } 165 166 } 167 168 /* Free a lock which is not in use. */ 169 static void locks_free_lock(struct file_lock *fl) 170 { 171 BUG_ON(waitqueue_active(&fl->fl_wait)); 172 BUG_ON(!list_empty(&fl->fl_block)); 173 BUG_ON(!list_empty(&fl->fl_link)); 174 175 locks_release_private(fl); 176 kmem_cache_free(filelock_cache, fl); 177 } 178 179 void locks_init_lock(struct file_lock *fl) 180 { 181 INIT_LIST_HEAD(&fl->fl_link); 182 INIT_LIST_HEAD(&fl->fl_block); 183 init_waitqueue_head(&fl->fl_wait); 184 fl->fl_next = NULL; 185 fl->fl_fasync = NULL; 186 fl->fl_owner = NULL; 187 fl->fl_pid = 0; 188 fl->fl_nspid = NULL; 189 fl->fl_file = NULL; 190 fl->fl_flags = 0; 191 fl->fl_type = 0; 192 fl->fl_start = fl->fl_end = 0; 193 fl->fl_ops = NULL; 194 fl->fl_lmops = NULL; 195 } 196 197 EXPORT_SYMBOL(locks_init_lock); 198 199 /* 200 * Initialises the fields of the file lock which are invariant for 201 * free file_locks. 202 */ 203 static void init_once(struct kmem_cache *cache, void *foo) 204 { 205 struct file_lock *lock = (struct file_lock *) foo; 206 207 locks_init_lock(lock); 208 } 209 210 static void locks_copy_private(struct file_lock *new, struct file_lock *fl) 211 { 212 if (fl->fl_ops) { 213 if (fl->fl_ops->fl_copy_lock) 214 fl->fl_ops->fl_copy_lock(new, fl); 215 new->fl_ops = fl->fl_ops; 216 } 217 if (fl->fl_lmops) { 218 if (fl->fl_lmops->fl_copy_lock) 219 fl->fl_lmops->fl_copy_lock(new, fl); 220 new->fl_lmops = fl->fl_lmops; 221 } 222 } 223 224 /* 225 * Initialize a new lock from an existing file_lock structure. 226 */ 227 void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl) 228 { 229 new->fl_owner = fl->fl_owner; 230 new->fl_pid = fl->fl_pid; 231 new->fl_file = NULL; 232 new->fl_flags = fl->fl_flags; 233 new->fl_type = fl->fl_type; 234 new->fl_start = fl->fl_start; 235 new->fl_end = fl->fl_end; 236 new->fl_ops = NULL; 237 new->fl_lmops = NULL; 238 } 239 EXPORT_SYMBOL(__locks_copy_lock); 240 241 void locks_copy_lock(struct file_lock *new, struct file_lock *fl) 242 { 243 locks_release_private(new); 244 245 __locks_copy_lock(new, fl); 246 new->fl_file = fl->fl_file; 247 new->fl_ops = fl->fl_ops; 248 new->fl_lmops = fl->fl_lmops; 249 250 locks_copy_private(new, fl); 251 } 252 253 EXPORT_SYMBOL(locks_copy_lock); 254 255 static inline int flock_translate_cmd(int cmd) { 256 if (cmd & LOCK_MAND) 257 return cmd & (LOCK_MAND | LOCK_RW); 258 switch (cmd) { 259 case LOCK_SH: 260 return F_RDLCK; 261 case LOCK_EX: 262 return F_WRLCK; 263 case LOCK_UN: 264 return F_UNLCK; 265 } 266 return -EINVAL; 267 } 268 269 /* Fill in a file_lock structure with an appropriate FLOCK lock. */ 270 static int flock_make_lock(struct file *filp, struct file_lock **lock, 271 unsigned int cmd) 272 { 273 struct file_lock *fl; 274 int type = flock_translate_cmd(cmd); 275 if (type < 0) 276 return type; 277 278 fl = locks_alloc_lock(); 279 if (fl == NULL) 280 return -ENOMEM; 281 282 fl->fl_file = filp; 283 fl->fl_pid = current->tgid; 284 fl->fl_flags = FL_FLOCK; 285 fl->fl_type = type; 286 fl->fl_end = OFFSET_MAX; 287 288 *lock = fl; 289 return 0; 290 } 291 292 static int assign_type(struct file_lock *fl, int type) 293 { 294 switch (type) { 295 case F_RDLCK: 296 case F_WRLCK: 297 case F_UNLCK: 298 fl->fl_type = type; 299 break; 300 default: 301 return -EINVAL; 302 } 303 return 0; 304 } 305 306 /* Verify a "struct flock" and copy it to a "struct file_lock" as a POSIX 307 * style lock. 308 */ 309 static int flock_to_posix_lock(struct file *filp, struct file_lock *fl, 310 struct flock *l) 311 { 312 off_t start, end; 313 314 switch (l->l_whence) { 315 case SEEK_SET: 316 start = 0; 317 break; 318 case SEEK_CUR: 319 start = filp->f_pos; 320 break; 321 case SEEK_END: 322 start = i_size_read(filp->f_path.dentry->d_inode); 323 break; 324 default: 325 return -EINVAL; 326 } 327 328 /* POSIX-1996 leaves the case l->l_len < 0 undefined; 329 POSIX-2001 defines it. */ 330 start += l->l_start; 331 if (start < 0) 332 return -EINVAL; 333 fl->fl_end = OFFSET_MAX; 334 if (l->l_len > 0) { 335 end = start + l->l_len - 1; 336 fl->fl_end = end; 337 } else if (l->l_len < 0) { 338 end = start - 1; 339 fl->fl_end = end; 340 start += l->l_len; 341 if (start < 0) 342 return -EINVAL; 343 } 344 fl->fl_start = start; /* we record the absolute position */ 345 if (fl->fl_end < fl->fl_start) 346 return -EOVERFLOW; 347 348 fl->fl_owner = current->files; 349 fl->fl_pid = current->tgid; 350 fl->fl_file = filp; 351 fl->fl_flags = FL_POSIX; 352 fl->fl_ops = NULL; 353 fl->fl_lmops = NULL; 354 355 return assign_type(fl, l->l_type); 356 } 357 358 #if BITS_PER_LONG == 32 359 static int flock64_to_posix_lock(struct file *filp, struct file_lock *fl, 360 struct flock64 *l) 361 { 362 loff_t start; 363 364 switch (l->l_whence) { 365 case SEEK_SET: 366 start = 0; 367 break; 368 case SEEK_CUR: 369 start = filp->f_pos; 370 break; 371 case SEEK_END: 372 start = i_size_read(filp->f_path.dentry->d_inode); 373 break; 374 default: 375 return -EINVAL; 376 } 377 378 start += l->l_start; 379 if (start < 0) 380 return -EINVAL; 381 fl->fl_end = OFFSET_MAX; 382 if (l->l_len > 0) { 383 fl->fl_end = start + l->l_len - 1; 384 } else if (l->l_len < 0) { 385 fl->fl_end = start - 1; 386 start += l->l_len; 387 if (start < 0) 388 return -EINVAL; 389 } 390 fl->fl_start = start; /* we record the absolute position */ 391 if (fl->fl_end < fl->fl_start) 392 return -EOVERFLOW; 393 394 fl->fl_owner = current->files; 395 fl->fl_pid = current->tgid; 396 fl->fl_file = filp; 397 fl->fl_flags = FL_POSIX; 398 fl->fl_ops = NULL; 399 fl->fl_lmops = NULL; 400 401 switch (l->l_type) { 402 case F_RDLCK: 403 case F_WRLCK: 404 case F_UNLCK: 405 fl->fl_type = l->l_type; 406 break; 407 default: 408 return -EINVAL; 409 } 410 411 return (0); 412 } 413 #endif 414 415 /* default lease lock manager operations */ 416 static void lease_break_callback(struct file_lock *fl) 417 { 418 kill_fasync(&fl->fl_fasync, SIGIO, POLL_MSG); 419 } 420 421 static void lease_release_private_callback(struct file_lock *fl) 422 { 423 if (!fl->fl_file) 424 return; 425 426 f_delown(fl->fl_file); 427 fl->fl_file->f_owner.signum = 0; 428 } 429 430 static int lease_mylease_callback(struct file_lock *fl, struct file_lock *try) 431 { 432 return fl->fl_file == try->fl_file; 433 } 434 435 static struct lock_manager_operations lease_manager_ops = { 436 .fl_break = lease_break_callback, 437 .fl_release_private = lease_release_private_callback, 438 .fl_mylease = lease_mylease_callback, 439 .fl_change = lease_modify, 440 }; 441 442 /* 443 * Initialize a lease, use the default lock manager operations 444 */ 445 static int lease_init(struct file *filp, int type, struct file_lock *fl) 446 { 447 if (assign_type(fl, type) != 0) 448 return -EINVAL; 449 450 fl->fl_owner = current->files; 451 fl->fl_pid = current->tgid; 452 453 fl->fl_file = filp; 454 fl->fl_flags = FL_LEASE; 455 fl->fl_start = 0; 456 fl->fl_end = OFFSET_MAX; 457 fl->fl_ops = NULL; 458 fl->fl_lmops = &lease_manager_ops; 459 return 0; 460 } 461 462 /* Allocate a file_lock initialised to this type of lease */ 463 static struct file_lock *lease_alloc(struct file *filp, int type) 464 { 465 struct file_lock *fl = locks_alloc_lock(); 466 int error = -ENOMEM; 467 468 if (fl == NULL) 469 return ERR_PTR(error); 470 471 error = lease_init(filp, type, fl); 472 if (error) { 473 locks_free_lock(fl); 474 return ERR_PTR(error); 475 } 476 return fl; 477 } 478 479 /* Check if two locks overlap each other. 480 */ 481 static inline int locks_overlap(struct file_lock *fl1, struct file_lock *fl2) 482 { 483 return ((fl1->fl_end >= fl2->fl_start) && 484 (fl2->fl_end >= fl1->fl_start)); 485 } 486 487 /* 488 * Check whether two locks have the same owner. 489 */ 490 static int posix_same_owner(struct file_lock *fl1, struct file_lock *fl2) 491 { 492 if (fl1->fl_lmops && fl1->fl_lmops->fl_compare_owner) 493 return fl2->fl_lmops == fl1->fl_lmops && 494 fl1->fl_lmops->fl_compare_owner(fl1, fl2); 495 return fl1->fl_owner == fl2->fl_owner; 496 } 497 498 /* Remove waiter from blocker's block list. 499 * When blocker ends up pointing to itself then the list is empty. 500 */ 501 static void __locks_delete_block(struct file_lock *waiter) 502 { 503 list_del_init(&waiter->fl_block); 504 list_del_init(&waiter->fl_link); 505 waiter->fl_next = NULL; 506 } 507 508 /* 509 */ 510 static void locks_delete_block(struct file_lock *waiter) 511 { 512 lock_kernel(); 513 __locks_delete_block(waiter); 514 unlock_kernel(); 515 } 516 517 /* Insert waiter into blocker's block list. 518 * We use a circular list so that processes can be easily woken up in 519 * the order they blocked. The documentation doesn't require this but 520 * it seems like the reasonable thing to do. 521 */ 522 static void locks_insert_block(struct file_lock *blocker, 523 struct file_lock *waiter) 524 { 525 BUG_ON(!list_empty(&waiter->fl_block)); 526 list_add_tail(&waiter->fl_block, &blocker->fl_block); 527 waiter->fl_next = blocker; 528 if (IS_POSIX(blocker)) 529 list_add(&waiter->fl_link, &blocked_list); 530 } 531 532 /* Wake up processes blocked waiting for blocker. 533 * If told to wait then schedule the processes until the block list 534 * is empty, otherwise empty the block list ourselves. 535 */ 536 static void locks_wake_up_blocks(struct file_lock *blocker) 537 { 538 while (!list_empty(&blocker->fl_block)) { 539 struct file_lock *waiter; 540 541 waiter = list_first_entry(&blocker->fl_block, 542 struct file_lock, fl_block); 543 __locks_delete_block(waiter); 544 if (waiter->fl_lmops && waiter->fl_lmops->fl_notify) 545 waiter->fl_lmops->fl_notify(waiter); 546 else 547 wake_up(&waiter->fl_wait); 548 } 549 } 550 551 /* Insert file lock fl into an inode's lock list at the position indicated 552 * by pos. At the same time add the lock to the global file lock list. 553 */ 554 static void locks_insert_lock(struct file_lock **pos, struct file_lock *fl) 555 { 556 list_add(&fl->fl_link, &file_lock_list); 557 558 fl->fl_nspid = get_pid(task_tgid(current)); 559 560 /* insert into file's list */ 561 fl->fl_next = *pos; 562 *pos = fl; 563 564 if (fl->fl_ops && fl->fl_ops->fl_insert) 565 fl->fl_ops->fl_insert(fl); 566 } 567 568 /* 569 * Delete a lock and then free it. 570 * Wake up processes that are blocked waiting for this lock, 571 * notify the FS that the lock has been cleared and 572 * finally free the lock. 573 */ 574 static void locks_delete_lock(struct file_lock **thisfl_p) 575 { 576 struct file_lock *fl = *thisfl_p; 577 578 *thisfl_p = fl->fl_next; 579 fl->fl_next = NULL; 580 list_del_init(&fl->fl_link); 581 582 fasync_helper(0, fl->fl_file, 0, &fl->fl_fasync); 583 if (fl->fl_fasync != NULL) { 584 printk(KERN_ERR "locks_delete_lock: fasync == %p\n", fl->fl_fasync); 585 fl->fl_fasync = NULL; 586 } 587 588 if (fl->fl_ops && fl->fl_ops->fl_remove) 589 fl->fl_ops->fl_remove(fl); 590 591 if (fl->fl_nspid) { 592 put_pid(fl->fl_nspid); 593 fl->fl_nspid = NULL; 594 } 595 596 locks_wake_up_blocks(fl); 597 locks_free_lock(fl); 598 } 599 600 /* Determine if lock sys_fl blocks lock caller_fl. Common functionality 601 * checks for shared/exclusive status of overlapping locks. 602 */ 603 static int locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 604 { 605 if (sys_fl->fl_type == F_WRLCK) 606 return 1; 607 if (caller_fl->fl_type == F_WRLCK) 608 return 1; 609 return 0; 610 } 611 612 /* Determine if lock sys_fl blocks lock caller_fl. POSIX specific 613 * checking before calling the locks_conflict(). 614 */ 615 static int posix_locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 616 { 617 /* POSIX locks owned by the same process do not conflict with 618 * each other. 619 */ 620 if (!IS_POSIX(sys_fl) || posix_same_owner(caller_fl, sys_fl)) 621 return (0); 622 623 /* Check whether they overlap */ 624 if (!locks_overlap(caller_fl, sys_fl)) 625 return 0; 626 627 return (locks_conflict(caller_fl, sys_fl)); 628 } 629 630 /* Determine if lock sys_fl blocks lock caller_fl. FLOCK specific 631 * checking before calling the locks_conflict(). 632 */ 633 static int flock_locks_conflict(struct file_lock *caller_fl, struct file_lock *sys_fl) 634 { 635 /* FLOCK locks referring to the same filp do not conflict with 636 * each other. 637 */ 638 if (!IS_FLOCK(sys_fl) || (caller_fl->fl_file == sys_fl->fl_file)) 639 return (0); 640 if ((caller_fl->fl_type & LOCK_MAND) || (sys_fl->fl_type & LOCK_MAND)) 641 return 0; 642 643 return (locks_conflict(caller_fl, sys_fl)); 644 } 645 646 void 647 posix_test_lock(struct file *filp, struct file_lock *fl) 648 { 649 struct file_lock *cfl; 650 651 lock_kernel(); 652 for (cfl = filp->f_path.dentry->d_inode->i_flock; cfl; cfl = cfl->fl_next) { 653 if (!IS_POSIX(cfl)) 654 continue; 655 if (posix_locks_conflict(fl, cfl)) 656 break; 657 } 658 if (cfl) { 659 __locks_copy_lock(fl, cfl); 660 if (cfl->fl_nspid) 661 fl->fl_pid = pid_vnr(cfl->fl_nspid); 662 } else 663 fl->fl_type = F_UNLCK; 664 unlock_kernel(); 665 return; 666 } 667 EXPORT_SYMBOL(posix_test_lock); 668 669 /* 670 * Deadlock detection: 671 * 672 * We attempt to detect deadlocks that are due purely to posix file 673 * locks. 674 * 675 * We assume that a task can be waiting for at most one lock at a time. 676 * So for any acquired lock, the process holding that lock may be 677 * waiting on at most one other lock. That lock in turns may be held by 678 * someone waiting for at most one other lock. Given a requested lock 679 * caller_fl which is about to wait for a conflicting lock block_fl, we 680 * follow this chain of waiters to ensure we are not about to create a 681 * cycle. 682 * 683 * Since we do this before we ever put a process to sleep on a lock, we 684 * are ensured that there is never a cycle; that is what guarantees that 685 * the while() loop in posix_locks_deadlock() eventually completes. 686 * 687 * Note: the above assumption may not be true when handling lock 688 * requests from a broken NFS client. It may also fail in the presence 689 * of tasks (such as posix threads) sharing the same open file table. 690 * 691 * To handle those cases, we just bail out after a few iterations. 692 */ 693 694 #define MAX_DEADLK_ITERATIONS 10 695 696 /* Find a lock that the owner of the given block_fl is blocking on. */ 697 static struct file_lock *what_owner_is_waiting_for(struct file_lock *block_fl) 698 { 699 struct file_lock *fl; 700 701 list_for_each_entry(fl, &blocked_list, fl_link) { 702 if (posix_same_owner(fl, block_fl)) 703 return fl->fl_next; 704 } 705 return NULL; 706 } 707 708 static int posix_locks_deadlock(struct file_lock *caller_fl, 709 struct file_lock *block_fl) 710 { 711 int i = 0; 712 713 while ((block_fl = what_owner_is_waiting_for(block_fl))) { 714 if (i++ > MAX_DEADLK_ITERATIONS) 715 return 0; 716 if (posix_same_owner(caller_fl, block_fl)) 717 return 1; 718 } 719 return 0; 720 } 721 722 /* Try to create a FLOCK lock on filp. We always insert new FLOCK locks 723 * after any leases, but before any posix locks. 724 * 725 * Note that if called with an FL_EXISTS argument, the caller may determine 726 * whether or not a lock was successfully freed by testing the return 727 * value for -ENOENT. 728 */ 729 static int flock_lock_file(struct file *filp, struct file_lock *request) 730 { 731 struct file_lock *new_fl = NULL; 732 struct file_lock **before; 733 struct inode * inode = filp->f_path.dentry->d_inode; 734 int error = 0; 735 int found = 0; 736 737 lock_kernel(); 738 if (request->fl_flags & FL_ACCESS) 739 goto find_conflict; 740 741 if (request->fl_type != F_UNLCK) { 742 error = -ENOMEM; 743 new_fl = locks_alloc_lock(); 744 if (new_fl == NULL) 745 goto out; 746 error = 0; 747 } 748 749 for_each_lock(inode, before) { 750 struct file_lock *fl = *before; 751 if (IS_POSIX(fl)) 752 break; 753 if (IS_LEASE(fl)) 754 continue; 755 if (filp != fl->fl_file) 756 continue; 757 if (request->fl_type == fl->fl_type) 758 goto out; 759 found = 1; 760 locks_delete_lock(before); 761 break; 762 } 763 764 if (request->fl_type == F_UNLCK) { 765 if ((request->fl_flags & FL_EXISTS) && !found) 766 error = -ENOENT; 767 goto out; 768 } 769 770 /* 771 * If a higher-priority process was blocked on the old file lock, 772 * give it the opportunity to lock the file. 773 */ 774 if (found) 775 cond_resched(); 776 777 find_conflict: 778 for_each_lock(inode, before) { 779 struct file_lock *fl = *before; 780 if (IS_POSIX(fl)) 781 break; 782 if (IS_LEASE(fl)) 783 continue; 784 if (!flock_locks_conflict(request, fl)) 785 continue; 786 error = -EAGAIN; 787 if (request->fl_flags & FL_SLEEP) 788 locks_insert_block(fl, request); 789 goto out; 790 } 791 if (request->fl_flags & FL_ACCESS) 792 goto out; 793 locks_copy_lock(new_fl, request); 794 locks_insert_lock(before, new_fl); 795 new_fl = NULL; 796 error = 0; 797 798 out: 799 unlock_kernel(); 800 if (new_fl) 801 locks_free_lock(new_fl); 802 return error; 803 } 804 805 static int __posix_lock_file(struct inode *inode, struct file_lock *request, struct file_lock *conflock) 806 { 807 struct file_lock *fl; 808 struct file_lock *new_fl = NULL; 809 struct file_lock *new_fl2 = NULL; 810 struct file_lock *left = NULL; 811 struct file_lock *right = NULL; 812 struct file_lock **before; 813 int error, added = 0; 814 815 /* 816 * We may need two file_lock structures for this operation, 817 * so we get them in advance to avoid races. 818 * 819 * In some cases we can be sure, that no new locks will be needed 820 */ 821 if (!(request->fl_flags & FL_ACCESS) && 822 (request->fl_type != F_UNLCK || 823 request->fl_start != 0 || request->fl_end != OFFSET_MAX)) { 824 new_fl = locks_alloc_lock(); 825 new_fl2 = locks_alloc_lock(); 826 } 827 828 lock_kernel(); 829 if (request->fl_type != F_UNLCK) { 830 for_each_lock(inode, before) { 831 fl = *before; 832 if (!IS_POSIX(fl)) 833 continue; 834 if (!posix_locks_conflict(request, fl)) 835 continue; 836 if (conflock) 837 __locks_copy_lock(conflock, fl); 838 error = -EAGAIN; 839 if (!(request->fl_flags & FL_SLEEP)) 840 goto out; 841 error = -EDEADLK; 842 if (posix_locks_deadlock(request, fl)) 843 goto out; 844 error = -EAGAIN; 845 locks_insert_block(fl, request); 846 goto out; 847 } 848 } 849 850 /* If we're just looking for a conflict, we're done. */ 851 error = 0; 852 if (request->fl_flags & FL_ACCESS) 853 goto out; 854 855 /* 856 * Find the first old lock with the same owner as the new lock. 857 */ 858 859 before = &inode->i_flock; 860 861 /* First skip locks owned by other processes. */ 862 while ((fl = *before) && (!IS_POSIX(fl) || 863 !posix_same_owner(request, fl))) { 864 before = &fl->fl_next; 865 } 866 867 /* Process locks with this owner. */ 868 while ((fl = *before) && posix_same_owner(request, fl)) { 869 /* Detect adjacent or overlapping regions (if same lock type) 870 */ 871 if (request->fl_type == fl->fl_type) { 872 /* In all comparisons of start vs end, use 873 * "start - 1" rather than "end + 1". If end 874 * is OFFSET_MAX, end + 1 will become negative. 875 */ 876 if (fl->fl_end < request->fl_start - 1) 877 goto next_lock; 878 /* If the next lock in the list has entirely bigger 879 * addresses than the new one, insert the lock here. 880 */ 881 if (fl->fl_start - 1 > request->fl_end) 882 break; 883 884 /* If we come here, the new and old lock are of the 885 * same type and adjacent or overlapping. Make one 886 * lock yielding from the lower start address of both 887 * locks to the higher end address. 888 */ 889 if (fl->fl_start > request->fl_start) 890 fl->fl_start = request->fl_start; 891 else 892 request->fl_start = fl->fl_start; 893 if (fl->fl_end < request->fl_end) 894 fl->fl_end = request->fl_end; 895 else 896 request->fl_end = fl->fl_end; 897 if (added) { 898 locks_delete_lock(before); 899 continue; 900 } 901 request = fl; 902 added = 1; 903 } 904 else { 905 /* Processing for different lock types is a bit 906 * more complex. 907 */ 908 if (fl->fl_end < request->fl_start) 909 goto next_lock; 910 if (fl->fl_start > request->fl_end) 911 break; 912 if (request->fl_type == F_UNLCK) 913 added = 1; 914 if (fl->fl_start < request->fl_start) 915 left = fl; 916 /* If the next lock in the list has a higher end 917 * address than the new one, insert the new one here. 918 */ 919 if (fl->fl_end > request->fl_end) { 920 right = fl; 921 break; 922 } 923 if (fl->fl_start >= request->fl_start) { 924 /* The new lock completely replaces an old 925 * one (This may happen several times). 926 */ 927 if (added) { 928 locks_delete_lock(before); 929 continue; 930 } 931 /* Replace the old lock with the new one. 932 * Wake up anybody waiting for the old one, 933 * as the change in lock type might satisfy 934 * their needs. 935 */ 936 locks_wake_up_blocks(fl); 937 fl->fl_start = request->fl_start; 938 fl->fl_end = request->fl_end; 939 fl->fl_type = request->fl_type; 940 locks_release_private(fl); 941 locks_copy_private(fl, request); 942 request = fl; 943 added = 1; 944 } 945 } 946 /* Go on to next lock. 947 */ 948 next_lock: 949 before = &fl->fl_next; 950 } 951 952 /* 953 * The above code only modifies existing locks in case of 954 * merging or replacing. If new lock(s) need to be inserted 955 * all modifications are done bellow this, so it's safe yet to 956 * bail out. 957 */ 958 error = -ENOLCK; /* "no luck" */ 959 if (right && left == right && !new_fl2) 960 goto out; 961 962 error = 0; 963 if (!added) { 964 if (request->fl_type == F_UNLCK) { 965 if (request->fl_flags & FL_EXISTS) 966 error = -ENOENT; 967 goto out; 968 } 969 970 if (!new_fl) { 971 error = -ENOLCK; 972 goto out; 973 } 974 locks_copy_lock(new_fl, request); 975 locks_insert_lock(before, new_fl); 976 new_fl = NULL; 977 } 978 if (right) { 979 if (left == right) { 980 /* The new lock breaks the old one in two pieces, 981 * so we have to use the second new lock. 982 */ 983 left = new_fl2; 984 new_fl2 = NULL; 985 locks_copy_lock(left, right); 986 locks_insert_lock(before, left); 987 } 988 right->fl_start = request->fl_end + 1; 989 locks_wake_up_blocks(right); 990 } 991 if (left) { 992 left->fl_end = request->fl_start - 1; 993 locks_wake_up_blocks(left); 994 } 995 out: 996 unlock_kernel(); 997 /* 998 * Free any unused locks. 999 */ 1000 if (new_fl) 1001 locks_free_lock(new_fl); 1002 if (new_fl2) 1003 locks_free_lock(new_fl2); 1004 return error; 1005 } 1006 1007 /** 1008 * posix_lock_file - Apply a POSIX-style lock to a file 1009 * @filp: The file to apply the lock to 1010 * @fl: The lock to be applied 1011 * @conflock: Place to return a copy of the conflicting lock, if found. 1012 * 1013 * Add a POSIX style lock to a file. 1014 * We merge adjacent & overlapping locks whenever possible. 1015 * POSIX locks are sorted by owner task, then by starting address 1016 * 1017 * Note that if called with an FL_EXISTS argument, the caller may determine 1018 * whether or not a lock was successfully freed by testing the return 1019 * value for -ENOENT. 1020 */ 1021 int posix_lock_file(struct file *filp, struct file_lock *fl, 1022 struct file_lock *conflock) 1023 { 1024 return __posix_lock_file(filp->f_path.dentry->d_inode, fl, conflock); 1025 } 1026 EXPORT_SYMBOL(posix_lock_file); 1027 1028 /** 1029 * posix_lock_file_wait - Apply a POSIX-style lock to a file 1030 * @filp: The file to apply the lock to 1031 * @fl: The lock to be applied 1032 * 1033 * Add a POSIX style lock to a file. 1034 * We merge adjacent & overlapping locks whenever possible. 1035 * POSIX locks are sorted by owner task, then by starting address 1036 */ 1037 int posix_lock_file_wait(struct file *filp, struct file_lock *fl) 1038 { 1039 int error; 1040 might_sleep (); 1041 for (;;) { 1042 error = posix_lock_file(filp, fl, NULL); 1043 if ((error != -EAGAIN) || !(fl->fl_flags & FL_SLEEP)) 1044 break; 1045 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 1046 if (!error) 1047 continue; 1048 1049 locks_delete_block(fl); 1050 break; 1051 } 1052 return error; 1053 } 1054 EXPORT_SYMBOL(posix_lock_file_wait); 1055 1056 /** 1057 * locks_mandatory_locked - Check for an active lock 1058 * @inode: the file to check 1059 * 1060 * Searches the inode's list of locks to find any POSIX locks which conflict. 1061 * This function is called from locks_verify_locked() only. 1062 */ 1063 int locks_mandatory_locked(struct inode *inode) 1064 { 1065 fl_owner_t owner = current->files; 1066 struct file_lock *fl; 1067 1068 /* 1069 * Search the lock list for this inode for any POSIX locks. 1070 */ 1071 lock_kernel(); 1072 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) { 1073 if (!IS_POSIX(fl)) 1074 continue; 1075 if (fl->fl_owner != owner) 1076 break; 1077 } 1078 unlock_kernel(); 1079 return fl ? -EAGAIN : 0; 1080 } 1081 1082 /** 1083 * locks_mandatory_area - Check for a conflicting lock 1084 * @read_write: %FLOCK_VERIFY_WRITE for exclusive access, %FLOCK_VERIFY_READ 1085 * for shared 1086 * @inode: the file to check 1087 * @filp: how the file was opened (if it was) 1088 * @offset: start of area to check 1089 * @count: length of area to check 1090 * 1091 * Searches the inode's list of locks to find any POSIX locks which conflict. 1092 * This function is called from rw_verify_area() and 1093 * locks_verify_truncate(). 1094 */ 1095 int locks_mandatory_area(int read_write, struct inode *inode, 1096 struct file *filp, loff_t offset, 1097 size_t count) 1098 { 1099 struct file_lock fl; 1100 int error; 1101 1102 locks_init_lock(&fl); 1103 fl.fl_owner = current->files; 1104 fl.fl_pid = current->tgid; 1105 fl.fl_file = filp; 1106 fl.fl_flags = FL_POSIX | FL_ACCESS; 1107 if (filp && !(filp->f_flags & O_NONBLOCK)) 1108 fl.fl_flags |= FL_SLEEP; 1109 fl.fl_type = (read_write == FLOCK_VERIFY_WRITE) ? F_WRLCK : F_RDLCK; 1110 fl.fl_start = offset; 1111 fl.fl_end = offset + count - 1; 1112 1113 for (;;) { 1114 error = __posix_lock_file(inode, &fl, NULL); 1115 if (error != -EAGAIN) 1116 break; 1117 if (!(fl.fl_flags & FL_SLEEP)) 1118 break; 1119 error = wait_event_interruptible(fl.fl_wait, !fl.fl_next); 1120 if (!error) { 1121 /* 1122 * If we've been sleeping someone might have 1123 * changed the permissions behind our back. 1124 */ 1125 if (__mandatory_lock(inode)) 1126 continue; 1127 } 1128 1129 locks_delete_block(&fl); 1130 break; 1131 } 1132 1133 return error; 1134 } 1135 1136 EXPORT_SYMBOL(locks_mandatory_area); 1137 1138 /* We already had a lease on this file; just change its type */ 1139 int lease_modify(struct file_lock **before, int arg) 1140 { 1141 struct file_lock *fl = *before; 1142 int error = assign_type(fl, arg); 1143 1144 if (error) 1145 return error; 1146 locks_wake_up_blocks(fl); 1147 if (arg == F_UNLCK) 1148 locks_delete_lock(before); 1149 return 0; 1150 } 1151 1152 EXPORT_SYMBOL(lease_modify); 1153 1154 static void time_out_leases(struct inode *inode) 1155 { 1156 struct file_lock **before; 1157 struct file_lock *fl; 1158 1159 before = &inode->i_flock; 1160 while ((fl = *before) && IS_LEASE(fl) && (fl->fl_type & F_INPROGRESS)) { 1161 if ((fl->fl_break_time == 0) 1162 || time_before(jiffies, fl->fl_break_time)) { 1163 before = &fl->fl_next; 1164 continue; 1165 } 1166 lease_modify(before, fl->fl_type & ~F_INPROGRESS); 1167 if (fl == *before) /* lease_modify may have freed fl */ 1168 before = &fl->fl_next; 1169 } 1170 } 1171 1172 /** 1173 * __break_lease - revoke all outstanding leases on file 1174 * @inode: the inode of the file to return 1175 * @mode: the open mode (read or write) 1176 * 1177 * break_lease (inlined for speed) has checked there already is at least 1178 * some kind of lock (maybe a lease) on this file. Leases are broken on 1179 * a call to open() or truncate(). This function can sleep unless you 1180 * specified %O_NONBLOCK to your open(). 1181 */ 1182 int __break_lease(struct inode *inode, unsigned int mode) 1183 { 1184 int error = 0, future; 1185 struct file_lock *new_fl, *flock; 1186 struct file_lock *fl; 1187 unsigned long break_time; 1188 int i_have_this_lease = 0; 1189 1190 new_fl = lease_alloc(NULL, mode & FMODE_WRITE ? F_WRLCK : F_RDLCK); 1191 1192 lock_kernel(); 1193 1194 time_out_leases(inode); 1195 1196 flock = inode->i_flock; 1197 if ((flock == NULL) || !IS_LEASE(flock)) 1198 goto out; 1199 1200 for (fl = flock; fl && IS_LEASE(fl); fl = fl->fl_next) 1201 if (fl->fl_owner == current->files) 1202 i_have_this_lease = 1; 1203 1204 if (mode & FMODE_WRITE) { 1205 /* If we want write access, we have to revoke any lease. */ 1206 future = F_UNLCK | F_INPROGRESS; 1207 } else if (flock->fl_type & F_INPROGRESS) { 1208 /* If the lease is already being broken, we just leave it */ 1209 future = flock->fl_type; 1210 } else if (flock->fl_type & F_WRLCK) { 1211 /* Downgrade the exclusive lease to a read-only lease. */ 1212 future = F_RDLCK | F_INPROGRESS; 1213 } else { 1214 /* the existing lease was read-only, so we can read too. */ 1215 goto out; 1216 } 1217 1218 if (IS_ERR(new_fl) && !i_have_this_lease 1219 && ((mode & O_NONBLOCK) == 0)) { 1220 error = PTR_ERR(new_fl); 1221 goto out; 1222 } 1223 1224 break_time = 0; 1225 if (lease_break_time > 0) { 1226 break_time = jiffies + lease_break_time * HZ; 1227 if (break_time == 0) 1228 break_time++; /* so that 0 means no break time */ 1229 } 1230 1231 for (fl = flock; fl && IS_LEASE(fl); fl = fl->fl_next) { 1232 if (fl->fl_type != future) { 1233 fl->fl_type = future; 1234 fl->fl_break_time = break_time; 1235 /* lease must have lmops break callback */ 1236 fl->fl_lmops->fl_break(fl); 1237 } 1238 } 1239 1240 if (i_have_this_lease || (mode & O_NONBLOCK)) { 1241 error = -EWOULDBLOCK; 1242 goto out; 1243 } 1244 1245 restart: 1246 break_time = flock->fl_break_time; 1247 if (break_time != 0) { 1248 break_time -= jiffies; 1249 if (break_time == 0) 1250 break_time++; 1251 } 1252 locks_insert_block(flock, new_fl); 1253 error = wait_event_interruptible_timeout(new_fl->fl_wait, 1254 !new_fl->fl_next, break_time); 1255 __locks_delete_block(new_fl); 1256 if (error >= 0) { 1257 if (error == 0) 1258 time_out_leases(inode); 1259 /* Wait for the next lease that has not been broken yet */ 1260 for (flock = inode->i_flock; flock && IS_LEASE(flock); 1261 flock = flock->fl_next) { 1262 if (flock->fl_type & F_INPROGRESS) 1263 goto restart; 1264 } 1265 error = 0; 1266 } 1267 1268 out: 1269 unlock_kernel(); 1270 if (!IS_ERR(new_fl)) 1271 locks_free_lock(new_fl); 1272 return error; 1273 } 1274 1275 EXPORT_SYMBOL(__break_lease); 1276 1277 /** 1278 * lease_get_mtime - get the last modified time of an inode 1279 * @inode: the inode 1280 * @time: pointer to a timespec which will contain the last modified time 1281 * 1282 * This is to force NFS clients to flush their caches for files with 1283 * exclusive leases. The justification is that if someone has an 1284 * exclusive lease, then they could be modifying it. 1285 */ 1286 void lease_get_mtime(struct inode *inode, struct timespec *time) 1287 { 1288 struct file_lock *flock = inode->i_flock; 1289 if (flock && IS_LEASE(flock) && (flock->fl_type & F_WRLCK)) 1290 *time = current_fs_time(inode->i_sb); 1291 else 1292 *time = inode->i_mtime; 1293 } 1294 1295 EXPORT_SYMBOL(lease_get_mtime); 1296 1297 /** 1298 * fcntl_getlease - Enquire what lease is currently active 1299 * @filp: the file 1300 * 1301 * The value returned by this function will be one of 1302 * (if no lease break is pending): 1303 * 1304 * %F_RDLCK to indicate a shared lease is held. 1305 * 1306 * %F_WRLCK to indicate an exclusive lease is held. 1307 * 1308 * %F_UNLCK to indicate no lease is held. 1309 * 1310 * (if a lease break is pending): 1311 * 1312 * %F_RDLCK to indicate an exclusive lease needs to be 1313 * changed to a shared lease (or removed). 1314 * 1315 * %F_UNLCK to indicate the lease needs to be removed. 1316 * 1317 * XXX: sfr & willy disagree over whether F_INPROGRESS 1318 * should be returned to userspace. 1319 */ 1320 int fcntl_getlease(struct file *filp) 1321 { 1322 struct file_lock *fl; 1323 int type = F_UNLCK; 1324 1325 lock_kernel(); 1326 time_out_leases(filp->f_path.dentry->d_inode); 1327 for (fl = filp->f_path.dentry->d_inode->i_flock; fl && IS_LEASE(fl); 1328 fl = fl->fl_next) { 1329 if (fl->fl_file == filp) { 1330 type = fl->fl_type & ~F_INPROGRESS; 1331 break; 1332 } 1333 } 1334 unlock_kernel(); 1335 return type; 1336 } 1337 1338 /** 1339 * generic_setlease - sets a lease on an open file 1340 * @filp: file pointer 1341 * @arg: type of lease to obtain 1342 * @flp: input - file_lock to use, output - file_lock inserted 1343 * 1344 * The (input) flp->fl_lmops->fl_break function is required 1345 * by break_lease(). 1346 * 1347 * Called with kernel lock held. 1348 */ 1349 int generic_setlease(struct file *filp, long arg, struct file_lock **flp) 1350 { 1351 struct file_lock *fl, **before, **my_before = NULL, *lease; 1352 struct file_lock *new_fl = NULL; 1353 struct dentry *dentry = filp->f_path.dentry; 1354 struct inode *inode = dentry->d_inode; 1355 int error, rdlease_count = 0, wrlease_count = 0; 1356 1357 if ((current->fsuid != inode->i_uid) && !capable(CAP_LEASE)) 1358 return -EACCES; 1359 if (!S_ISREG(inode->i_mode)) 1360 return -EINVAL; 1361 error = security_file_lock(filp, arg); 1362 if (error) 1363 return error; 1364 1365 time_out_leases(inode); 1366 1367 BUG_ON(!(*flp)->fl_lmops->fl_break); 1368 1369 lease = *flp; 1370 1371 if (arg != F_UNLCK) { 1372 error = -ENOMEM; 1373 new_fl = locks_alloc_lock(); 1374 if (new_fl == NULL) 1375 goto out; 1376 1377 error = -EAGAIN; 1378 if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0)) 1379 goto out; 1380 if ((arg == F_WRLCK) 1381 && ((atomic_read(&dentry->d_count) > 1) 1382 || (atomic_read(&inode->i_count) > 1))) 1383 goto out; 1384 } 1385 1386 /* 1387 * At this point, we know that if there is an exclusive 1388 * lease on this file, then we hold it on this filp 1389 * (otherwise our open of this file would have blocked). 1390 * And if we are trying to acquire an exclusive lease, 1391 * then the file is not open by anyone (including us) 1392 * except for this filp. 1393 */ 1394 for (before = &inode->i_flock; 1395 ((fl = *before) != NULL) && IS_LEASE(fl); 1396 before = &fl->fl_next) { 1397 if (lease->fl_lmops->fl_mylease(fl, lease)) 1398 my_before = before; 1399 else if (fl->fl_type == (F_INPROGRESS | F_UNLCK)) 1400 /* 1401 * Someone is in the process of opening this 1402 * file for writing so we may not take an 1403 * exclusive lease on it. 1404 */ 1405 wrlease_count++; 1406 else 1407 rdlease_count++; 1408 } 1409 1410 error = -EAGAIN; 1411 if ((arg == F_RDLCK && (wrlease_count > 0)) || 1412 (arg == F_WRLCK && ((rdlease_count + wrlease_count) > 0))) 1413 goto out; 1414 1415 if (my_before != NULL) { 1416 *flp = *my_before; 1417 error = lease->fl_lmops->fl_change(my_before, arg); 1418 goto out; 1419 } 1420 1421 error = 0; 1422 if (arg == F_UNLCK) 1423 goto out; 1424 1425 error = -EINVAL; 1426 if (!leases_enable) 1427 goto out; 1428 1429 locks_copy_lock(new_fl, lease); 1430 locks_insert_lock(before, new_fl); 1431 1432 *flp = new_fl; 1433 return 0; 1434 1435 out: 1436 if (new_fl != NULL) 1437 locks_free_lock(new_fl); 1438 return error; 1439 } 1440 EXPORT_SYMBOL(generic_setlease); 1441 1442 /** 1443 * vfs_setlease - sets a lease on an open file 1444 * @filp: file pointer 1445 * @arg: type of lease to obtain 1446 * @lease: file_lock to use 1447 * 1448 * Call this to establish a lease on the file. 1449 * The (*lease)->fl_lmops->fl_break operation must be set; if not, 1450 * break_lease will oops! 1451 * 1452 * This will call the filesystem's setlease file method, if 1453 * defined. Note that there is no getlease method; instead, the 1454 * filesystem setlease method should call back to setlease() to 1455 * add a lease to the inode's lease list, where fcntl_getlease() can 1456 * find it. Since fcntl_getlease() only reports whether the current 1457 * task holds a lease, a cluster filesystem need only do this for 1458 * leases held by processes on this node. 1459 * 1460 * There is also no break_lease method; filesystems that 1461 * handle their own leases shoud break leases themselves from the 1462 * filesystem's open, create, and (on truncate) setattr methods. 1463 * 1464 * Warning: the only current setlease methods exist only to disable 1465 * leases in certain cases. More vfs changes may be required to 1466 * allow a full filesystem lease implementation. 1467 */ 1468 1469 int vfs_setlease(struct file *filp, long arg, struct file_lock **lease) 1470 { 1471 int error; 1472 1473 lock_kernel(); 1474 if (filp->f_op && filp->f_op->setlease) 1475 error = filp->f_op->setlease(filp, arg, lease); 1476 else 1477 error = generic_setlease(filp, arg, lease); 1478 unlock_kernel(); 1479 1480 return error; 1481 } 1482 EXPORT_SYMBOL_GPL(vfs_setlease); 1483 1484 /** 1485 * fcntl_setlease - sets a lease on an open file 1486 * @fd: open file descriptor 1487 * @filp: file pointer 1488 * @arg: type of lease to obtain 1489 * 1490 * Call this fcntl to establish a lease on the file. 1491 * Note that you also need to call %F_SETSIG to 1492 * receive a signal when the lease is broken. 1493 */ 1494 int fcntl_setlease(unsigned int fd, struct file *filp, long arg) 1495 { 1496 struct file_lock fl, *flp = &fl; 1497 struct inode *inode = filp->f_path.dentry->d_inode; 1498 int error; 1499 1500 locks_init_lock(&fl); 1501 error = lease_init(filp, arg, &fl); 1502 if (error) 1503 return error; 1504 1505 lock_kernel(); 1506 1507 error = vfs_setlease(filp, arg, &flp); 1508 if (error || arg == F_UNLCK) 1509 goto out_unlock; 1510 1511 error = fasync_helper(fd, filp, 1, &flp->fl_fasync); 1512 if (error < 0) { 1513 /* remove lease just inserted by setlease */ 1514 flp->fl_type = F_UNLCK | F_INPROGRESS; 1515 flp->fl_break_time = jiffies - 10; 1516 time_out_leases(inode); 1517 goto out_unlock; 1518 } 1519 1520 error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0); 1521 out_unlock: 1522 unlock_kernel(); 1523 return error; 1524 } 1525 1526 /** 1527 * flock_lock_file_wait - Apply a FLOCK-style lock to a file 1528 * @filp: The file to apply the lock to 1529 * @fl: The lock to be applied 1530 * 1531 * Add a FLOCK style lock to a file. 1532 */ 1533 int flock_lock_file_wait(struct file *filp, struct file_lock *fl) 1534 { 1535 int error; 1536 might_sleep(); 1537 for (;;) { 1538 error = flock_lock_file(filp, fl); 1539 if ((error != -EAGAIN) || !(fl->fl_flags & FL_SLEEP)) 1540 break; 1541 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 1542 if (!error) 1543 continue; 1544 1545 locks_delete_block(fl); 1546 break; 1547 } 1548 return error; 1549 } 1550 1551 EXPORT_SYMBOL(flock_lock_file_wait); 1552 1553 /** 1554 * sys_flock: - flock() system call. 1555 * @fd: the file descriptor to lock. 1556 * @cmd: the type of lock to apply. 1557 * 1558 * Apply a %FL_FLOCK style lock to an open file descriptor. 1559 * The @cmd can be one of 1560 * 1561 * %LOCK_SH -- a shared lock. 1562 * 1563 * %LOCK_EX -- an exclusive lock. 1564 * 1565 * %LOCK_UN -- remove an existing lock. 1566 * 1567 * %LOCK_MAND -- a `mandatory' flock. This exists to emulate Windows Share Modes. 1568 * 1569 * %LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other 1570 * processes read and write access respectively. 1571 */ 1572 asmlinkage long sys_flock(unsigned int fd, unsigned int cmd) 1573 { 1574 struct file *filp; 1575 struct file_lock *lock; 1576 int can_sleep, unlock; 1577 int error; 1578 1579 error = -EBADF; 1580 filp = fget(fd); 1581 if (!filp) 1582 goto out; 1583 1584 can_sleep = !(cmd & LOCK_NB); 1585 cmd &= ~LOCK_NB; 1586 unlock = (cmd == LOCK_UN); 1587 1588 if (!unlock && !(cmd & LOCK_MAND) && !(filp->f_mode & 3)) 1589 goto out_putf; 1590 1591 error = flock_make_lock(filp, &lock, cmd); 1592 if (error) 1593 goto out_putf; 1594 if (can_sleep) 1595 lock->fl_flags |= FL_SLEEP; 1596 1597 error = security_file_lock(filp, cmd); 1598 if (error) 1599 goto out_free; 1600 1601 if (filp->f_op && filp->f_op->flock) 1602 error = filp->f_op->flock(filp, 1603 (can_sleep) ? F_SETLKW : F_SETLK, 1604 lock); 1605 else 1606 error = flock_lock_file_wait(filp, lock); 1607 1608 out_free: 1609 locks_free_lock(lock); 1610 1611 out_putf: 1612 fput(filp); 1613 out: 1614 return error; 1615 } 1616 1617 /** 1618 * vfs_test_lock - test file byte range lock 1619 * @filp: The file to test lock for 1620 * @fl: The lock to test; also used to hold result 1621 * 1622 * Returns -ERRNO on failure. Indicates presence of conflicting lock by 1623 * setting conf->fl_type to something other than F_UNLCK. 1624 */ 1625 int vfs_test_lock(struct file *filp, struct file_lock *fl) 1626 { 1627 if (filp->f_op && filp->f_op->lock) 1628 return filp->f_op->lock(filp, F_GETLK, fl); 1629 posix_test_lock(filp, fl); 1630 return 0; 1631 } 1632 EXPORT_SYMBOL_GPL(vfs_test_lock); 1633 1634 static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) 1635 { 1636 flock->l_pid = fl->fl_pid; 1637 #if BITS_PER_LONG == 32 1638 /* 1639 * Make sure we can represent the posix lock via 1640 * legacy 32bit flock. 1641 */ 1642 if (fl->fl_start > OFFT_OFFSET_MAX) 1643 return -EOVERFLOW; 1644 if (fl->fl_end != OFFSET_MAX && fl->fl_end > OFFT_OFFSET_MAX) 1645 return -EOVERFLOW; 1646 #endif 1647 flock->l_start = fl->fl_start; 1648 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 1649 fl->fl_end - fl->fl_start + 1; 1650 flock->l_whence = 0; 1651 flock->l_type = fl->fl_type; 1652 return 0; 1653 } 1654 1655 #if BITS_PER_LONG == 32 1656 static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) 1657 { 1658 flock->l_pid = fl->fl_pid; 1659 flock->l_start = fl->fl_start; 1660 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 1661 fl->fl_end - fl->fl_start + 1; 1662 flock->l_whence = 0; 1663 flock->l_type = fl->fl_type; 1664 } 1665 #endif 1666 1667 /* Report the first existing lock that would conflict with l. 1668 * This implements the F_GETLK command of fcntl(). 1669 */ 1670 int fcntl_getlk(struct file *filp, struct flock __user *l) 1671 { 1672 struct file_lock file_lock; 1673 struct flock flock; 1674 int error; 1675 1676 error = -EFAULT; 1677 if (copy_from_user(&flock, l, sizeof(flock))) 1678 goto out; 1679 error = -EINVAL; 1680 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 1681 goto out; 1682 1683 error = flock_to_posix_lock(filp, &file_lock, &flock); 1684 if (error) 1685 goto out; 1686 1687 error = vfs_test_lock(filp, &file_lock); 1688 if (error) 1689 goto out; 1690 1691 flock.l_type = file_lock.fl_type; 1692 if (file_lock.fl_type != F_UNLCK) { 1693 error = posix_lock_to_flock(&flock, &file_lock); 1694 if (error) 1695 goto out; 1696 } 1697 error = -EFAULT; 1698 if (!copy_to_user(l, &flock, sizeof(flock))) 1699 error = 0; 1700 out: 1701 return error; 1702 } 1703 1704 /** 1705 * vfs_lock_file - file byte range lock 1706 * @filp: The file to apply the lock to 1707 * @cmd: type of locking operation (F_SETLK, F_GETLK, etc.) 1708 * @fl: The lock to be applied 1709 * @conf: Place to return a copy of the conflicting lock, if found. 1710 * 1711 * A caller that doesn't care about the conflicting lock may pass NULL 1712 * as the final argument. 1713 * 1714 * If the filesystem defines a private ->lock() method, then @conf will 1715 * be left unchanged; so a caller that cares should initialize it to 1716 * some acceptable default. 1717 * 1718 * To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX 1719 * locks, the ->lock() interface may return asynchronously, before the lock has 1720 * been granted or denied by the underlying filesystem, if (and only if) 1721 * fl_grant is set. Callers expecting ->lock() to return asynchronously 1722 * will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) 1723 * the request is for a blocking lock. When ->lock() does return asynchronously, 1724 * it must return -EINPROGRESS, and call ->fl_grant() when the lock 1725 * request completes. 1726 * If the request is for non-blocking lock the file system should return 1727 * -EINPROGRESS then try to get the lock and call the callback routine with 1728 * the result. If the request timed out the callback routine will return a 1729 * nonzero return code and the file system should release the lock. The file 1730 * system is also responsible to keep a corresponding posix lock when it 1731 * grants a lock so the VFS can find out which locks are locally held and do 1732 * the correct lock cleanup when required. 1733 * The underlying filesystem must not drop the kernel lock or call 1734 * ->fl_grant() before returning to the caller with a -EINPROGRESS 1735 * return code. 1736 */ 1737 int vfs_lock_file(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf) 1738 { 1739 if (filp->f_op && filp->f_op->lock) 1740 return filp->f_op->lock(filp, cmd, fl); 1741 else 1742 return posix_lock_file(filp, fl, conf); 1743 } 1744 EXPORT_SYMBOL_GPL(vfs_lock_file); 1745 1746 /* Apply the lock described by l to an open file descriptor. 1747 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 1748 */ 1749 int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd, 1750 struct flock __user *l) 1751 { 1752 struct file_lock *file_lock = locks_alloc_lock(); 1753 struct flock flock; 1754 struct inode *inode; 1755 int error; 1756 1757 if (file_lock == NULL) 1758 return -ENOLCK; 1759 1760 /* 1761 * This might block, so we do it before checking the inode. 1762 */ 1763 error = -EFAULT; 1764 if (copy_from_user(&flock, l, sizeof(flock))) 1765 goto out; 1766 1767 inode = filp->f_path.dentry->d_inode; 1768 1769 /* Don't allow mandatory locks on files that may be memory mapped 1770 * and shared. 1771 */ 1772 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 1773 error = -EAGAIN; 1774 goto out; 1775 } 1776 1777 again: 1778 error = flock_to_posix_lock(filp, file_lock, &flock); 1779 if (error) 1780 goto out; 1781 if (cmd == F_SETLKW) { 1782 file_lock->fl_flags |= FL_SLEEP; 1783 } 1784 1785 error = -EBADF; 1786 switch (flock.l_type) { 1787 case F_RDLCK: 1788 if (!(filp->f_mode & FMODE_READ)) 1789 goto out; 1790 break; 1791 case F_WRLCK: 1792 if (!(filp->f_mode & FMODE_WRITE)) 1793 goto out; 1794 break; 1795 case F_UNLCK: 1796 break; 1797 default: 1798 error = -EINVAL; 1799 goto out; 1800 } 1801 1802 error = security_file_lock(filp, file_lock->fl_type); 1803 if (error) 1804 goto out; 1805 1806 if (filp->f_op && filp->f_op->lock != NULL) 1807 error = filp->f_op->lock(filp, cmd, file_lock); 1808 else { 1809 for (;;) { 1810 error = posix_lock_file(filp, file_lock, NULL); 1811 if (error != -EAGAIN || cmd == F_SETLK) 1812 break; 1813 error = wait_event_interruptible(file_lock->fl_wait, 1814 !file_lock->fl_next); 1815 if (!error) 1816 continue; 1817 1818 locks_delete_block(file_lock); 1819 break; 1820 } 1821 } 1822 1823 /* 1824 * Attempt to detect a close/fcntl race and recover by 1825 * releasing the lock that was just acquired. 1826 */ 1827 if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) { 1828 flock.l_type = F_UNLCK; 1829 goto again; 1830 } 1831 1832 out: 1833 locks_free_lock(file_lock); 1834 return error; 1835 } 1836 1837 #if BITS_PER_LONG == 32 1838 /* Report the first existing lock that would conflict with l. 1839 * This implements the F_GETLK command of fcntl(). 1840 */ 1841 int fcntl_getlk64(struct file *filp, struct flock64 __user *l) 1842 { 1843 struct file_lock file_lock; 1844 struct flock64 flock; 1845 int error; 1846 1847 error = -EFAULT; 1848 if (copy_from_user(&flock, l, sizeof(flock))) 1849 goto out; 1850 error = -EINVAL; 1851 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 1852 goto out; 1853 1854 error = flock64_to_posix_lock(filp, &file_lock, &flock); 1855 if (error) 1856 goto out; 1857 1858 error = vfs_test_lock(filp, &file_lock); 1859 if (error) 1860 goto out; 1861 1862 flock.l_type = file_lock.fl_type; 1863 if (file_lock.fl_type != F_UNLCK) 1864 posix_lock_to_flock64(&flock, &file_lock); 1865 1866 error = -EFAULT; 1867 if (!copy_to_user(l, &flock, sizeof(flock))) 1868 error = 0; 1869 1870 out: 1871 return error; 1872 } 1873 1874 /* Apply the lock described by l to an open file descriptor. 1875 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 1876 */ 1877 int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd, 1878 struct flock64 __user *l) 1879 { 1880 struct file_lock *file_lock = locks_alloc_lock(); 1881 struct flock64 flock; 1882 struct inode *inode; 1883 int error; 1884 1885 if (file_lock == NULL) 1886 return -ENOLCK; 1887 1888 /* 1889 * This might block, so we do it before checking the inode. 1890 */ 1891 error = -EFAULT; 1892 if (copy_from_user(&flock, l, sizeof(flock))) 1893 goto out; 1894 1895 inode = filp->f_path.dentry->d_inode; 1896 1897 /* Don't allow mandatory locks on files that may be memory mapped 1898 * and shared. 1899 */ 1900 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 1901 error = -EAGAIN; 1902 goto out; 1903 } 1904 1905 again: 1906 error = flock64_to_posix_lock(filp, file_lock, &flock); 1907 if (error) 1908 goto out; 1909 if (cmd == F_SETLKW64) { 1910 file_lock->fl_flags |= FL_SLEEP; 1911 } 1912 1913 error = -EBADF; 1914 switch (flock.l_type) { 1915 case F_RDLCK: 1916 if (!(filp->f_mode & FMODE_READ)) 1917 goto out; 1918 break; 1919 case F_WRLCK: 1920 if (!(filp->f_mode & FMODE_WRITE)) 1921 goto out; 1922 break; 1923 case F_UNLCK: 1924 break; 1925 default: 1926 error = -EINVAL; 1927 goto out; 1928 } 1929 1930 error = security_file_lock(filp, file_lock->fl_type); 1931 if (error) 1932 goto out; 1933 1934 if (filp->f_op && filp->f_op->lock != NULL) 1935 error = filp->f_op->lock(filp, cmd, file_lock); 1936 else { 1937 for (;;) { 1938 error = posix_lock_file(filp, file_lock, NULL); 1939 if (error != -EAGAIN || cmd == F_SETLK64) 1940 break; 1941 error = wait_event_interruptible(file_lock->fl_wait, 1942 !file_lock->fl_next); 1943 if (!error) 1944 continue; 1945 1946 locks_delete_block(file_lock); 1947 break; 1948 } 1949 } 1950 1951 /* 1952 * Attempt to detect a close/fcntl race and recover by 1953 * releasing the lock that was just acquired. 1954 */ 1955 if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) { 1956 flock.l_type = F_UNLCK; 1957 goto again; 1958 } 1959 1960 out: 1961 locks_free_lock(file_lock); 1962 return error; 1963 } 1964 #endif /* BITS_PER_LONG == 32 */ 1965 1966 /* 1967 * This function is called when the file is being removed 1968 * from the task's fd array. POSIX locks belonging to this task 1969 * are deleted at this time. 1970 */ 1971 void locks_remove_posix(struct file *filp, fl_owner_t owner) 1972 { 1973 struct file_lock lock; 1974 1975 /* 1976 * If there are no locks held on this file, we don't need to call 1977 * posix_lock_file(). Another process could be setting a lock on this 1978 * file at the same time, but we wouldn't remove that lock anyway. 1979 */ 1980 if (!filp->f_path.dentry->d_inode->i_flock) 1981 return; 1982 1983 lock.fl_type = F_UNLCK; 1984 lock.fl_flags = FL_POSIX | FL_CLOSE; 1985 lock.fl_start = 0; 1986 lock.fl_end = OFFSET_MAX; 1987 lock.fl_owner = owner; 1988 lock.fl_pid = current->tgid; 1989 lock.fl_file = filp; 1990 lock.fl_ops = NULL; 1991 lock.fl_lmops = NULL; 1992 1993 vfs_lock_file(filp, F_SETLK, &lock, NULL); 1994 1995 if (lock.fl_ops && lock.fl_ops->fl_release_private) 1996 lock.fl_ops->fl_release_private(&lock); 1997 } 1998 1999 EXPORT_SYMBOL(locks_remove_posix); 2000 2001 /* 2002 * This function is called on the last close of an open file. 2003 */ 2004 void locks_remove_flock(struct file *filp) 2005 { 2006 struct inode * inode = filp->f_path.dentry->d_inode; 2007 struct file_lock *fl; 2008 struct file_lock **before; 2009 2010 if (!inode->i_flock) 2011 return; 2012 2013 if (filp->f_op && filp->f_op->flock) { 2014 struct file_lock fl = { 2015 .fl_pid = current->tgid, 2016 .fl_file = filp, 2017 .fl_flags = FL_FLOCK, 2018 .fl_type = F_UNLCK, 2019 .fl_end = OFFSET_MAX, 2020 }; 2021 filp->f_op->flock(filp, F_SETLKW, &fl); 2022 if (fl.fl_ops && fl.fl_ops->fl_release_private) 2023 fl.fl_ops->fl_release_private(&fl); 2024 } 2025 2026 lock_kernel(); 2027 before = &inode->i_flock; 2028 2029 while ((fl = *before) != NULL) { 2030 if (fl->fl_file == filp) { 2031 if (IS_FLOCK(fl)) { 2032 locks_delete_lock(before); 2033 continue; 2034 } 2035 if (IS_LEASE(fl)) { 2036 lease_modify(before, F_UNLCK); 2037 continue; 2038 } 2039 /* What? */ 2040 BUG(); 2041 } 2042 before = &fl->fl_next; 2043 } 2044 unlock_kernel(); 2045 } 2046 2047 /** 2048 * posix_unblock_lock - stop waiting for a file lock 2049 * @filp: how the file was opened 2050 * @waiter: the lock which was waiting 2051 * 2052 * lockd needs to block waiting for locks. 2053 */ 2054 int 2055 posix_unblock_lock(struct file *filp, struct file_lock *waiter) 2056 { 2057 int status = 0; 2058 2059 lock_kernel(); 2060 if (waiter->fl_next) 2061 __locks_delete_block(waiter); 2062 else 2063 status = -ENOENT; 2064 unlock_kernel(); 2065 return status; 2066 } 2067 2068 EXPORT_SYMBOL(posix_unblock_lock); 2069 2070 /** 2071 * vfs_cancel_lock - file byte range unblock lock 2072 * @filp: The file to apply the unblock to 2073 * @fl: The lock to be unblocked 2074 * 2075 * Used by lock managers to cancel blocked requests 2076 */ 2077 int vfs_cancel_lock(struct file *filp, struct file_lock *fl) 2078 { 2079 if (filp->f_op && filp->f_op->lock) 2080 return filp->f_op->lock(filp, F_CANCELLK, fl); 2081 return 0; 2082 } 2083 2084 EXPORT_SYMBOL_GPL(vfs_cancel_lock); 2085 2086 #ifdef CONFIG_PROC_FS 2087 #include <linux/seq_file.h> 2088 2089 static void lock_get_status(struct seq_file *f, struct file_lock *fl, 2090 int id, char *pfx) 2091 { 2092 struct inode *inode = NULL; 2093 unsigned int fl_pid; 2094 2095 if (fl->fl_nspid) 2096 fl_pid = pid_vnr(fl->fl_nspid); 2097 else 2098 fl_pid = fl->fl_pid; 2099 2100 if (fl->fl_file != NULL) 2101 inode = fl->fl_file->f_path.dentry->d_inode; 2102 2103 seq_printf(f, "%d:%s ", id, pfx); 2104 if (IS_POSIX(fl)) { 2105 seq_printf(f, "%6s %s ", 2106 (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ", 2107 (inode == NULL) ? "*NOINODE*" : 2108 mandatory_lock(inode) ? "MANDATORY" : "ADVISORY "); 2109 } else if (IS_FLOCK(fl)) { 2110 if (fl->fl_type & LOCK_MAND) { 2111 seq_printf(f, "FLOCK MSNFS "); 2112 } else { 2113 seq_printf(f, "FLOCK ADVISORY "); 2114 } 2115 } else if (IS_LEASE(fl)) { 2116 seq_printf(f, "LEASE "); 2117 if (fl->fl_type & F_INPROGRESS) 2118 seq_printf(f, "BREAKING "); 2119 else if (fl->fl_file) 2120 seq_printf(f, "ACTIVE "); 2121 else 2122 seq_printf(f, "BREAKER "); 2123 } else { 2124 seq_printf(f, "UNKNOWN UNKNOWN "); 2125 } 2126 if (fl->fl_type & LOCK_MAND) { 2127 seq_printf(f, "%s ", 2128 (fl->fl_type & LOCK_READ) 2129 ? (fl->fl_type & LOCK_WRITE) ? "RW " : "READ " 2130 : (fl->fl_type & LOCK_WRITE) ? "WRITE" : "NONE "); 2131 } else { 2132 seq_printf(f, "%s ", 2133 (fl->fl_type & F_INPROGRESS) 2134 ? (fl->fl_type & F_UNLCK) ? "UNLCK" : "READ " 2135 : (fl->fl_type & F_WRLCK) ? "WRITE" : "READ "); 2136 } 2137 if (inode) { 2138 #ifdef WE_CAN_BREAK_LSLK_NOW 2139 seq_printf(f, "%d %s:%ld ", fl_pid, 2140 inode->i_sb->s_id, inode->i_ino); 2141 #else 2142 /* userspace relies on this representation of dev_t ;-( */ 2143 seq_printf(f, "%d %02x:%02x:%ld ", fl_pid, 2144 MAJOR(inode->i_sb->s_dev), 2145 MINOR(inode->i_sb->s_dev), inode->i_ino); 2146 #endif 2147 } else { 2148 seq_printf(f, "%d <none>:0 ", fl_pid); 2149 } 2150 if (IS_POSIX(fl)) { 2151 if (fl->fl_end == OFFSET_MAX) 2152 seq_printf(f, "%Ld EOF\n", fl->fl_start); 2153 else 2154 seq_printf(f, "%Ld %Ld\n", fl->fl_start, fl->fl_end); 2155 } else { 2156 seq_printf(f, "0 EOF\n"); 2157 } 2158 } 2159 2160 static int locks_show(struct seq_file *f, void *v) 2161 { 2162 struct file_lock *fl, *bfl; 2163 2164 fl = list_entry(v, struct file_lock, fl_link); 2165 2166 lock_get_status(f, fl, (long)f->private, ""); 2167 2168 list_for_each_entry(bfl, &fl->fl_block, fl_block) 2169 lock_get_status(f, bfl, (long)f->private, " ->"); 2170 2171 f->private++; 2172 return 0; 2173 } 2174 2175 static void *locks_start(struct seq_file *f, loff_t *pos) 2176 { 2177 lock_kernel(); 2178 f->private = (void *)1; 2179 return seq_list_start(&file_lock_list, *pos); 2180 } 2181 2182 static void *locks_next(struct seq_file *f, void *v, loff_t *pos) 2183 { 2184 return seq_list_next(v, &file_lock_list, pos); 2185 } 2186 2187 static void locks_stop(struct seq_file *f, void *v) 2188 { 2189 unlock_kernel(); 2190 } 2191 2192 struct seq_operations locks_seq_operations = { 2193 .start = locks_start, 2194 .next = locks_next, 2195 .stop = locks_stop, 2196 .show = locks_show, 2197 }; 2198 #endif 2199 2200 /** 2201 * lock_may_read - checks that the region is free of locks 2202 * @inode: the inode that is being read 2203 * @start: the first byte to read 2204 * @len: the number of bytes to read 2205 * 2206 * Emulates Windows locking requirements. Whole-file 2207 * mandatory locks (share modes) can prohibit a read and 2208 * byte-range POSIX locks can prohibit a read if they overlap. 2209 * 2210 * N.B. this function is only ever called 2211 * from knfsd and ownership of locks is never checked. 2212 */ 2213 int lock_may_read(struct inode *inode, loff_t start, unsigned long len) 2214 { 2215 struct file_lock *fl; 2216 int result = 1; 2217 lock_kernel(); 2218 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) { 2219 if (IS_POSIX(fl)) { 2220 if (fl->fl_type == F_RDLCK) 2221 continue; 2222 if ((fl->fl_end < start) || (fl->fl_start > (start + len))) 2223 continue; 2224 } else if (IS_FLOCK(fl)) { 2225 if (!(fl->fl_type & LOCK_MAND)) 2226 continue; 2227 if (fl->fl_type & LOCK_READ) 2228 continue; 2229 } else 2230 continue; 2231 result = 0; 2232 break; 2233 } 2234 unlock_kernel(); 2235 return result; 2236 } 2237 2238 EXPORT_SYMBOL(lock_may_read); 2239 2240 /** 2241 * lock_may_write - checks that the region is free of locks 2242 * @inode: the inode that is being written 2243 * @start: the first byte to write 2244 * @len: the number of bytes to write 2245 * 2246 * Emulates Windows locking requirements. Whole-file 2247 * mandatory locks (share modes) can prohibit a write and 2248 * byte-range POSIX locks can prohibit a write if they overlap. 2249 * 2250 * N.B. this function is only ever called 2251 * from knfsd and ownership of locks is never checked. 2252 */ 2253 int lock_may_write(struct inode *inode, loff_t start, unsigned long len) 2254 { 2255 struct file_lock *fl; 2256 int result = 1; 2257 lock_kernel(); 2258 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) { 2259 if (IS_POSIX(fl)) { 2260 if ((fl->fl_end < start) || (fl->fl_start > (start + len))) 2261 continue; 2262 } else if (IS_FLOCK(fl)) { 2263 if (!(fl->fl_type & LOCK_MAND)) 2264 continue; 2265 if (fl->fl_type & LOCK_WRITE) 2266 continue; 2267 } else 2268 continue; 2269 result = 0; 2270 break; 2271 } 2272 unlock_kernel(); 2273 return result; 2274 } 2275 2276 EXPORT_SYMBOL(lock_may_write); 2277 2278 static int __init filelock_init(void) 2279 { 2280 filelock_cache = kmem_cache_create("file_lock_cache", 2281 sizeof(struct file_lock), 0, SLAB_PANIC, 2282 init_once); 2283 return 0; 2284 } 2285 2286 core_initcall(filelock_init); 2287