On Oct 9, 2014, at 5:14 AM, Dmitry Monakhov <dmonakhov@xxxxxxxxxx> wrote: > O_DIRECT flags can be toggeled via fcntl(F_SETFL). > But this value checked twice inside ext4_file_write_iter() and __generic_file_write() > which result in BUG_ON (see typical stack trace below) > In order to fix this we have to use our own copy of __generic_file_write > and pass o_direct status explicitly. This seems like a generic problem that would be better served by fixing the core code instead of making a private copy of such a large function for ext4. I expect other filesystems might have similar issues if the O_DIRECT state is changed in the middle of IO? One option is to flush pending IO on the file if the O_DIRECT flag is changed in setfl(). This is a bit heavyweight but I can't imagine any sane app that is changing the O_DIRECT state on a file repeatedly. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail