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