ceph: properly handle aborted mds requests
authorSage Weil <sage@newdream.net>
Mon, 25 Jan 2010 19:33:08 +0000 (11:33 -0800)
committerSage Weil <sage@newdream.net>
Mon, 25 Jan 2010 19:49:51 +0000 (11:49 -0800)
commit5b1daecd59f95eb24dc629407ed80369c9929520
tree19b5d4e11427350f48947df8dca453069ed0a0d5
parent3ea25f9441fc0951ada649105f2c57a59536b539
ceph: properly handle aborted mds requests

Previously, if the MDS request was interrupted, we would unregister the
request and ignore any reply.  This could cause the caps or other cache
state to become out of sync.  (For instance, aborting dbench and doing
rm -r on clients would complain about a non-empty directory because the
client didn't realize it's aborted file create request completed.)

Even we don't unregister, we still can't process the reply normally because
we are no longer holding the caller's locks (like the dir i_mutex).

So, mark aborted operations with r_aborted, and in the reply handler, be
sure to process all the caps.  Do not process the namespace changes,
though, since we no longer will hold the dir i_mutex.  The dentry lease
state can also be ignored as it's more forgiving.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/inode.c
fs/ceph/mds_client.c
fs/ceph/mds_client.h