From: Al Viro Date: Tue, 7 Apr 2015 00:50:38 +0000 (-0400) Subject: new_sync_write(): discard ->ki_pos unless the return value is positive X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=f765b134c0d3f294f6084d3e0a11de184059a387;p=linux-beck.git new_sync_write(): discard ->ki_pos unless the return value is positive That allows ->write_iter() instances much more convenient life wrt iocb->ki_pos (and fixes several filesystems with borderline POSIX violations when zero-length write succeeds and changes the current position). Signed-off-by: Al Viro --- diff --git a/fs/read_write.c b/fs/read_write.c index 45d583c33879..819ef3faf1bb 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -477,7 +477,8 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t ret = filp->f_op->write_iter(&kiocb, &iter); BUG_ON(ret == -EIOCBQUEUED); - *ppos = kiocb.ki_pos; + if (ret > 0) + *ppos = kiocb.ki_pos; return ret; }