summaryrefslogtreecommitdiffstats
path: root/fs/ceph/addr.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-02-09 23:04:02 +0100
committerSage Weil <sage@newdream.net>2010-02-11 20:48:53 +0100
commit6a026589ba333185c466c906376fe022a27a53f9 (patch)
tree7c536163e2192928978b79d5a6bbd79dd5993777 /fs/ceph/addr.c
parentceph: do not retain caps that are being revoked (diff)
downloadlinux-6a026589ba333185c466c906376fe022a27a53f9.tar.xz
linux-6a026589ba333185c466c906376fe022a27a53f9.zip
ceph: fix sync read eof check deadlock
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: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/addr.c')
0 files changed, 0 insertions, 0 deletions