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/semaphore.h> 131 #include <asm/uaccess.h> 132 133 #define IS_POSIX(fl) (fl->fl_flags & FL_POSIX) 134 #define IS_FLOCK(fl) (fl->fl_flags & FL_FLOCK) 135 #define IS_LEASE(fl) (fl->fl_flags & FL_LEASE) 136 137 int leases_enable = 1; 138 int lease_break_time = 45; 139 140 #define for_each_lock(inode, lockp) \ 141 for (lockp = &inode->i_flock; *lockp != NULL; lockp = &(*lockp)->fl_next) 142 143 static LIST_HEAD(file_lock_list); 144 static LIST_HEAD(blocked_list); 145 146 static struct kmem_cache *filelock_cache __read_mostly; 147 148 /* Allocate an empty lock structure. */ 149 static struct file_lock *locks_alloc_lock(void) 150 { 151 return kmem_cache_alloc(filelock_cache, GFP_KERNEL); 152 } 153 154 static void locks_release_private(struct file_lock *fl) 155 { 156 if (fl->fl_ops) { 157 if (fl->fl_ops->fl_release_private) 158 fl->fl_ops->fl_release_private(fl); 159 fl->fl_ops = NULL; 160 } 161 if (fl->fl_lmops) { 162 if (fl->fl_lmops->fl_release_private) 163 fl->fl_lmops->fl_release_private(fl); 164 fl->fl_lmops = NULL; 165 } 166 167 } 168 169 /* Free a lock which is not in use. */ 170 static void locks_free_lock(struct file_lock *fl) 171 { 172 BUG_ON(waitqueue_active(&fl->fl_wait)); 173 BUG_ON(!list_empty(&fl->fl_block)); 174 BUG_ON(!list_empty(&fl->fl_link)); 175 176 locks_release_private(fl); 177 kmem_cache_free(filelock_cache, fl); 178 } 179 180 void locks_init_lock(struct file_lock *fl) 181 { 182 INIT_LIST_HEAD(&fl->fl_link); 183 INIT_LIST_HEAD(&fl->fl_block); 184 init_waitqueue_head(&fl->fl_wait); 185 fl->fl_next = NULL; 186 fl->fl_fasync = NULL; 187 fl->fl_owner = NULL; 188 fl->fl_pid = 0; 189 fl->fl_nspid = NULL; 190 fl->fl_file = NULL; 191 fl->fl_flags = 0; 192 fl->fl_type = 0; 193 fl->fl_start = fl->fl_end = 0; 194 fl->fl_ops = NULL; 195 fl->fl_lmops = NULL; 196 } 197 198 EXPORT_SYMBOL(locks_init_lock); 199 200 /* 201 * Initialises the fields of the file lock which are invariant for 202 * free file_locks. 203 */ 204 static void init_once(struct kmem_cache *cache, void *foo) 205 { 206 struct file_lock *lock = (struct file_lock *) foo; 207 208 locks_init_lock(lock); 209 } 210 211 static void locks_copy_private(struct file_lock *new, struct file_lock *fl) 212 { 213 if (fl->fl_ops) { 214 if (fl->fl_ops->fl_copy_lock) 215 fl->fl_ops->fl_copy_lock(new, fl); 216 new->fl_ops = fl->fl_ops; 217 } 218 if (fl->fl_lmops) { 219 if (fl->fl_lmops->fl_copy_lock) 220 fl->fl_lmops->fl_copy_lock(new, fl); 221 new->fl_lmops = fl->fl_lmops; 222 } 223 } 224 225 /* 226 * Initialize a new lock from an existing file_lock structure. 227 */ 228 static void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl) 229 { 230 new->fl_owner = fl->fl_owner; 231 new->fl_pid = fl->fl_pid; 232 new->fl_file = NULL; 233 new->fl_flags = fl->fl_flags; 234 new->fl_type = fl->fl_type; 235 new->fl_start = fl->fl_start; 236 new->fl_end = fl->fl_end; 237 new->fl_ops = NULL; 238 new->fl_lmops = NULL; 239 } 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 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 modifiying 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 error = -EAGAIN; 1372 if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0)) 1373 goto out; 1374 if ((arg == F_WRLCK) 1375 && ((atomic_read(&dentry->d_count) > 1) 1376 || (atomic_read(&inode->i_count) > 1))) 1377 goto out; 1378 1379 error = -ENOMEM; 1380 new_fl = locks_alloc_lock(); 1381 if (new_fl == NULL) 1382 goto out; 1383 1384 /* 1385 * At this point, we know that if there is an exclusive 1386 * lease on this file, then we hold it on this filp 1387 * (otherwise our open of this file would have blocked). 1388 * And if we are trying to acquire an exclusive lease, 1389 * then the file is not open by anyone (including us) 1390 * except for this filp. 1391 */ 1392 for (before = &inode->i_flock; 1393 ((fl = *before) != NULL) && IS_LEASE(fl); 1394 before = &fl->fl_next) { 1395 if (lease->fl_lmops->fl_mylease(fl, lease)) 1396 my_before = before; 1397 else if (fl->fl_type == (F_INPROGRESS | F_UNLCK)) 1398 /* 1399 * Someone is in the process of opening this 1400 * file for writing so we may not take an 1401 * exclusive lease on it. 1402 */ 1403 wrlease_count++; 1404 else 1405 rdlease_count++; 1406 } 1407 1408 if ((arg == F_RDLCK && (wrlease_count > 0)) || 1409 (arg == F_WRLCK && ((rdlease_count + wrlease_count) > 0))) 1410 goto out; 1411 1412 if (my_before != NULL) { 1413 *flp = *my_before; 1414 error = lease->fl_lmops->fl_change(my_before, arg); 1415 goto out; 1416 } 1417 1418 error = 0; 1419 if (arg == F_UNLCK) 1420 goto out; 1421 1422 error = -EINVAL; 1423 if (!leases_enable) 1424 goto out; 1425 1426 locks_copy_lock(new_fl, lease); 1427 locks_insert_lock(before, new_fl); 1428 1429 *flp = new_fl; 1430 return 0; 1431 1432 out: 1433 if (new_fl != NULL) 1434 locks_free_lock(new_fl); 1435 return error; 1436 } 1437 EXPORT_SYMBOL(generic_setlease); 1438 1439 /** 1440 * vfs_setlease - sets a lease on an open file 1441 * @filp: file pointer 1442 * @arg: type of lease to obtain 1443 * @lease: file_lock to use 1444 * 1445 * Call this to establish a lease on the file. 1446 * The (*lease)->fl_lmops->fl_break operation must be set; if not, 1447 * break_lease will oops! 1448 * 1449 * This will call the filesystem's setlease file method, if 1450 * defined. Note that there is no getlease method; instead, the 1451 * filesystem setlease method should call back to setlease() to 1452 * add a lease to the inode's lease list, where fcntl_getlease() can 1453 * find it. Since fcntl_getlease() only reports whether the current 1454 * task holds a lease, a cluster filesystem need only do this for 1455 * leases held by processes on this node. 1456 * 1457 * There is also no break_lease method; filesystems that 1458 * handle their own leases shoud break leases themselves from the 1459 * filesystem's open, create, and (on truncate) setattr methods. 1460 * 1461 * Warning: the only current setlease methods exist only to disable 1462 * leases in certain cases. More vfs changes may be required to 1463 * allow a full filesystem lease implementation. 1464 */ 1465 1466 int vfs_setlease(struct file *filp, long arg, struct file_lock **lease) 1467 { 1468 int error; 1469 1470 lock_kernel(); 1471 if (filp->f_op && filp->f_op->setlease) 1472 error = filp->f_op->setlease(filp, arg, lease); 1473 else 1474 error = generic_setlease(filp, arg, lease); 1475 unlock_kernel(); 1476 1477 return error; 1478 } 1479 EXPORT_SYMBOL_GPL(vfs_setlease); 1480 1481 /** 1482 * fcntl_setlease - sets a lease on an open file 1483 * @fd: open file descriptor 1484 * @filp: file pointer 1485 * @arg: type of lease to obtain 1486 * 1487 * Call this fcntl to establish a lease on the file. 1488 * Note that you also need to call %F_SETSIG to 1489 * receive a signal when the lease is broken. 1490 */ 1491 int fcntl_setlease(unsigned int fd, struct file *filp, long arg) 1492 { 1493 struct file_lock fl, *flp = &fl; 1494 struct dentry *dentry = filp->f_path.dentry; 1495 struct inode *inode = dentry->d_inode; 1496 int error; 1497 1498 locks_init_lock(&fl); 1499 error = lease_init(filp, arg, &fl); 1500 if (error) 1501 return error; 1502 1503 lock_kernel(); 1504 1505 error = vfs_setlease(filp, arg, &flp); 1506 if (error || arg == F_UNLCK) 1507 goto out_unlock; 1508 1509 error = fasync_helper(fd, filp, 1, &flp->fl_fasync); 1510 if (error < 0) { 1511 /* remove lease just inserted by setlease */ 1512 flp->fl_type = F_UNLCK | F_INPROGRESS; 1513 flp->fl_break_time = jiffies - 10; 1514 time_out_leases(inode); 1515 goto out_unlock; 1516 } 1517 1518 error = __f_setown(filp, task_pid(current), PIDTYPE_PID, 0); 1519 out_unlock: 1520 unlock_kernel(); 1521 return error; 1522 } 1523 1524 /** 1525 * flock_lock_file_wait - Apply a FLOCK-style lock to a file 1526 * @filp: The file to apply the lock to 1527 * @fl: The lock to be applied 1528 * 1529 * Add a FLOCK style lock to a file. 1530 */ 1531 int flock_lock_file_wait(struct file *filp, struct file_lock *fl) 1532 { 1533 int error; 1534 might_sleep(); 1535 for (;;) { 1536 error = flock_lock_file(filp, fl); 1537 if ((error != -EAGAIN) || !(fl->fl_flags & FL_SLEEP)) 1538 break; 1539 error = wait_event_interruptible(fl->fl_wait, !fl->fl_next); 1540 if (!error) 1541 continue; 1542 1543 locks_delete_block(fl); 1544 break; 1545 } 1546 return error; 1547 } 1548 1549 EXPORT_SYMBOL(flock_lock_file_wait); 1550 1551 /** 1552 * sys_flock: - flock() system call. 1553 * @fd: the file descriptor to lock. 1554 * @cmd: the type of lock to apply. 1555 * 1556 * Apply a %FL_FLOCK style lock to an open file descriptor. 1557 * The @cmd can be one of 1558 * 1559 * %LOCK_SH -- a shared lock. 1560 * 1561 * %LOCK_EX -- an exclusive lock. 1562 * 1563 * %LOCK_UN -- remove an existing lock. 1564 * 1565 * %LOCK_MAND -- a `mandatory' flock. This exists to emulate Windows Share Modes. 1566 * 1567 * %LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other 1568 * processes read and write access respectively. 1569 */ 1570 asmlinkage long sys_flock(unsigned int fd, unsigned int cmd) 1571 { 1572 struct file *filp; 1573 struct file_lock *lock; 1574 int can_sleep, unlock; 1575 int error; 1576 1577 error = -EBADF; 1578 filp = fget(fd); 1579 if (!filp) 1580 goto out; 1581 1582 can_sleep = !(cmd & LOCK_NB); 1583 cmd &= ~LOCK_NB; 1584 unlock = (cmd == LOCK_UN); 1585 1586 if (!unlock && !(cmd & LOCK_MAND) && !(filp->f_mode & 3)) 1587 goto out_putf; 1588 1589 error = flock_make_lock(filp, &lock, cmd); 1590 if (error) 1591 goto out_putf; 1592 if (can_sleep) 1593 lock->fl_flags |= FL_SLEEP; 1594 1595 error = security_file_lock(filp, cmd); 1596 if (error) 1597 goto out_free; 1598 1599 if (filp->f_op && filp->f_op->flock) 1600 error = filp->f_op->flock(filp, 1601 (can_sleep) ? F_SETLKW : F_SETLK, 1602 lock); 1603 else 1604 error = flock_lock_file_wait(filp, lock); 1605 1606 out_free: 1607 locks_free_lock(lock); 1608 1609 out_putf: 1610 fput(filp); 1611 out: 1612 return error; 1613 } 1614 1615 /** 1616 * vfs_test_lock - test file byte range lock 1617 * @filp: The file to test lock for 1618 * @fl: The lock to test; also used to hold result 1619 * 1620 * Returns -ERRNO on failure. Indicates presence of conflicting lock by 1621 * setting conf->fl_type to something other than F_UNLCK. 1622 */ 1623 int vfs_test_lock(struct file *filp, struct file_lock *fl) 1624 { 1625 if (filp->f_op && filp->f_op->lock) 1626 return filp->f_op->lock(filp, F_GETLK, fl); 1627 posix_test_lock(filp, fl); 1628 return 0; 1629 } 1630 EXPORT_SYMBOL_GPL(vfs_test_lock); 1631 1632 static int posix_lock_to_flock(struct flock *flock, struct file_lock *fl) 1633 { 1634 flock->l_pid = fl->fl_pid; 1635 #if BITS_PER_LONG == 32 1636 /* 1637 * Make sure we can represent the posix lock via 1638 * legacy 32bit flock. 1639 */ 1640 if (fl->fl_start > OFFT_OFFSET_MAX) 1641 return -EOVERFLOW; 1642 if (fl->fl_end != OFFSET_MAX && fl->fl_end > OFFT_OFFSET_MAX) 1643 return -EOVERFLOW; 1644 #endif 1645 flock->l_start = fl->fl_start; 1646 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 1647 fl->fl_end - fl->fl_start + 1; 1648 flock->l_whence = 0; 1649 flock->l_type = fl->fl_type; 1650 return 0; 1651 } 1652 1653 #if BITS_PER_LONG == 32 1654 static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl) 1655 { 1656 flock->l_pid = fl->fl_pid; 1657 flock->l_start = fl->fl_start; 1658 flock->l_len = fl->fl_end == OFFSET_MAX ? 0 : 1659 fl->fl_end - fl->fl_start + 1; 1660 flock->l_whence = 0; 1661 flock->l_type = fl->fl_type; 1662 } 1663 #endif 1664 1665 /* Report the first existing lock that would conflict with l. 1666 * This implements the F_GETLK command of fcntl(). 1667 */ 1668 int fcntl_getlk(struct file *filp, struct flock __user *l) 1669 { 1670 struct file_lock file_lock; 1671 struct flock flock; 1672 int error; 1673 1674 error = -EFAULT; 1675 if (copy_from_user(&flock, l, sizeof(flock))) 1676 goto out; 1677 error = -EINVAL; 1678 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 1679 goto out; 1680 1681 error = flock_to_posix_lock(filp, &file_lock, &flock); 1682 if (error) 1683 goto out; 1684 1685 error = vfs_test_lock(filp, &file_lock); 1686 if (error) 1687 goto out; 1688 1689 flock.l_type = file_lock.fl_type; 1690 if (file_lock.fl_type != F_UNLCK) { 1691 error = posix_lock_to_flock(&flock, &file_lock); 1692 if (error) 1693 goto out; 1694 } 1695 error = -EFAULT; 1696 if (!copy_to_user(l, &flock, sizeof(flock))) 1697 error = 0; 1698 out: 1699 return error; 1700 } 1701 1702 /** 1703 * vfs_lock_file - file byte range lock 1704 * @filp: The file to apply the lock to 1705 * @cmd: type of locking operation (F_SETLK, F_GETLK, etc.) 1706 * @fl: The lock to be applied 1707 * @conf: Place to return a copy of the conflicting lock, if found. 1708 * 1709 * A caller that doesn't care about the conflicting lock may pass NULL 1710 * as the final argument. 1711 * 1712 * If the filesystem defines a private ->lock() method, then @conf will 1713 * be left unchanged; so a caller that cares should initialize it to 1714 * some acceptable default. 1715 * 1716 * To avoid blocking kernel daemons, such as lockd, that need to acquire POSIX 1717 * locks, the ->lock() interface may return asynchronously, before the lock has 1718 * been granted or denied by the underlying filesystem, if (and only if) 1719 * fl_grant is set. Callers expecting ->lock() to return asynchronously 1720 * will only use F_SETLK, not F_SETLKW; they will set FL_SLEEP if (and only if) 1721 * the request is for a blocking lock. When ->lock() does return asynchronously, 1722 * it must return -EINPROGRESS, and call ->fl_grant() when the lock 1723 * request completes. 1724 * If the request is for non-blocking lock the file system should return 1725 * -EINPROGRESS then try to get the lock and call the callback routine with 1726 * the result. If the request timed out the callback routine will return a 1727 * nonzero return code and the file system should release the lock. The file 1728 * system is also responsible to keep a corresponding posix lock when it 1729 * grants a lock so the VFS can find out which locks are locally held and do 1730 * the correct lock cleanup when required. 1731 * The underlying filesystem must not drop the kernel lock or call 1732 * ->fl_grant() before returning to the caller with a -EINPROGRESS 1733 * return code. 1734 */ 1735 int vfs_lock_file(struct file *filp, unsigned int cmd, struct file_lock *fl, struct file_lock *conf) 1736 { 1737 if (filp->f_op && filp->f_op->lock) 1738 return filp->f_op->lock(filp, cmd, fl); 1739 else 1740 return posix_lock_file(filp, fl, conf); 1741 } 1742 EXPORT_SYMBOL_GPL(vfs_lock_file); 1743 1744 /* Apply the lock described by l to an open file descriptor. 1745 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 1746 */ 1747 int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd, 1748 struct flock __user *l) 1749 { 1750 struct file_lock *file_lock = locks_alloc_lock(); 1751 struct flock flock; 1752 struct inode *inode; 1753 int error; 1754 1755 if (file_lock == NULL) 1756 return -ENOLCK; 1757 1758 /* 1759 * This might block, so we do it before checking the inode. 1760 */ 1761 error = -EFAULT; 1762 if (copy_from_user(&flock, l, sizeof(flock))) 1763 goto out; 1764 1765 inode = filp->f_path.dentry->d_inode; 1766 1767 /* Don't allow mandatory locks on files that may be memory mapped 1768 * and shared. 1769 */ 1770 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 1771 error = -EAGAIN; 1772 goto out; 1773 } 1774 1775 again: 1776 error = flock_to_posix_lock(filp, file_lock, &flock); 1777 if (error) 1778 goto out; 1779 if (cmd == F_SETLKW) { 1780 file_lock->fl_flags |= FL_SLEEP; 1781 } 1782 1783 error = -EBADF; 1784 switch (flock.l_type) { 1785 case F_RDLCK: 1786 if (!(filp->f_mode & FMODE_READ)) 1787 goto out; 1788 break; 1789 case F_WRLCK: 1790 if (!(filp->f_mode & FMODE_WRITE)) 1791 goto out; 1792 break; 1793 case F_UNLCK: 1794 break; 1795 default: 1796 error = -EINVAL; 1797 goto out; 1798 } 1799 1800 error = security_file_lock(filp, file_lock->fl_type); 1801 if (error) 1802 goto out; 1803 1804 for (;;) { 1805 error = vfs_lock_file(filp, cmd, file_lock, NULL); 1806 if (error != -EAGAIN || cmd == F_SETLK) 1807 break; 1808 error = wait_event_interruptible(file_lock->fl_wait, 1809 !file_lock->fl_next); 1810 if (!error) 1811 continue; 1812 1813 locks_delete_block(file_lock); 1814 break; 1815 } 1816 1817 /* 1818 * Attempt to detect a close/fcntl race and recover by 1819 * releasing the lock that was just acquired. 1820 */ 1821 if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) { 1822 flock.l_type = F_UNLCK; 1823 goto again; 1824 } 1825 1826 out: 1827 locks_free_lock(file_lock); 1828 return error; 1829 } 1830 1831 #if BITS_PER_LONG == 32 1832 /* Report the first existing lock that would conflict with l. 1833 * This implements the F_GETLK command of fcntl(). 1834 */ 1835 int fcntl_getlk64(struct file *filp, struct flock64 __user *l) 1836 { 1837 struct file_lock file_lock; 1838 struct flock64 flock; 1839 int error; 1840 1841 error = -EFAULT; 1842 if (copy_from_user(&flock, l, sizeof(flock))) 1843 goto out; 1844 error = -EINVAL; 1845 if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK)) 1846 goto out; 1847 1848 error = flock64_to_posix_lock(filp, &file_lock, &flock); 1849 if (error) 1850 goto out; 1851 1852 error = vfs_test_lock(filp, &file_lock); 1853 if (error) 1854 goto out; 1855 1856 flock.l_type = file_lock.fl_type; 1857 if (file_lock.fl_type != F_UNLCK) 1858 posix_lock_to_flock64(&flock, &file_lock); 1859 1860 error = -EFAULT; 1861 if (!copy_to_user(l, &flock, sizeof(flock))) 1862 error = 0; 1863 1864 out: 1865 return error; 1866 } 1867 1868 /* Apply the lock described by l to an open file descriptor. 1869 * This implements both the F_SETLK and F_SETLKW commands of fcntl(). 1870 */ 1871 int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd, 1872 struct flock64 __user *l) 1873 { 1874 struct file_lock *file_lock = locks_alloc_lock(); 1875 struct flock64 flock; 1876 struct inode *inode; 1877 int error; 1878 1879 if (file_lock == NULL) 1880 return -ENOLCK; 1881 1882 /* 1883 * This might block, so we do it before checking the inode. 1884 */ 1885 error = -EFAULT; 1886 if (copy_from_user(&flock, l, sizeof(flock))) 1887 goto out; 1888 1889 inode = filp->f_path.dentry->d_inode; 1890 1891 /* Don't allow mandatory locks on files that may be memory mapped 1892 * and shared. 1893 */ 1894 if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { 1895 error = -EAGAIN; 1896 goto out; 1897 } 1898 1899 again: 1900 error = flock64_to_posix_lock(filp, file_lock, &flock); 1901 if (error) 1902 goto out; 1903 if (cmd == F_SETLKW64) { 1904 file_lock->fl_flags |= FL_SLEEP; 1905 } 1906 1907 error = -EBADF; 1908 switch (flock.l_type) { 1909 case F_RDLCK: 1910 if (!(filp->f_mode & FMODE_READ)) 1911 goto out; 1912 break; 1913 case F_WRLCK: 1914 if (!(filp->f_mode & FMODE_WRITE)) 1915 goto out; 1916 break; 1917 case F_UNLCK: 1918 break; 1919 default: 1920 error = -EINVAL; 1921 goto out; 1922 } 1923 1924 error = security_file_lock(filp, file_lock->fl_type); 1925 if (error) 1926 goto out; 1927 1928 for (;;) { 1929 error = vfs_lock_file(filp, cmd, file_lock, NULL); 1930 if (error != -EAGAIN || cmd == F_SETLK64) 1931 break; 1932 error = wait_event_interruptible(file_lock->fl_wait, 1933 !file_lock->fl_next); 1934 if (!error) 1935 continue; 1936 1937 locks_delete_block(file_lock); 1938 break; 1939 } 1940 1941 /* 1942 * Attempt to detect a close/fcntl race and recover by 1943 * releasing the lock that was just acquired. 1944 */ 1945 if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) { 1946 flock.l_type = F_UNLCK; 1947 goto again; 1948 } 1949 1950 out: 1951 locks_free_lock(file_lock); 1952 return error; 1953 } 1954 #endif /* BITS_PER_LONG == 32 */ 1955 1956 /* 1957 * This function is called when the file is being removed 1958 * from the task's fd array. POSIX locks belonging to this task 1959 * are deleted at this time. 1960 */ 1961 void locks_remove_posix(struct file *filp, fl_owner_t owner) 1962 { 1963 struct file_lock lock; 1964 1965 /* 1966 * If there are no locks held on this file, we don't need to call 1967 * posix_lock_file(). Another process could be setting a lock on this 1968 * file at the same time, but we wouldn't remove that lock anyway. 1969 */ 1970 if (!filp->f_path.dentry->d_inode->i_flock) 1971 return; 1972 1973 lock.fl_type = F_UNLCK; 1974 lock.fl_flags = FL_POSIX | FL_CLOSE; 1975 lock.fl_start = 0; 1976 lock.fl_end = OFFSET_MAX; 1977 lock.fl_owner = owner; 1978 lock.fl_pid = current->tgid; 1979 lock.fl_file = filp; 1980 lock.fl_ops = NULL; 1981 lock.fl_lmops = NULL; 1982 1983 vfs_lock_file(filp, F_SETLK, &lock, NULL); 1984 1985 if (lock.fl_ops && lock.fl_ops->fl_release_private) 1986 lock.fl_ops->fl_release_private(&lock); 1987 } 1988 1989 EXPORT_SYMBOL(locks_remove_posix); 1990 1991 /* 1992 * This function is called on the last close of an open file. 1993 */ 1994 void locks_remove_flock(struct file *filp) 1995 { 1996 struct inode * inode = filp->f_path.dentry->d_inode; 1997 struct file_lock *fl; 1998 struct file_lock **before; 1999 2000 if (!inode->i_flock) 2001 return; 2002 2003 if (filp->f_op && filp->f_op->flock) { 2004 struct file_lock fl = { 2005 .fl_pid = current->tgid, 2006 .fl_file = filp, 2007 .fl_flags = FL_FLOCK, 2008 .fl_type = F_UNLCK, 2009 .fl_end = OFFSET_MAX, 2010 }; 2011 filp->f_op->flock(filp, F_SETLKW, &fl); 2012 if (fl.fl_ops && fl.fl_ops->fl_release_private) 2013 fl.fl_ops->fl_release_private(&fl); 2014 } 2015 2016 lock_kernel(); 2017 before = &inode->i_flock; 2018 2019 while ((fl = *before) != NULL) { 2020 if (fl->fl_file == filp) { 2021 if (IS_FLOCK(fl)) { 2022 locks_delete_lock(before); 2023 continue; 2024 } 2025 if (IS_LEASE(fl)) { 2026 lease_modify(before, F_UNLCK); 2027 continue; 2028 } 2029 /* What? */ 2030 BUG(); 2031 } 2032 before = &fl->fl_next; 2033 } 2034 unlock_kernel(); 2035 } 2036 2037 /** 2038 * posix_unblock_lock - stop waiting for a file lock 2039 * @filp: how the file was opened 2040 * @waiter: the lock which was waiting 2041 * 2042 * lockd needs to block waiting for locks. 2043 */ 2044 int 2045 posix_unblock_lock(struct file *filp, struct file_lock *waiter) 2046 { 2047 int status = 0; 2048 2049 lock_kernel(); 2050 if (waiter->fl_next) 2051 __locks_delete_block(waiter); 2052 else 2053 status = -ENOENT; 2054 unlock_kernel(); 2055 return status; 2056 } 2057 2058 EXPORT_SYMBOL(posix_unblock_lock); 2059 2060 /** 2061 * vfs_cancel_lock - file byte range unblock lock 2062 * @filp: The file to apply the unblock to 2063 * @fl: The lock to be unblocked 2064 * 2065 * Used by lock managers to cancel blocked requests 2066 */ 2067 int vfs_cancel_lock(struct file *filp, struct file_lock *fl) 2068 { 2069 if (filp->f_op && filp->f_op->lock) 2070 return filp->f_op->lock(filp, F_CANCELLK, fl); 2071 return 0; 2072 } 2073 2074 EXPORT_SYMBOL_GPL(vfs_cancel_lock); 2075 2076 #ifdef CONFIG_PROC_FS 2077 #include <linux/seq_file.h> 2078 2079 static void lock_get_status(struct seq_file *f, struct file_lock *fl, 2080 int id, char *pfx) 2081 { 2082 struct inode *inode = NULL; 2083 unsigned int fl_pid; 2084 2085 if (fl->fl_nspid) 2086 fl_pid = pid_vnr(fl->fl_nspid); 2087 else 2088 fl_pid = fl->fl_pid; 2089 2090 if (fl->fl_file != NULL) 2091 inode = fl->fl_file->f_path.dentry->d_inode; 2092 2093 seq_printf(f, "%d:%s ", id, pfx); 2094 if (IS_POSIX(fl)) { 2095 seq_printf(f, "%6s %s ", 2096 (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ", 2097 (inode == NULL) ? "*NOINODE*" : 2098 mandatory_lock(inode) ? "MANDATORY" : "ADVISORY "); 2099 } else if (IS_FLOCK(fl)) { 2100 if (fl->fl_type & LOCK_MAND) { 2101 seq_printf(f, "FLOCK MSNFS "); 2102 } else { 2103 seq_printf(f, "FLOCK ADVISORY "); 2104 } 2105 } else if (IS_LEASE(fl)) { 2106 seq_printf(f, "LEASE "); 2107 if (fl->fl_type & F_INPROGRESS) 2108 seq_printf(f, "BREAKING "); 2109 else if (fl->fl_file) 2110 seq_printf(f, "ACTIVE "); 2111 else 2112 seq_printf(f, "BREAKER "); 2113 } else { 2114 seq_printf(f, "UNKNOWN UNKNOWN "); 2115 } 2116 if (fl->fl_type & LOCK_MAND) { 2117 seq_printf(f, "%s ", 2118 (fl->fl_type & LOCK_READ) 2119 ? (fl->fl_type & LOCK_WRITE) ? "RW " : "READ " 2120 : (fl->fl_type & LOCK_WRITE) ? "WRITE" : "NONE "); 2121 } else { 2122 seq_printf(f, "%s ", 2123 (fl->fl_type & F_INPROGRESS) 2124 ? (fl->fl_type & F_UNLCK) ? "UNLCK" : "READ " 2125 : (fl->fl_type & F_WRLCK) ? "WRITE" : "READ "); 2126 } 2127 if (inode) { 2128 #ifdef WE_CAN_BREAK_LSLK_NOW 2129 seq_printf(f, "%d %s:%ld ", fl_pid, 2130 inode->i_sb->s_id, inode->i_ino); 2131 #else 2132 /* userspace relies on this representation of dev_t ;-( */ 2133 seq_printf(f, "%d %02x:%02x:%ld ", fl_pid, 2134 MAJOR(inode->i_sb->s_dev), 2135 MINOR(inode->i_sb->s_dev), inode->i_ino); 2136 #endif 2137 } else { 2138 seq_printf(f, "%d <none>:0 ", fl_pid); 2139 } 2140 if (IS_POSIX(fl)) { 2141 if (fl->fl_end == OFFSET_MAX) 2142 seq_printf(f, "%Ld EOF\n", fl->fl_start); 2143 else 2144 seq_printf(f, "%Ld %Ld\n", fl->fl_start, fl->fl_end); 2145 } else { 2146 seq_printf(f, "0 EOF\n"); 2147 } 2148 } 2149 2150 static int locks_show(struct seq_file *f, void *v) 2151 { 2152 struct file_lock *fl, *bfl; 2153 2154 fl = list_entry(v, struct file_lock, fl_link); 2155 2156 lock_get_status(f, fl, (long)f->private, ""); 2157 2158 list_for_each_entry(bfl, &fl->fl_block, fl_block) 2159 lock_get_status(f, bfl, (long)f->private, " ->"); 2160 2161 f->private++; 2162 return 0; 2163 } 2164 2165 static void *locks_start(struct seq_file *f, loff_t *pos) 2166 { 2167 lock_kernel(); 2168 f->private = (void *)1; 2169 return seq_list_start(&file_lock_list, *pos); 2170 } 2171 2172 static void *locks_next(struct seq_file *f, void *v, loff_t *pos) 2173 { 2174 return seq_list_next(v, &file_lock_list, pos); 2175 } 2176 2177 static void locks_stop(struct seq_file *f, void *v) 2178 { 2179 unlock_kernel(); 2180 } 2181 2182 struct seq_operations locks_seq_operations = { 2183 .start = locks_start, 2184 .next = locks_next, 2185 .stop = locks_stop, 2186 .show = locks_show, 2187 }; 2188 #endif 2189 2190 /** 2191 * lock_may_read - checks that the region is free of locks 2192 * @inode: the inode that is being read 2193 * @start: the first byte to read 2194 * @len: the number of bytes to read 2195 * 2196 * Emulates Windows locking requirements. Whole-file 2197 * mandatory locks (share modes) can prohibit a read and 2198 * byte-range POSIX locks can prohibit a read if they overlap. 2199 * 2200 * N.B. this function is only ever called 2201 * from knfsd and ownership of locks is never checked. 2202 */ 2203 int lock_may_read(struct inode *inode, loff_t start, unsigned long len) 2204 { 2205 struct file_lock *fl; 2206 int result = 1; 2207 lock_kernel(); 2208 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) { 2209 if (IS_POSIX(fl)) { 2210 if (fl->fl_type == F_RDLCK) 2211 continue; 2212 if ((fl->fl_end < start) || (fl->fl_start > (start + len))) 2213 continue; 2214 } else if (IS_FLOCK(fl)) { 2215 if (!(fl->fl_type & LOCK_MAND)) 2216 continue; 2217 if (fl->fl_type & LOCK_READ) 2218 continue; 2219 } else 2220 continue; 2221 result = 0; 2222 break; 2223 } 2224 unlock_kernel(); 2225 return result; 2226 } 2227 2228 EXPORT_SYMBOL(lock_may_read); 2229 2230 /** 2231 * lock_may_write - checks that the region is free of locks 2232 * @inode: the inode that is being written 2233 * @start: the first byte to write 2234 * @len: the number of bytes to write 2235 * 2236 * Emulates Windows locking requirements. Whole-file 2237 * mandatory locks (share modes) can prohibit a write and 2238 * byte-range POSIX locks can prohibit a write if they overlap. 2239 * 2240 * N.B. this function is only ever called 2241 * from knfsd and ownership of locks is never checked. 2242 */ 2243 int lock_may_write(struct inode *inode, loff_t start, unsigned long len) 2244 { 2245 struct file_lock *fl; 2246 int result = 1; 2247 lock_kernel(); 2248 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) { 2249 if (IS_POSIX(fl)) { 2250 if ((fl->fl_end < start) || (fl->fl_start > (start + len))) 2251 continue; 2252 } else if (IS_FLOCK(fl)) { 2253 if (!(fl->fl_type & LOCK_MAND)) 2254 continue; 2255 if (fl->fl_type & LOCK_WRITE) 2256 continue; 2257 } else 2258 continue; 2259 result = 0; 2260 break; 2261 } 2262 unlock_kernel(); 2263 return result; 2264 } 2265 2266 EXPORT_SYMBOL(lock_may_write); 2267 2268 static int __init filelock_init(void) 2269 { 2270 filelock_cache = kmem_cache_create("file_lock_cache", 2271 sizeof(struct file_lock), 0, SLAB_PANIC, 2272 init_once); 2273 return 0; 2274 } 2275 2276 core_initcall(filelock_init); 2277