rbd: allow "fancy" striping

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Acked-by: Jason Dillaman <dillaman@redhat.com>
This commit is contained in:
Ilya Dryomov 2018-02-07 12:09:12 +01:00
parent afb978884c
commit b133185217

View File

@ -4615,9 +4615,6 @@ static int rbd_dev_v2_striping_info(struct rbd_device *rbd_dev)
} __attribute__ ((packed)) striping_info_buf = { 0 }; } __attribute__ ((packed)) striping_info_buf = { 0 };
size_t size = sizeof (striping_info_buf); size_t size = sizeof (striping_info_buf);
void *p; void *p;
u64 obj_size;
u64 stripe_unit;
u64 stripe_count;
int ret; int ret;
ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid, ret = rbd_obj_method_sync(rbd_dev, &rbd_dev->header_oid,
@ -4629,31 +4626,9 @@ static int rbd_dev_v2_striping_info(struct rbd_device *rbd_dev)
if (ret < size) if (ret < size)
return -ERANGE; return -ERANGE;
/*
* We don't actually support the "fancy striping" feature
* (STRIPINGV2) yet, but if the striping sizes are the
* defaults the behavior is the same as before. So find
* out, and only fail if the image has non-default values.
*/
ret = -EINVAL;
obj_size = rbd_obj_bytes(&rbd_dev->header);
p = &striping_info_buf; p = &striping_info_buf;
stripe_unit = ceph_decode_64(&p); rbd_dev->header.stripe_unit = ceph_decode_64(&p);
if (stripe_unit != obj_size) { rbd_dev->header.stripe_count = ceph_decode_64(&p);
rbd_warn(rbd_dev, "unsupported stripe unit "
"(got %llu want %llu)",
stripe_unit, obj_size);
return -EINVAL;
}
stripe_count = ceph_decode_64(&p);
if (stripe_count != 1) {
rbd_warn(rbd_dev, "unsupported stripe count "
"(got %llu want 1)", stripe_count);
return -EINVAL;
}
rbd_dev->header.stripe_unit = stripe_unit;
rbd_dev->header.stripe_count = stripe_count;
return 0; return 0;
} }