On 2020/6/17 20:41, Jan Kara wrote: > On Wed 17-06-20 19:59:45, zhangyi (F) wrote: >> Although we have already introduce s_bdev_wb_err_work to detect and >> handle async write metadata buffer error as soon as possible, there is >> still a potential race that could lead to filesystem inconsistency, >> which is the buffer may reading and re-writing out to journal before >> s_bdev_wb_err_work run. So this patch detect bdev mapping->wb_err when >> getting journal's write access and also mark the filesystem error if >> something bad happened. >> >> Signed-off-by: zhangyi (F) <yi.zhang@xxxxxxxxxx> > > So instead of all this, cannot we just do: > > if (work_pending(sbi->s_bdev_wb_err_work)) > flush_work(sbi->s_bdev_wb_err_work); > > ? And so we are sure the filesystem is aborted if the abort was pending? > Thanks for this suggestion. Yeah, we could do this, it depends on the second patch, if we check and flush the pending work here, we could not use the end_buffer_async_write() in ext4_end_buffer_async_write(), we need to open coding ext4_end_buffer_async_write() and queue the error work before the buffer is unlocked, or else the race is still there. Do you agree ? Thanks, Yi.