Project

General

Profile

Bug #52864

Updated by Jeff Layton over 2 years ago

Patrick noticed that our reporting for failed async creates is broken, and sometimes returns 0 even when an async create that happened before it failed. The issue is in the order of operations in ceph_fsync. We're currently relying on the initial file_check_and_advance call to get those errors for us, but that may be called before we get the failed create response. We need to check that after everything in ceph_fsync has completed. 

 It turns out that we have a completely separte i_meta_err field, that seems to be superfluous, so we should be able to fix this and simplify the code at the same time. 

 The reproducer for this is to set mds_dir_max_entries to a small value (I used 10), and then have a program create 11 files in the directory and fsync the dirfd. The 11th create fails, but mainline kernels pretty consistently return 0 to the final fsync.

Back