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