Message ID | 1410448246-6635-1-git-send-email-ilya.dryomov@inktank.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 09/11/2014 10:10 AM, Ilya Dryomov wrote: > Trying to map an image out of a pool for which we don't have an 'x' > permission bit fails with -ERANGE from ceph_extract_encoded_string() > due to an unsigned vs signed bug. Fix it and get rid of the -ENIVAL > sink, thus exposing rbd::get_id cls method return value. (I've seen > a bunch of unexplained -ERANGE reports, I bet this is it). > > Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> I often think people are annoyed by my explicit type casts all over the place. This (missed) one matters a lot. I think the -EINVAL was to ensure an error code that was expected by a write() call would be returned. In any case, this looks good to me. Reviewed-by: Alex Elder <elder@linaro.org> > --- > drivers/block/rbd.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c > index 4b97baf8afa3..fe3726c62a37 100644 > --- a/drivers/block/rbd.c > +++ b/drivers/block/rbd.c > @@ -4924,7 +4924,7 @@ static int rbd_dev_image_id(struct rbd_device *rbd_dev) > ret = image_id ? 0 : -ENOMEM; > if (!ret) > rbd_dev->image_format = 1; > - } else if (ret > sizeof (__le32)) { > + } else if (ret > (int)sizeof(u32)) { > void *p = response; > > image_id = ceph_extract_encoded_string(&p, p + ret, > @@ -4932,8 +4932,6 @@ static int rbd_dev_image_id(struct rbd_device *rbd_dev) > ret = PTR_ERR_OR_ZERO(image_id); > if (!ret) > rbd_dev->image_format = 2; > - } else { > - ret = -EINVAL; > } > > if (!ret) { > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 4b97baf8afa3..fe3726c62a37 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -4924,7 +4924,7 @@ static int rbd_dev_image_id(struct rbd_device *rbd_dev) ret = image_id ? 0 : -ENOMEM; if (!ret) rbd_dev->image_format = 1; - } else if (ret > sizeof (__le32)) { + } else if (ret > (int)sizeof(u32)) { void *p = response; image_id = ceph_extract_encoded_string(&p, p + ret, @@ -4932,8 +4932,6 @@ static int rbd_dev_image_id(struct rbd_device *rbd_dev) ret = PTR_ERR_OR_ZERO(image_id); if (!ret) rbd_dev->image_format = 2; - } else { - ret = -EINVAL; } if (!ret) {
Trying to map an image out of a pool for which we don't have an 'x' permission bit fails with -ERANGE from ceph_extract_encoded_string() due to an unsigned vs signed bug. Fix it and get rid of the -ENIVAL sink, thus exposing rbd::get_id cls method return value. (I've seen a bunch of unexplained -ERANGE reports, I bet this is it). Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> --- drivers/block/rbd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)