diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-19 12:50:37 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-19 12:50:37 -0500 |
commit | e9ff04dd94d46c817bbb103531cdef6e7bd5d022 (patch) | |
tree | f6544ac65503d04b7760492e7f2592132e4a6d6c /net | |
parent | ed24fee24a6be9568b1ee30209bafe4dad66be0e (diff) | |
parent | 9c89d62948c4740e379a7e0085dd8d7c1561f53f (diff) | |
download | op-kernel-dev-e9ff04dd94d46c817bbb103531cdef6e7bd5d022.zip op-kernel-dev-e9ff04dd94d46c817bbb103531cdef6e7bd5d022.tar.gz |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull ceph fixes from Sage Weil:
"These fix several bugs with RBD from 3.11 that didn't get tested in
time for the merge window: some error handling, a use-after-free, and
a sequencing issue when unmapping and image races with a notify
operation.
There is also a patch fixing a problem with the new ceph + fscache
code that just went in"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
fscache: check consistency does not decrement refcount
rbd: fix error handling from rbd_snap_name()
rbd: ignore unmapped snapshots that no longer exist
rbd: fix use-after free of rbd_dev->disk
rbd: make rbd_obj_notify_ack() synchronous
rbd: complete notifies before cleaning up osd_client and rbd_dev
libceph: add function to ensure notifies are complete
Diffstat (limited to 'net')
-rw-r--r-- | net/ceph/osd_client.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index 1606f74..2b4b32a 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c @@ -2216,6 +2216,17 @@ void ceph_osdc_sync(struct ceph_osd_client *osdc) EXPORT_SYMBOL(ceph_osdc_sync); /* + * Call all pending notify callbacks - for use after a watch is + * unregistered, to make sure no more callbacks for it will be invoked + */ +extern void ceph_osdc_flush_notifies(struct ceph_osd_client *osdc) +{ + flush_workqueue(osdc->notify_wq); +} +EXPORT_SYMBOL(ceph_osdc_flush_notifies); + + +/* * init, shutdown */ int ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client) |