return r;
}
}
- } else if (size) {
- struct stat st;
- r = ::fstatat(path_fd, name.c_str(), &st, 0);
- if (r < 0)
- r = -errno;
- if (r == -ENOENT) {
- int fd = ::openat(path_fd, name.c_str(), O_CREAT|O_RDWR, 0644);
- if (fd < 0) {
- int r = -errno;
- derr << __func__ << " failed to create " << name << " file: "
+ }
+ if (size) {
+ int fd = ::openat(path_fd, name.c_str(), O_RDWR, 0644);
+ if (fd >= 0) {
+ // block file is present
+ struct stat st;
+ int r = ::fstat(fd, &st);
+ if (r == 0 &&
+ S_ISREG(st.st_mode) && // if it is a regular file
+ st.st_size == 0) { // and is 0 bytes
+ r = ::ftruncate(fd, size);
+ if (r < 0) {
+ r = -errno;
+ derr << __func__ << " failed to resize " << name << " file to "
+ << size << ": " << cpp_strerror(r) << dendl;
+ VOID_TEMP_FAILURE_RETRY(::close(fd));
+ return r;
+ }
+ dout(1) << __func__ << " resized " << name << " file to "
+ << pretty_si_t(size) << "B" << dendl;
+ }
+ VOID_TEMP_FAILURE_RETRY(::close(fd));
+ } else {
+ int r = -errno;
+ if (r != -ENOENT) {
+ derr << __func__ << " failed to open " << name << " file: "
<< cpp_strerror(r) << dendl;
return r;
}
- r = ::ftruncate(fd, size);
- assert(r == 0);
- dout(1) << __func__ << " created " << name << " file with size "
- << pretty_si_t(size) << "B" << dendl;
- VOID_TEMP_FAILURE_RETRY(::close(fd));
- } else if (r < 0) {
- derr << __func__ << " failed to stat " << name << " file: "
- << cpp_strerror(r) << dendl;
- return r;
- }
+ }
}
return 0;
}
fi
if [ "$bluestore" -eq 1 ]; then
COSDMEMSTORE='
- osd objectstore = bluestore
- bluestore fsck on mount = true
- bluestore block db size = 67108864
- bluestore block wal size = 134217728'
+ osd objectstore = bluestore'
fi
# lockdep everywhere?
filestore wbthrottle btrfs ios start flusher = 10
filestore wbthrottle btrfs ios hard limit = 20
filestore wbthrottle btrfs inodes hard limit = 30
+ bluestore fsck on mount = true
+ bluestore block db size = 67108864
+ bluestore block wal size = 134217728
$COSDDEBUG
$COSDMEMSTORE
$extra_conf
for f in $CEPH_DEV_DIR/osd$osd/* ; do btrfs sub delete $f || true ; done || true
mkdir -p $CEPH_DEV_DIR/osd$osd
+ # for bluestore
+ touch $CEPH_DEV_DIR/osd$osd/block
+ touch $CEPH_DEV_DIR/osd$osd/block.db
+ touch $CEPH_DEV_DIR/osd$osd/block.wal
+
uuid=`uuidgen`
echo "add osd$osd $uuid"
$SUDO $CEPH_ADM osd create $uuid