diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2016-09-26 09:43:52 -0400 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-10-03 10:13:49 -0400 |
commit | 0dcc685e7dd7190dcaa5435e9c14150f1d405b7b (patch) | |
tree | 42a0cb0231eecec7b9fedd5808a6a336695325db | |
parent | 04dc923c9e4c43df7d2d94f290189785d3172326 (diff) |
rbd: add rbd_obj_request_error() helper
Pull setting an error and marking a request done code into a new
helper. obj_request_img_data_test() check isn't strictly needed right
now, but makes it applicable to !img_data requests and a bit safer.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
-rw-r--r-- | drivers/block/rbd.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index e46f4f05fb01..c842b8911936 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -1819,6 +1819,22 @@ static void rbd_obj_request_complete(struct rbd_obj_request *obj_request) | |||
1819 | complete_all(&obj_request->completion); | 1819 | complete_all(&obj_request->completion); |
1820 | } | 1820 | } |
1821 | 1821 | ||
1822 | static void rbd_obj_request_error(struct rbd_obj_request *obj_request, int err) | ||
1823 | { | ||
1824 | obj_request->result = err; | ||
1825 | obj_request->xferred = 0; | ||
1826 | /* | ||
1827 | * kludge - mirror rbd_obj_request_submit() to match a put in | ||
1828 | * rbd_img_obj_callback() | ||
1829 | */ | ||
1830 | if (obj_request_img_data_test(obj_request)) { | ||
1831 | WARN_ON(obj_request->callback != rbd_img_obj_callback); | ||
1832 | rbd_img_request_get(obj_request->img_request); | ||
1833 | } | ||
1834 | obj_request_done_set(obj_request); | ||
1835 | rbd_obj_request_complete(obj_request); | ||
1836 | } | ||
1837 | |||
1822 | static void rbd_osd_read_callback(struct rbd_obj_request *obj_request) | 1838 | static void rbd_osd_read_callback(struct rbd_obj_request *obj_request) |
1823 | { | 1839 | { |
1824 | struct rbd_img_request *img_request = NULL; | 1840 | struct rbd_img_request *img_request = NULL; |
@@ -2722,11 +2738,7 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request) | |||
2722 | 2738 | ||
2723 | out_err: | 2739 | out_err: |
2724 | ceph_release_page_vector(pages, page_count); | 2740 | ceph_release_page_vector(pages, page_count); |
2725 | orig_request->result = img_result; | 2741 | rbd_obj_request_error(orig_request, img_result); |
2726 | orig_request->xferred = 0; | ||
2727 | rbd_img_request_get(orig_request->img_request); | ||
2728 | obj_request_done_set(orig_request); | ||
2729 | rbd_obj_request_complete(orig_request); | ||
2730 | } | 2742 | } |
2731 | 2743 | ||
2732 | /* | 2744 | /* |
@@ -2877,11 +2889,7 @@ static void rbd_img_obj_exists_callback(struct rbd_obj_request *obj_request) | |||
2877 | return; | 2889 | return; |
2878 | 2890 | ||
2879 | fail_orig_request: | 2891 | fail_orig_request: |
2880 | orig_request->result = result; | 2892 | rbd_obj_request_error(orig_request, result); |
2881 | orig_request->xferred = 0; | ||
2882 | rbd_img_request_get(orig_request->img_request); | ||
2883 | obj_request_done_set(orig_request); | ||
2884 | rbd_obj_request_complete(orig_request); | ||
2885 | } | 2893 | } |
2886 | 2894 | ||
2887 | static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request) | 2895 | static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request) |