diff options
author | Sage Weil <sage@newdream.net> | 2010-02-09 14:04:02 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-02-11 11:48:53 -0800 |
commit | 6a026589ba333185c466c906376fe022a27a53f9 (patch) | |
tree | 7c536163e2192928978b79d5a6bbd79dd5993777 /fs/ceph/buffer.c | |
parent | 68c283236a1e0772e1a469dd2ffc17afc300b07b (diff) | |
download | blackbird-op-linux-6a026589ba333185c466c906376fe022a27a53f9.tar.gz blackbird-op-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/buffer.c')
0 files changed, 0 insertions, 0 deletions