[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110411014625.GA5802@thunk.org>
Date: Sun, 10 Apr 2011 21:46:25 -0400
From: Ted Ts'o <tytso@....edu>
To: Yongqiang Yang <xiaoqiangnk@...il.com>
Cc: bugzilla-daemon@...zilla.kernel.org, damien@...ssart.com,
feng.tang@...el.com, linux-ext4@...r.kernel.org
Subject: Re: [Bug 32972] New: EXT4 causes corrupt BitTorrent downloads
On Sun, Apr 10, 2011 at 10:30:13PM +0800, Yongqiang Yang wrote:
> So the right code should be:
>
> bh->b_state = (bh->b_state & ~EXT4_MAP_FLAGS) | map.m_flags;
> map_bh(bh, inode->i_sb, map.m_pblk);
> if (buffer_unwritten(bh)) {
> /* A delayed write to unwritten bh should be marked
> * new and mapped. Mapped ensures that we don't do
> * get_block multiple times when we write to the same
> * offset and new ensures that we do proper zero out
> * for partial write.
> */
> set_buffer_new(bh);
> }
Actually, I'm much more comfortable backing out commit 6de9843da
entirely. The above is *not* equivalent to what we had before ---
consider the case where ext4_map_blocks returns !EXT4_MAP_MAPPED &&
!EXT4_MAP_UNWRITTEN.
I don't *think* this should happen in the case where ext4_map_blocks
returns a value > 0, but the fact that it's not obvious, means I'd
much rather keep things the way that they are. It's not like dropping
the set_buffer_mapped(bh) was saving anything measurable anyway....
- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists