]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/locks.c
mn10300: remove wrapper header for asm/device.h
[linux.git] / fs / locks.c
index af2031a1fcff14fcfb05e108b9d49bfc4a74685f..afefeb4ad6ded4229d7ba69517c512a59177b3a1 100644 (file)
@@ -1858,8 +1858,8 @@ EXPORT_SYMBOL(generic_setlease);
  *
  * Call this to establish a lease on the file. The "lease" argument is not
  * used for F_UNLCK requests and may be NULL. For commands that set or alter
- * an existing lease, the (*lease)->fl_lmops->lm_break operation must be set;
- * if not, this function will return -ENOLCK (and generate a scary-looking
+ * an existing lease, the ``(*lease)->fl_lmops->lm_break`` operation must be
+ * set; if not, this function will return -ENOLCK (and generate a scary-looking
  * stack trace).
  *
  * The "priv" pointer is passed directly to the lm_setup function as-is. It
@@ -1972,15 +1972,13 @@ EXPORT_SYMBOL(locks_lock_inode_wait);
  *     @cmd: the type of lock to apply.
  *
  *     Apply a %FL_FLOCK style lock to an open file descriptor.
- *     The @cmd can be one of
+ *     The @cmd can be one of:
  *
- *     %LOCK_SH -- a shared lock.
- *
- *     %LOCK_EX -- an exclusive lock.
- *
- *     %LOCK_UN -- remove an existing lock.
- *
- *     %LOCK_MAND -- a `mandatory' flock.  This exists to emulate Windows Share Modes.
+ *     - %LOCK_SH -- a shared lock.
+ *     - %LOCK_EX -- an exclusive lock.
+ *     - %LOCK_UN -- remove an existing lock.
+ *     - %LOCK_MAND -- a 'mandatory' flock.
+ *       This exists to emulate Windows Share Modes.
  *
  *     %LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other
  *     processes read and write access respectively.
@@ -2086,26 +2084,22 @@ static void posix_lock_to_flock64(struct flock64 *flock, struct file_lock *fl)
 /* Report the first existing lock that would conflict with l.
  * This implements the F_GETLK command of fcntl().
  */
-int fcntl_getlk(struct file *filp, unsigned int cmd, struct flock __user *l)
+int fcntl_getlk(struct file *filp, unsigned int cmd, struct flock *flock)
 {
        struct file_lock file_lock;
-       struct flock flock;
        int error;
 
-       error = -EFAULT;
-       if (copy_from_user(&flock, l, sizeof(flock)))
-               goto out;
        error = -EINVAL;
-       if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK))
+       if (flock->l_type != F_RDLCK && flock->l_type != F_WRLCK)
                goto out;
 
-       error = flock_to_posix_lock(filp, &file_lock, &flock);
+       error = flock_to_posix_lock(filp, &file_lock, flock);
        if (error)
                goto out;
 
        if (cmd == F_OFD_GETLK) {
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_GETLK;
@@ -2117,15 +2111,12 @@ int fcntl_getlk(struct file *filp, unsigned int cmd, struct flock __user *l)
        if (error)
                goto out;
  
-       flock.l_type = file_lock.fl_type;
+       flock->l_type = file_lock.fl_type;
        if (file_lock.fl_type != F_UNLCK) {
-               error = posix_lock_to_flock(&flock, &file_lock);
+               error = posix_lock_to_flock(flock, &file_lock);
                if (error)
                        goto rel_priv;
        }
-       error = -EFAULT;
-       if (!copy_to_user(l, &flock, sizeof(flock)))
-               error = 0;
 rel_priv:
        locks_release_private(&file_lock);
 out:
@@ -2218,26 +2209,16 @@ check_fmode_for_setlk(struct file_lock *fl)
  * This implements both the F_SETLK and F_SETLKW commands of fcntl().
  */
 int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
-               struct flock __user *l)
+               struct flock *flock)
 {
        struct file_lock *file_lock = locks_alloc_lock();
-       struct flock flock;
-       struct inode *inode;
+       struct inode *inode = locks_inode(filp);
        struct file *f;
        int error;
 
        if (file_lock == NULL)
                return -ENOLCK;
 
-       inode = locks_inode(filp);
-
-       /*
-        * This might block, so we do it before checking the inode.
-        */
-       error = -EFAULT;
-       if (copy_from_user(&flock, l, sizeof(flock)))
-               goto out;
-
        /* Don't allow mandatory locks on files that may be memory mapped
         * and shared.
         */
@@ -2246,7 +2227,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
                goto out;
        }
 
-       error = flock_to_posix_lock(filp, file_lock, &flock);
+       error = flock_to_posix_lock(filp, file_lock, flock);
        if (error)
                goto out;
 
@@ -2261,7 +2242,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
        switch (cmd) {
        case F_OFD_SETLK:
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_SETLK;
@@ -2270,7 +2251,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
                break;
        case F_OFD_SETLKW:
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_SETLKW;
@@ -2315,26 +2296,22 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
 /* Report the first existing lock that would conflict with l.
  * This implements the F_GETLK command of fcntl().
  */
-int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 __user *l)
+int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 *flock)
 {
        struct file_lock file_lock;
-       struct flock64 flock;
        int error;
 
-       error = -EFAULT;
-       if (copy_from_user(&flock, l, sizeof(flock)))
-               goto out;
        error = -EINVAL;
-       if ((flock.l_type != F_RDLCK) && (flock.l_type != F_WRLCK))
+       if (flock->l_type != F_RDLCK && flock->l_type != F_WRLCK)
                goto out;
 
-       error = flock64_to_posix_lock(filp, &file_lock, &flock);
+       error = flock64_to_posix_lock(filp, &file_lock, flock);
        if (error)
                goto out;
 
        if (cmd == F_OFD_GETLK) {
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_GETLK64;
@@ -2346,13 +2323,9 @@ int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 __user *l)
        if (error)
                goto out;
 
-       flock.l_type = file_lock.fl_type;
+       flock->l_type = file_lock.fl_type;
        if (file_lock.fl_type != F_UNLCK)
-               posix_lock_to_flock64(&flock, &file_lock);
-
-       error = -EFAULT;
-       if (!copy_to_user(l, &flock, sizeof(flock)))
-               error = 0;
+               posix_lock_to_flock64(flock, &file_lock);
 
        locks_release_private(&file_lock);
 out:
@@ -2363,26 +2336,16 @@ int fcntl_getlk64(struct file *filp, unsigned int cmd, struct flock64 __user *l)
  * This implements both the F_SETLK and F_SETLKW commands of fcntl().
  */
 int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
-               struct flock64 __user *l)
+               struct flock64 *flock)
 {
        struct file_lock *file_lock = locks_alloc_lock();
-       struct flock64 flock;
-       struct inode *inode;
+       struct inode *inode = locks_inode(filp);
        struct file *f;
        int error;
 
        if (file_lock == NULL)
                return -ENOLCK;
 
-       /*
-        * This might block, so we do it before checking the inode.
-        */
-       error = -EFAULT;
-       if (copy_from_user(&flock, l, sizeof(flock)))
-               goto out;
-
-       inode = locks_inode(filp);
-
        /* Don't allow mandatory locks on files that may be memory mapped
         * and shared.
         */
@@ -2391,7 +2354,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
                goto out;
        }
 
-       error = flock64_to_posix_lock(filp, file_lock, &flock);
+       error = flock64_to_posix_lock(filp, file_lock, flock);
        if (error)
                goto out;
 
@@ -2406,7 +2369,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
        switch (cmd) {
        case F_OFD_SETLK:
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_SETLK64;
@@ -2415,7 +2378,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
                break;
        case F_OFD_SETLKW:
                error = -EINVAL;
-               if (flock.l_pid != 0)
+               if (flock->l_pid != 0)
                        goto out;
 
                cmd = F_SETLKW64;