[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git-commits-head
Subject:    [CIFS] Duplicate data on appending to some Samba servers
From:       Linux Kernel Mailing List <linux-kernel () vger ! kernel ! org>
Date:       2009-11-30 23:59:07
Message-ID: 200911302359.nAUNx7BZ001049 () hera ! kernel ! org
[Download RAW message or body]

Gitweb:     http://git.kernel.org/linus/cea62343956c24452700c06cf028b72414c58a74
Commit:     cea62343956c24452700c06cf028b72414c58a74
Parent:     8e6c0332d5032aef2d3bc8f41771f999112c8c66
Author:     Steve French <sfrench@us.ibm.com>
AuthorDate: Tue Nov 24 22:49:37 2009 +0000
Committer:  Steve French <sfrench@us.ibm.com>
CommitDate: Tue Nov 24 22:52:13 2009 +0000

    [CIFS] Duplicate data on appending to some Samba servers
    
    SMB writes are sent with a starting offset and length. When the server
    supports the newer SMB trans2 posix open (rather than using the SMB
    NTCreateX) a file can be opened with SMB_O_APPEND flag, and for that
    case Samba server assumes that the offset sent in SMBWriteX is unneeded
    since the write should go to the end of the file - which can cause
    problems if the write was cached (since the beginning part of a
    page could be written twice by the client mm).  Jeff suggested that
    masking the flag on posix open on the client is easiest for the time
    being. Note that recent Samba server also had an unrelated problem with
    SMB NTCreateX and append (see samba bugzilla bug number 6898) which
    should not affect current Linux clients (unless cifs Unix Extensions
    are disabled).
    
    The cifs client did not send the O_APPEND flag on posix open
    before 2.6.29 so the fix is unneeded on early kernels.
    
    In the future, for the non-cached case (O_DIRECT, and forcedirectio mounts)
    it would be possible and useful to send O_APPEND on posix open (for Windows
    case: FILE_APPEND_DATA but not FILE_WRITE_DATA on SMB NTCreateX) but for
    cached writes although the vfs sets the offset to end of file it
    may fragment a write across pages - so we can't send O_APPEND on
    open (could result in sending part of a page twice).
    
    CC: Stable <stable@kernel.org>
    Reviewed-by: Shirish Pargaonkar <shirishp@us.ibm.com>
    Signed-off-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: Steve French <sfrench@us.ibm.com>
---
 fs/cifs/dir.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 32771f5..d3a6b07 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -214,8 +214,6 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
 		posix_flags |= SMB_O_EXCL;
 	if (oflags & O_TRUNC)
 		posix_flags |= SMB_O_TRUNC;
-	if (oflags & O_APPEND)
-		posix_flags |= SMB_O_APPEND;
 	if (oflags & O_SYNC)
 		posix_flags |= SMB_O_SYNC;
 	if (oflags & O_DIRECTORY)
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic