• S
    ceph: fix sync read eof check deadlock · 6a026589
    Sage Weil 提交于
    If a sync read gets a short result from the OSD, it may need to do a
    getattr to see if it is short due to reaching end-of-file.  The getattr
    was being done while holding a reference to FILE_RD, which can lead to
    a deadlock if the MDS is revoking that capability bit and can't process
    the getattr until it does.
    
    We fix this by setting a flag if EOF size validation is needed, and doing
    the getattr in ceph_aio_read, after the RD cap ref is dropped.  If the
    read needs to be continued, we loop and continue traversing the file.
    Signed-off-by: NSage Weil <sage@newdream.net>
    6a026589
file.c 24.0 KB