From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [RFC] write(2) semantics wrt return values and current position Date: Wed, 8 Apr 2015 22:20:27 +0100 Message-ID: <20150408212026.GS889@ZenIV.linux.org.uk> References: <20150406153641.GL889@ZenIV.linux.org.uk> <20150408192450.GQ889@ZenIV.linux.org.uk> <20150408205737.GR889@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Linus Torvalds , Trond Myklebust , Christoph Hellwig , Dave Chinner , Theodore Ts'o , Miklos Szeredi , Oleg Drokin , Joseph Qi , Joel Becker , Mark Fasheh To: linux-fsdevel@vger.kernel.org Return-path: Received: from zeniv.linux.org.uk ([195.92.253.2]:60690 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754570AbbDHVUa (ORCPT ); Wed, 8 Apr 2015 17:20:30 -0400 Content-Disposition: inline In-Reply-To: <20150408205737.GR889@ZenIV.linux.org.uk> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Wed, Apr 08, 2015 at 09:57:37PM +0100, Al Viro wrote: > ... and having looked through old mail, there's _another_ breakage that > might have inspired that one; this one is mine - "ocfs2 syncs the wrong range". > It was syncing the wrong range with O_APPEND, all right, but after that > patch it was syncing the wrong range in _all_ cases. What it should've > been doing instead is > ret = filemap_fdatawrite_range(file->f_mapping, > iocb->ki_pos - written, > iocb->ki_pos - 1); > ... > ret = filemap_fdatawait_range(file->f_mapping, > iocb->ki_pos - written, > iocb->ki_pos - 1); > > Joseph, my apologies for missing your mail back in January - you are absolutely > correct, *ppos (aka iocb->ki_pos) _is_ changed. Unlike pos, it can be used > to get the right range reliably (as above; pos, back when it existed, > hadn't been affected by generic_write_checks() call in what used to be > ocfs2_file_aio_write()), but the actual calculation had been completely > wrong. > > If that had contributed to confusion, my deep apologies... Folks, could you please take a look through vfs.git#for-linus (the last three commits in there) and see if you are OK with those?