ChangeSet 1.2313, 2005/03/31 08:59:29-08:00, [EMAIL PROTECTED]

        [PATCH] nfsd4: fix failure to truncate on some opens
        
        An OPEN upgrade on a file already open for WRITE will not upgrade the 
OPEN,
        but can still truncate the file.
        
        Signed-off-by: Andy Adamson <[EMAIL PROTECTED]>
        Signed-off-by: J. Bruce Fields <[EMAIL PROTECTED]>
        Signed-off-by: Neil Brown <[EMAIL PROTECTED]>
        Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
        Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>



 nfs4state.c |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)


diff -Nru a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
--- a/fs/nfsd/nfs4state.c       2005-03-31 10:30:48 -08:00
+++ b/fs/nfsd/nfs4state.c       2005-03-31 10:30:48 -08:00
@@ -1602,21 +1602,22 @@
        share_access = ~share_access;
        share_access &= open->op_share_access;
 
-       /* update the struct file */
-       if (share_access & NFS4_SHARE_ACCESS_WRITE) {
-               status = get_write_access(inode);
-               if (status)
-                       return nfserrno(status);
-               status = nfsd4_truncate(rqstp, cur_fh, open);
-               if (status) {
-                       put_write_access(inode);
-                       return status;
-               }
-               /* remember the open */
-               filp->f_mode = (filp->f_mode | FMODE_WRITE) & ~FMODE_READ;
-               set_bit(open->op_share_access, &stp->st_access_bmap);
-               set_bit(open->op_share_deny, &stp->st_deny_bmap);
+       if (!(share_access & NFS4_SHARE_ACCESS_WRITE))
+               return nfsd4_truncate(rqstp, cur_fh, open);
+
+       status = get_write_access(inode);
+       if (status)
+               return nfserrno(status);
+       status = nfsd4_truncate(rqstp, cur_fh, open);
+       if (status) {
+               put_write_access(inode);
+               return status;
        }
+       /* remember the open */
+       filp->f_mode = (filp->f_mode | FMODE_WRITE) & ~FMODE_READ;
+       set_bit(open->op_share_access, &stp->st_access_bmap);
+       set_bit(open->op_share_deny, &stp->st_deny_bmap);
+
        return nfs_ok;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe bk-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