fs/9p: Don't use O_TRUNC flag in TOPEN and TLOPEN request
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Tue, 5 Feb 2013 05:56:28 +0000 (11:26 +0530)
committerEric Van Hensbergen <ericvh@gmail.com>
Sun, 10 Feb 2013 22:29:47 +0000 (16:29 -0600)
We do the truncate via setattr request, hence don't pass the O_TRUNC flag in
open request. Without this patch we end up sending zero sized write request
to server when we try to truncate. Some servers (VirtFS) were not handling that
properly.

Reported-by: M. Mohan Kumar <mohan@in.ibm.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
fs/9p/vfs_file.c
fs/9p/vfs_inode.c
fs/9p/vfs_inode_dotl.c

index c2483e9..7a33997 100644 (file)
@@ -80,10 +80,6 @@ int v9fs_file_open(struct inode *inode, struct file *file)
                        p9_client_clunk(fid);
                        return err;
                }
-               if (file->f_flags & O_TRUNC) {
-                       i_size_write(inode, 0);
-                       inode->i_blocks = 0;
-               }
                if ((file->f_flags & O_APPEND) &&
                        (!v9fs_proto_dotu(v9ses) && !v9fs_proto_dotl(v9ses)))
                        generic_file_llseek(file, 0, SEEK_END);
index 890bed5..57d017a 100644 (file)
@@ -192,9 +192,6 @@ int v9fs_uflags2omode(int uflags, int extended)
                break;
        }
 
-       if (uflags & O_TRUNC)
-               ret |= P9_OTRUNC;
-
        if (extended) {
                if (uflags & O_EXCL)
                        ret |= P9_OEXCL;
index 4089554..edd41d9 100644 (file)
@@ -186,7 +186,6 @@ static int v9fs_mapped_dotl_flags(int flags)
                { O_CREAT,      P9_DOTL_CREATE },
                { O_EXCL,       P9_DOTL_EXCL },
                { O_NOCTTY,     P9_DOTL_NOCTTY },
-               { O_TRUNC,      P9_DOTL_TRUNC },
                { O_APPEND,     P9_DOTL_APPEND },
                { O_NONBLOCK,   P9_DOTL_NONBLOCK },
                { O_DSYNC,      P9_DOTL_DSYNC },