• Jeff Layton's avatar
    ceph: fix handling of "meta" errors · 1bd85aa6
    Jeff Layton authored
    Currently, we check the wb_err too early for directories, before all of
    the unsafe child requests have been waited on. In order to fix that we
    need to check the mapping->wb_err later nearer to the end of ceph_fsync.
    
    We also have an overly-complex method for tracking errors after
    blocklisting. The errors recorded in cleanup_session_requests go to a
    completely separate field in the inode, but we end up reporting them the
    same way we would for any other error (in fsync).
    
    There's no real benefit to tracking these errors in two different
    places, since the only reporting mechanism for them is in fsync, and
    we'd need to advance them both every time.
    
    Given that, we can just remove i_meta_err, and convert the places that
    used it to instead just use mapping->wb_err instead. That also fixes
    the original problem by ensuring that we do a check_and_advance of the
    wb_err at the end of the fsync op.
    
    Cc: stable@vger.kernel.org
    URL: https://tracker.ceph.com/issues/52864Reported-by: default avatarPatrick Donnelly <pdonnell@redhat.com>
    Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
    Reviewed-by: default avatarXiubo Li <xiubli@redhat.com>
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    1bd85aa6
file.c 64.9 KB