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