summaryrefslogtreecommitdiff
path: root/net/ceph
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-04-15 11:18:01 -0500
committerSage Weil <sage@inktank.com>2013-05-01 21:18:51 -0700
commit7d7d51ce14fde491a6d0677d9bded9b3bd0d21d9 (patch)
treec351dc531724bcb8002ab60e847737c8d8617955 /net/ceph
parent0b93267252ef5fe6c6d77e3013ed6a0d766352ad (diff)
downloadlinux-3.10-7d7d51ce14fde491a6d0677d9bded9b3bd0d21d9.tar.gz
linux-3.10-7d7d51ce14fde491a6d0677d9bded9b3bd0d21d9.tar.bz2
linux-3.10-7d7d51ce14fde491a6d0677d9bded9b3bd0d21d9.zip
ceph: let osd client clean up for interrupted request
In ceph_sync_write(), if a safe callback is supplied with a request, and an error is returned by ceph_osdc_wait_request(), a block of code is executed to remove the request from the unsafe writes list and drop references to capabilities acquired just prior to a call to ceph_osdc_wait_request(). The only function used for this callback is sync_write_commit(), and it does *exactly* what that block of error handling code does. Now in ceph_osdc_wait_request(), if an error occurs (due to an interupt during a wait_for_completion_interruptible() call), complete_request() gets called, and that calls the request's safe_callback method if it's defined. So this means that this cleanup activity gets called twice in this case, which is erroneous (and in fact leads to a crash). Fix this by just letting the osd client handle the cleanup in the event of an interrupt. This resolves one problem mentioned in: http://tracker.ceph.com/issues/4706 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Yan, Zheng <zheng.z.yan@intel.com>
Diffstat (limited to 'net/ceph')
0 files changed, 0 insertions, 0 deletions