From: Trond Myklebust NFSv4 server: Fix up nfs4state.c to support the file_lock_operations. Signed-off-by: Andrew Morton --- 25-akpm/fs/nfsd/nfs4state.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff -puN fs/nfsd/nfs4state.c~posix-locking-fix-up-nfs4statec fs/nfsd/nfs4state.c --- 25/fs/nfsd/nfs4state.c~posix-locking-fix-up-nfs4statec 2004-06-29 22:28:31.616894944 -0700 +++ 25-akpm/fs/nfsd/nfs4state.c 2004-06-29 22:28:31.621894184 -0700 @@ -2180,6 +2180,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struc goto out; } + locks_init_lock(&file_lock); switch (lock->lk_type) { case NFS4_READ_LT: case NFS4_READW_LT: @@ -2197,9 +2198,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struc file_lock.fl_pid = lockownerid_hashval(lock->lk_stateowner->so_id); file_lock.fl_file = filp; file_lock.fl_flags = FL_POSIX; - file_lock.fl_notify = NULL; - file_lock.fl_insert = NULL; - file_lock.fl_remove = NULL; file_lock.fl_start = lock->lk_offset; if ((lock->lk_length == ~(u64)0) || @@ -2215,6 +2213,8 @@ nfsd4_lock(struct svc_rqst *rqstp, struc */ status = posix_lock_file(filp, &file_lock); + if (file_lock.fl_ops && file_lock.fl_ops->fl_release_private) + file_lock.fl_ops->fl_release_private(&file_lock); dprintk("NFSD: nfsd4_lock: posix_test_lock passed. posix_lock_file status %d\n",status); switch (-status) { case 0: /* success! */ @@ -2296,6 +2296,7 @@ nfsd4_lockt(struct svc_rqst *rqstp, stru } inode = current_fh->fh_dentry->d_inode; + locks_init_lock(&file_lock); switch (lockt->lt_type) { case NFS4_READ_LT: case NFS4_READW_LT: @@ -2381,14 +2382,12 @@ nfsd4_locku(struct svc_rqst *rqstp, stru filp = &stp->st_vfs_file; BUG_ON(!filp); + locks_init_lock(&file_lock); file_lock.fl_type = F_UNLCK; file_lock.fl_owner = (fl_owner_t) locku->lu_stateowner; file_lock.fl_pid = lockownerid_hashval(locku->lu_stateowner->so_id); file_lock.fl_file = filp; file_lock.fl_flags = FL_POSIX; - file_lock.fl_notify = NULL; - file_lock.fl_insert = NULL; - file_lock.fl_remove = NULL; file_lock.fl_start = locku->lu_offset; if ((locku->lu_length == ~(u64)0) || LOFF_OVERFLOW(locku->lu_offset, locku->lu_length)) @@ -2401,6 +2400,8 @@ nfsd4_locku(struct svc_rqst *rqstp, stru * Try to unlock the file in the VFS. */ status = posix_lock_file(filp, &file_lock); + if (file_lock.fl_ops && file_lock.fl_ops->fl_release_private) + file_lock.fl_ops->fl_release_private(&file_lock); if (status) { printk("NFSD: nfs4_locku: posix_lock_file failed!\n"); goto out_nfserr; _