]> www.infradead.org Git - users/jedix/linux-maple.git/commit
dax: don't abuse get_block mapping for endio callbacks
authorDave Chinner <dchinner@redhat.com>
Wed, 3 Jun 2015 23:18:18 +0000 (09:18 +1000)
committerDan Duval <dan.duval@oracle.com>
Wed, 12 Oct 2016 13:46:17 +0000 (09:46 -0400)
commit9d8ec9d2ccd91d2a3a436b797e25761673bbfe9f
treec33d7a4af82f7a82c9911f758f68ed7c750c73eb
parent932770a41664c8a418c2dbc94572b684483d00a3
dax: don't abuse get_block mapping for endio callbacks

Orabug: 22913653

dax_fault() currently relies on the get_block callback to attach an
io completion callback to the mapping buffer head so that it can
run unwritten extent conversion after zeroing allocated blocks.

Instead of this hack, pass the conversion callback directly into
dax_fault() similar to the get_block callback. When the filesystem
allocates unwritten extents, it will set the buffer_unwritten()
flag, and hence the dax_fault code can call the completion function
in the contexts where it is necessary without overloading the
mapping buffer head.

Note: The changes to ext4 to use this interface are suspect at best.
In fact, the way ext4 did this end_io assignment in the first place
looks suspect because it only set a completion callback when there
wasn't already some other write() call taking place on the same
inode. The ext4 end_io code looks rather intricate and fragile with
all it's reference counting and passing to different contexts for
modification via inode private pointers that aren't protected by
locks...

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Acked-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Dan Duval <dan.duval@oracle.com>
(cherry picked from commit e842f2903908934187af7232fb5b21da527d1757)

Conflict:

fs/ext4/inode.c
fs/ext4/inode.c