From af58281daa3bb8b464368f14e341bffa2f2576c4 Mon Sep 17 00:00:00 2001 From: Vasiliy Kulikov Date: Sun, 26 Sep 2010 12:59:37 +0400 Subject: [PATCH] --- yaml --- r: 211608 b: refs/heads/master c: 28f259b7cd78eb29d38b7ae6b475d656e08fd348 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/block/rbd.c | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 6c69c87a875e..1c701a6582a8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 496e59553c51ce18acc836de070106b583926b87 +refs/heads/master: 28f259b7cd78eb29d38b7ae6b475d656e08fd348 diff --git a/trunk/drivers/block/rbd.c b/trunk/drivers/block/rbd.c index c42f3058abc7..83b15dd24853 100644 --- a/trunk/drivers/block/rbd.c +++ b/trunk/drivers/block/rbd.c @@ -241,6 +241,7 @@ static struct rbd_client *rbd_client_create(struct ceph_options *opt) rbdc->client = ceph_create_client(opt, rbdc); if (IS_ERR(rbdc->client)) goto out_rbdc; + opt = NULL; /* Now rbdc->client is responsible for opt */ ret = ceph_open_session(rbdc->client); if (ret < 0) @@ -255,13 +256,12 @@ static struct rbd_client *rbd_client_create(struct ceph_options *opt) out_err: ceph_destroy_client(rbdc->client); - return ERR_PTR(ret); - out_rbdc: kfree(rbdc); out_opt: - ceph_destroy_options(opt); - return ERR_PTR(-ENOMEM); + if (opt) + ceph_destroy_options(opt); + return ERR_PTR(ret); } /* @@ -889,8 +889,10 @@ static int rbd_do_op(struct request *rq, rbd_dev->header.block_name, ofs, len, seg_name, &seg_ofs); - if (seg_len < 0) - return seg_len; + if ((s64)seg_len < 0) { + ret = seg_len; + goto done; + } payload_len = (flags & CEPH_OSD_FLAG_WRITE ? seg_len : 0);