On Fri, May 11, 2018 at 12:53:36PM +0300, Nikolay Borisov wrote: > > > On 11.05.2018 09:30, Omar Sandoval wrote: > > From: Omar Sandoval <osandov@xxxxxx> > > > > Hi, everyone, > > > > Btrfs currently abuses current->journal_info in btrfs_direct_IO() in > > order to pass around some state to get_block() and submit_io(). This > > hack is ugly and unnecessary because the data we pass around is only > > used in one call frame. Robbie Ko also pointed out [1] that it could > > potentially cause a crash if we happen to end up in start_transaction() > > (e.g., from memory reclaim calling into btrfs_evict_inode(), which can > > start a transaction). I'm not convinced that Robbie's case can happen in > > practice since we are using GFP_NOFS for allocations during direct I/O, > > but either way it's fragile and nasty. > > When I worked initially on btrfs-over-swap I managed to hit a case where > ext4 stacked on top of btrfs would crash since btrfs will overwrite > journal_info which was set by ext4. So this change is indeed welcome :) And also this, https://lkml.org/lkml/2017/12/14/165.