Fixes: #2304
Signed-off-by: Sage Weil <sage@newdream.net>
/* Find out how many extents there are */
r = ioctl(fd, FS_IOC_FIEMAP, fiemap);
if (r < 0) {
- fprintf(stderr, "fiemap ioctl() failed\n");
goto done_err;
}
#include "include/intarith.h"
#include "include/compat.h"
+#include "common/blkdev.h"
#include <dirent.h>
#include <errno.h>
{
int fd = open(path, O_RDONLY);
int r;
- uint64_t size;
+ int64_t size = 0;
struct stat stat_buf;
string md_oid;
struct fiemap *fiemap;
return r;
}
size = (uint64_t)stat_buf.st_size;
+ if (!size) {
+ r = get_block_device_size(fd, &size);
+ if (r < 0) {
+ cerr << "unable to get size of file/block device: " << cpp_strerror(r) << std::endl;
+ return r;
+ }
+ }
assert(imgname);