On 2020/09/10 12:57, Al Viro wrote: > On Wed, Jul 29, 2020 at 10:04:45PM +0900, Tetsuo Handa wrote: >> __fput_sync() was introduced by commit 4a9d4b024a3102fc ("switch fput to >> task_work_add") with BUG_ON(!(current->flags & PF_KTHREAD)) check, and >> the only user of __fput_sync() was introduced by commit 17c0a5aaffa63da6 >> ("make acct_kill() wait for file closing."). However, the latter commit is >> effectively calling __fput_sync() from !PF_KTHREAD thread because of >> schedule_work() call followed by immediate wait_for_completion() call. >> That is, there is no need to defer close_work() to a WQ context. I guess >> that the reason to defer was nothing but to bypass this BUG_ON() check. >> While we need to remain careful about calling __fput_sync(), we can remove >> bypassable BUG_ON() check from __fput_sync(). >> >> If this change is accepted, racy fput()+flush_delayed_fput() introduced >> by commit e2dc9bf3f5275ca3 ("umd: Transform fork_usermode_blob into >> fork_usermode_driver") will be replaced by this raceless __fput_sync(). Thank you for responding. I'm also waiting for your response on "[RFC PATCH] pipe: make pipe_release() deferrable." at https://lore.kernel.org/linux-fsdevel/7ba35ca4-13c1-caa3-0655-50d328304462@xxxxxxxxxxxxxxxxxxx/ and "[PATCH] splice: fix premature end of input detection" at https://lore.kernel.org/linux-block/cf26a57e-01f4-32a9-0b2c-9102bffe76b2@xxxxxxxxxxxxxxxxxxx/ . > > NAK. The reason to defer is *NOT* to bypass that BUG_ON() - we really do not > want that thing done on anything other than extremely shallow stack. > Incidentally, why is that thing ever done _not_ in a kernel thread context? What does "that thing" refer to? acct_pin_kill() ? blob_to_mnt() ? I don't know the reason because I'm not the author of these functions.