linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Chris Mason <clm@fb.com>, <linux-btrfs@vger.kernel.org>,
	<linux-fsdevel@vger.kernel.org>
Subject: Re: [RFC] odd thing in btrfs_file_aio_write()
Date: Mon, 14 Apr 2014 15:21:29 +0800	[thread overview]
Message-ID: <534B8C79.7090309@cn.fujitsu.com> (raw)
In-Reply-To: <20140414050834.GS18016@ZenIV.linux.org.uk>


-------- Original Message --------
Subject: Re: [RFC] odd thing in btrfs_file_aio_write()
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Qu Wenruo <quwenruo@cn.fujitsu.com>
Date: 2014年04月14日 13:08
> On Mon, Apr 14, 2014 at 11:36:53AM +0800, Qu Wenruo wrote:
>>> IOW, is that if (start_pos > i_size_read(inode)) { in there correct
>>> these days?  And what'll happen if we hit e.g. an unmapped page in the
>>> middle of the data being written?  That will result in short write, but
>>> will it truncate what's left of that dummy range?
>> I'm very sorry for my poor that I could not understand the question well.
>> Would you please explain what does the "unmapped page" means?
>>
>> Did you mean two noncontinuous iovecs?
>> If you did mean that, it seems that I should expand the end_pos to
>> the end of the iovec...
> I mean that the very first (and only) iovec can very well span an area
> that has been munmapped():
>
> 	char *buf = (char *)mmap(NULL, 65536, PROT_READ, MAP_ANON, -1, 0);
> 	memset(buf, 'A', 65536);
> 	munmap(buf + 4096, 4096);
> 	write(fd, buf, 65536);
>
> or
>
> 	char *buf = (char *)mmap(NULL, 65536, PROT_READ, MAP_ANON, -1, 0);
> 	struct iovec iv = {buf, 65536};
> 	memset(buf, 'A', 65536);
> 	munmap(buf + 4096, 4096);
> 	writev(fd, &iv, 1);
>
> will end up writing 4Kb of data (filled with 'A') and return 4096.  That's
> how short writes happen...
Since the inode size on disk is updated only when the write finished, so 
even the hole punched is larger
than the data written, it will be OK since the inode size on disk is not 
expended to 64K.

Although short writes is OK, when two noncontinuous iovecs is passed, 
there is still empty gap,
so I still needs to fix the code.

Thanks,
Qu
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

      reply	other threads:[~2014-04-14  7:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-14  0:26 [RFC] odd thing in btrfs_file_aio_write() Al Viro
2014-04-14  2:35 ` Qu Wenruo
2014-04-14  2:48   ` Al Viro
2014-04-14  3:36     ` Qu Wenruo
2014-04-14  5:08       ` Al Viro
2014-04-14  7:21         ` Qu Wenruo [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=534B8C79.7090309@cn.fujitsu.com \
    --to=quwenruo@cn.fujitsu.com \
    --cc=clm@fb.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).