Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9d6a8c5c213e34c475e72b245a8eb709258e968c
Commit:     9d6a8c5c213e34c475e72b245a8eb709258e968c
Parent:     70cc6487a4e08b8698c0e2ec935fb48d10490162
Author:     Marc Eshel <[EMAIL PROTECTED]>
AuthorDate: Wed Feb 21 00:55:18 2007 -0500
Committer:  J. Bruce Fields <[EMAIL PROTECTED]>
CommitDate: Sun May 6 17:39:00 2007 -0400

    locks: give posix_test_lock same interface as ->lock
    
    posix_test_lock() and ->lock() do the same job but have gratuitously
    different interfaces.  Modify posix_test_lock() so the two agree,
    simplifying some code in the process.
    
    Signed-off-by: Marc Eshel <[EMAIL PROTECTED]>
    Signed-off-by: "J. Bruce Fields" <[EMAIL PROTECTED]>
---
 fs/fuse/file.c                |    3 +--
 fs/gfs2/locking/nolock/main.c |    8 +-------
 fs/gfs2/ops_file.c            |    7 +------
 fs/lockd/svclock.c            |   13 ++++++++-----
 fs/locks.c                    |   37 ++++++++++++++++---------------------
 fs/nfs/file.c                 |    7 +------
 fs/nfsd/nfs4state.c           |    6 +++---
 include/linux/fs.h            |    2 +-
 8 files changed, 32 insertions(+), 51 deletions(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 2fd0692..acfad65 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -738,8 +738,7 @@ static int fuse_file_lock(struct file *file, int cmd, 
struct file_lock *fl)
 
        if (cmd == F_GETLK) {
                if (fc->no_lock) {
-                       if (!posix_test_lock(file, fl, fl))
-                               fl->fl_type = F_UNLCK;
+                       posix_test_lock(file, fl);
                        err = 0;
                } else
                        err = fuse_getlk(file, fl);
diff --git a/fs/gfs2/locking/nolock/main.c b/fs/gfs2/locking/nolock/main.c
index acfbc94..5cc1dfa 100644
--- a/fs/gfs2/locking/nolock/main.c
+++ b/fs/gfs2/locking/nolock/main.c
@@ -164,13 +164,7 @@ static void nolock_unhold_lvb(void *lock, char *lvb)
 static int nolock_plock_get(void *lockspace, struct lm_lockname *name,
                            struct file *file, struct file_lock *fl)
 {
-       struct file_lock tmp;
-       int ret;
-
-       ret = posix_test_lock(file, fl, &tmp);
-       fl->fl_type = F_UNLCK;
-       if (ret)
-               memcpy(fl, &tmp, sizeof(struct file_lock));
+       posix_test_lock(file, fl);
 
        return 0;
 }
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index b50180e..48b248d 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -513,12 +513,7 @@ static int gfs2_lock(struct file *file, int cmd, struct 
file_lock *fl)
 
        if (sdp->sd_args.ar_localflocks) {
                if (IS_GETLK(cmd)) {
-                       struct file_lock tmp;
-                       int ret;
-                       ret = posix_test_lock(file, fl, &tmp);
-                       fl->fl_type = F_UNLCK;
-                       if (ret)
-                               memcpy(fl, &tmp, sizeof(struct file_lock));
+                       posix_test_lock(file, fl);
                        return 0;
                } else {
                        return posix_lock_file_wait(file, fl);
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index cf51f84..97b0160 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -426,15 +426,18 @@ nlmsvc_testlock(struct nlm_file *file, struct nlm_lock 
*lock,
                                (long long)lock->fl.fl_start,
                                (long long)lock->fl.fl_end);
 
-       if (posix_test_lock(file->f_file, &lock->fl, &conflock->fl)) {
+       if (posix_test_lock(file->f_file, &lock->fl)) {
                dprintk("lockd: conflicting lock(ty=%d, %Ld-%Ld)\n",
-                               conflock->fl.fl_type,
-                               (long long)conflock->fl.fl_start,
-                               (long long)conflock->fl.fl_end);
+                               lock->fl.fl_type,
+                               (long long)lock->fl.fl_start,
+                               (long long)lock->fl.fl_end);
                conflock->caller = "somehost";  /* FIXME */
                conflock->len = strlen(conflock->caller);
                conflock->oh.len = 0;           /* don't return OH info */
-               conflock->svid = conflock->fl.fl_pid;
+               conflock->svid = lock->fl.fl_pid;
+               conflock->fl.fl_type = lock->fl.fl_type;
+               conflock->fl.fl_start = lock->fl.fl_start;
+               conflock->fl.fl_end = lock->fl.fl_end;
                return nlm_lck_denied;
        }
 
diff --git a/fs/locks.c b/fs/locks.c
index b07e6e6..749a0dc 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -666,11 +666,11 @@ static int locks_block_on_timeout(struct file_lock 
*blocker, struct file_lock *w
 }
 
 int
-posix_test_lock(struct file *filp, struct file_lock *fl,
-               struct file_lock *conflock)
+posix_test_lock(struct file *filp, struct file_lock *fl)
 {
        struct file_lock *cfl;
 
+       fl->fl_type = F_UNLCK;
        lock_kernel();
        for (cfl = filp->f_path.dentry->d_inode->i_flock; cfl; cfl = 
cfl->fl_next) {
                if (!IS_POSIX(cfl))
@@ -679,7 +679,7 @@ posix_test_lock(struct file *filp, struct file_lock *fl,
                        break;
        }
        if (cfl) {
-               __locks_copy_lock(conflock, cfl);
+               __locks_copy_lock(fl, cfl);
                unlock_kernel();
                return 1;
        }
@@ -1648,7 +1648,7 @@ static void posix_lock_to_flock64(struct flock64 *flock, 
struct file_lock *fl)
  */
 int fcntl_getlk(struct file *filp, struct flock __user *l)
 {
-       struct file_lock *fl, cfl, file_lock;
+       struct file_lock file_lock;
        struct flock flock;
        int error;
 
@@ -1667,15 +1667,12 @@ int fcntl_getlk(struct file *filp, struct flock __user 
*l)
                error = filp->f_op->lock(filp, F_GETLK, &file_lock);
                if (error < 0)
                        goto out;
-               else
-                 fl = (file_lock.fl_type == F_UNLCK ? NULL : &file_lock);
-       } else {
-               fl = (posix_test_lock(filp, &file_lock, &cfl) ? &cfl : NULL);
-       }
+       } else
+               posix_test_lock(filp, &file_lock);
  
-       flock.l_type = F_UNLCK;
-       if (fl != NULL) {
-               error = posix_lock_to_flock(&flock, fl);
+       flock.l_type = file_lock.fl_type;
+       if (file_lock.fl_type != F_UNLCK) {
+               error = posix_lock_to_flock(&flock, &file_lock);
                if (error)
                        goto out;
        }
@@ -1785,7 +1782,7 @@ out:
  */
 int fcntl_getlk64(struct file *filp, struct flock64 __user *l)
 {
-       struct file_lock *fl, cfl, file_lock;
+       struct file_lock file_lock;
        struct flock64 flock;
        int error;
 
@@ -1804,15 +1801,13 @@ int fcntl_getlk64(struct file *filp, struct flock64 
__user *l)
                error = filp->f_op->lock(filp, F_GETLK, &file_lock);
                if (error < 0)
                        goto out;
-               else
-                 fl = (file_lock.fl_type == F_UNLCK ? NULL : &file_lock);
-       } else {
-               fl = (posix_test_lock(filp, &file_lock, &cfl) ? &cfl : NULL);
-       }
+       } else
+               posix_test_lock(filp, &file_lock);
  
-       flock.l_type = F_UNLCK;
-       if (fl != NULL)
-               posix_lock_to_flock64(&flock, fl);
+       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;
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index 8e66b5a..5eaee6d 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -391,17 +391,12 @@ out_swapfile:
 
 static int do_getlk(struct file *filp, int cmd, struct file_lock *fl)
 {
-       struct file_lock cfl;
        struct inode *inode = filp->f_mapping->host;
        int status = 0;
 
        lock_kernel();
        /* Try local locking first */
-       if (posix_test_lock(filp, fl, &cfl)) {
-               fl->fl_start = cfl.fl_start;
-               fl->fl_end = cfl.fl_end;
-               fl->fl_type = cfl.fl_type;
-               fl->fl_pid = cfl.fl_pid;
+       if (posix_test_lock(filp, fl)) {
                goto out;
        }
 
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index af36070..e42c7a0 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2813,7 +2813,6 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct 
nfsd4_compound_state *cstate,
        struct inode *inode;
        struct file file;
        struct file_lock file_lock;
-       struct file_lock conflock;
        __be32 status;
 
        if (nfs4_in_grace())
@@ -2878,9 +2877,10 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct 
nfsd4_compound_state *cstate,
        file.f_path.dentry = cstate->current_fh.fh_dentry;
 
        status = nfs_ok;
-       if (posix_test_lock(&file, &file_lock, &conflock)) {
+       posix_test_lock(&file, &file_lock);
+       if (file_lock.fl_type != F_UNLCK) {
                status = nfserr_denied;
-               nfs4_set_lock_denied(&conflock, &lockt->lt_denied);
+               nfs4_set_lock_denied(&file_lock, &lockt->lt_denied);
        }
 out:
        nfs4_unlock_state();
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 86ec3f4..9e1ddff 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -851,7 +851,7 @@ extern void locks_init_lock(struct file_lock *);
 extern void locks_copy_lock(struct file_lock *, struct file_lock *);
 extern void locks_remove_posix(struct file *, fl_owner_t);
 extern void locks_remove_flock(struct file *);
-extern int posix_test_lock(struct file *, struct file_lock *, struct file_lock 
*);
+extern int posix_test_lock(struct file *, struct file_lock *);
 extern int posix_lock_file_conf(struct file *, struct file_lock *, struct 
file_lock *);
 extern int posix_lock_file(struct file *, struct file_lock *);
 extern int posix_lock_file_wait(struct file *, struct file_lock *);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to