int SyntheticClient::chunk_file(string &filename)
{
int fd = client->open(filename.c_str(), O_RDONLY);
- int ret;
+ if (fd < 0)
+ return fd;
struct stat st;
- client->fstat(fd, &st);
+ int ret = client->fstat(fd, &st);
+ if (ret < 0) {
+ client->close(fd);
+ return ret;
+ }
uint64_t size = st.st_size;
dout(0) << "file " << filename << " size is " << size << dendl;
memset(&inode, 0, sizeof(inode));
inode.ino = st.st_ino;
ret = client->fdescribe_layout(fd, &inode.layout);
- if (ret < 0)
- return ret;
+ assert(ret == 0); // otherwise fstat did a bad thing
uint64_t pos = 0;
bufferlist from_before;