diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2016-04-28 16:07:24 +0200 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-05-26 00:36:28 +0200 |
commit | fe5da05e979830b43b115d8a18ead521d507c783 (patch) | |
tree | 6afb8cacfd090d9d3b46a0a9976930957bb2e6cf /fs/ceph/file.c | |
parent | 85e084feb47349d62989efe1713a8723af95f4ea (diff) | |
download | linux-fe5da05e979830b43b115d8a18ead521d507c783.tar.gz linux-fe5da05e979830b43b115d8a18ead521d507c783.tar.bz2 linux-fe5da05e979830b43b115d8a18ead521d507c783.zip |
libceph: redo callbacks and factor out MOSDOpReply decoding
If you specify ACK | ONDISK and set ->r_unsafe_callback, both
->r_callback and ->r_unsafe_callback(true) are called on ack. This is
very confusing. Redo this so that only one of them is called:
->r_unsafe_callback(true), on ack
->r_unsafe_callback(false), on commit
or
->r_callback, on ack|commit
Decode everything in decode_MOSDOpReply() to reduce clutter.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/ceph/file.c')
-rw-r--r-- | fs/ceph/file.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index e75fd0b028e9..30fd49eb25b4 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -770,6 +770,8 @@ static void ceph_sync_write_unsafe(struct ceph_osd_request *req, bool unsafe) list_add_tail(&req->r_unsafe_item, &ci->i_unsafe_writes); spin_unlock(&ci->i_unsafe_lock); + + complete_all(&req->r_completion); } else { spin_lock(&ci->i_unsafe_lock); list_del_init(&req->r_unsafe_item); |