Fix O_APPEND open(2) flag
As described in flags section of open(2): O_APPEND: The file is opened in append mode. Before each write(2), the file offset is positioned at the end of the file, as if with lseek(2). O_APPEND may lead to corrupted files on NFS filesys- tems if more than one process appends data to a file at once. This is because NFS does not support appending to a file, so the client kernel has to simulate it, which can't be done without a race condition. This issue was originally overlooked because normally the generic VFS code handles this for a filesystem. However, because ZFS explictly registers a zpl_write() function it's responsible for the seek. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3124
This commit is contained in:
parent
1d966336f5
commit
1efdc45ea8
|
@ -272,6 +272,9 @@ zpl_write_common_iovec(struct inode *ip, const struct iovec *iovp, size_t count,
|
|||
uio_t uio;
|
||||
int error;
|
||||
|
||||
if (flags & O_APPEND)
|
||||
*ppos = i_size_read(ip);
|
||||
|
||||
uio.uio_iov = (struct iovec *)iovp;
|
||||
uio.uio_resid = count;
|
||||
uio.uio_iovcnt = nr_segs;
|
||||
|
|
Loading…
Reference in New Issue