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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html