POOL=rbd
IMAGE=testrbdnbd$$
+TOO_LARGE_IMAGE=${IMAGE}_large
SUDO=sudo
SIZE=64
DATA=
DATA=${TEMPDIR}/data
dd if=/dev/urandom of=${DATA} bs=1M count=${SIZE}
rbd --dest-pool ${POOL} --no-progress import ${DATA} ${IMAGE}
+ rbd -p ${POOL} create ${TOO_LARGE_IMAGE} --size 3T
if [ `id -u` = 0 ]
then
done
rbd -p ${POOL} remove ${IMAGE}
fi
+ rbd -p ${POOL} remove ${TOO_LARGE_IMAGE}
}
function expect_false()
fi
expect_false ${SUDO} rbd-nbd map INVALIDIMAGE
expect_false ${SUDO} rbd-nbd --device INVALIDDEV map ${IMAGE}
+expect_false ${SUDO} rbd-nbd map ${TOO_LARGE_IMAGE}
# map test using the first unused device
DEV=`${SUDO} rbd-nbd map ${POOL}/${IMAGE}`
}
size = info.size;
+
+ if (size > (1UL << 32) * 512) {
+ r = -EFBIG;
+ cerr << "rbd-nbd: image is too large (" << prettybyte_t(size) << ", max is "
+ << prettybyte_t((1UL << 32) * 512) << ")" << std::endl;
+ goto close_nbd;
+ }
+
r = ioctl(nbd, NBD_SET_SIZE, size);
if (r < 0) {
r = -errno;