summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-08-21 13:26:50 +0800
committerSage Weil <sage@inktank.com>2013-08-21 21:55:10 -0700
commit123f79bea8301aadbb11e8fd277af2e40102864f (patch)
tree9fb21eba8e800ff610ef072ed8452ad15303e9d1
parent878456466911cebd5fa2226b89a8de801eddbc45 (diff)
downloadceph-123f79bea8301aadbb11e8fd277af2e40102864f.tar.gz
store: fix issues reported by coverity
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/os/BtrfsFileStoreBackend.cc29
-rw-r--r--src/tools/ceph-monstore-tool.cc2
2 files changed, 19 insertions, 12 deletions
diff --git a/src/os/BtrfsFileStoreBackend.cc b/src/os/BtrfsFileStoreBackend.cc
index 580a4b5bebf..9fa96babab7 100644
--- a/src/os/BtrfsFileStoreBackend.cc
+++ b/src/os/BtrfsFileStoreBackend.cc
@@ -51,7 +51,8 @@
#define ALIGN_UP(x, by) (ALIGNED((x), (by)) ? (x) : (ALIGN_DOWN((x), (by)) + (by)))
BtrfsFileStoreBackend::BtrfsFileStoreBackend(FileStore *fs):
- GenericFileStoreBackend(fs), has_clone_range(false), has_snap_create(false),
+ GenericFileStoreBackend(fs), has_clone_range(false),
+ has_snap_create(false), has_snap_destroy(false),
has_snap_create_v2(false), has_wait_sync(false), stable_commits(false),
m_filestore_btrfs_clone_range(g_conf->filestore_btrfs_clone_range),
m_filestore_btrfs_snap (g_conf->filestore_btrfs_snap) { }
@@ -298,8 +299,10 @@ int BtrfsFileStoreBackend::create_current()
int BtrfsFileStoreBackend::list_checkpoints(list<string>& ls)
{
+ int ret, err = 0;
+
struct stat basest;
- int ret = ::fstat(get_basedir_fd(), &basest);
+ ret = ::fstat(get_basedir_fd(), &basest);
if (ret < 0) {
ret = -errno;
dout(0) << "list_checkpoints: cannot fstat basedir " << cpp_strerror(ret) << dendl;
@@ -327,10 +330,10 @@ int BtrfsFileStoreBackend::list_checkpoints(list<string>& ls)
struct stat st;
ret = ::stat(path, &st);
if (ret < 0) {
- ret = -errno;
+ err = -errno;
dout(0) << "list_checkpoints: stat '" << path << "' failed: "
- << cpp_strerror(ret) << dendl;
- return ret;
+ << cpp_strerror(err) << dendl;
+ break;
}
if (!S_ISDIR(st.st_mode))
@@ -339,10 +342,10 @@ int BtrfsFileStoreBackend::list_checkpoints(list<string>& ls)
struct statfs fs;
ret = ::statfs(path, &fs);
if (ret < 0) {
- ret = -errno;
+ err = -errno;
dout(0) << "list_checkpoints: statfs '" << path << "' failed: "
- << cpp_strerror(ret) << dendl;
- return ret;
+ << cpp_strerror(err) << dendl;
+ break;
}
if (fs.f_type == BTRFS_SUPER_MAGIC && basest.st_dev != st.st_dev)
@@ -352,9 +355,13 @@ int BtrfsFileStoreBackend::list_checkpoints(list<string>& ls)
if (::closedir(dir) < 0) {
ret = -errno;
dout(0) << "list_checkpoints: closedir failed: " << cpp_strerror(ret) << dendl;
- return ret;
+ if (!err)
+ err = ret;
}
+ if (err)
+ return err;
+
ls.swap(snaps);
return 0;
}
@@ -367,7 +374,7 @@ int BtrfsFileStoreBackend::create_checkpoint(const string& name, uint64_t *trans
memset(&async_args, 0, sizeof(async_args));
async_args.fd = get_current_fd();
async_args.flags = BTRFS_SUBVOL_CREATE_ASYNC;
- strcpy(async_args.name, name.c_str());
+ strncpy(async_args.name, name.c_str(), sizeof(async_args.name));
int r = ::ioctl(get_basedir_fd(), BTRFS_IOC_SNAP_CREATE_V2, &async_args);
if (r < 0) {
@@ -455,7 +462,7 @@ int BtrfsFileStoreBackend::destroy_checkpoint(const string& name)
btrfs_ioctl_vol_args vol_args;
memset(&vol_args, 0, sizeof(vol_args));
vol_args.fd = 0;
- strcpy(vol_args.name, name.c_str());
+ strncpy(vol_args.name, name.c_str(), sizeof(vol_args.name));
int ret = ::ioctl(get_basedir_fd(), BTRFS_IOC_SNAP_DESTROY, &vol_args);
if (ret) {
diff --git a/src/tools/ceph-monstore-tool.cc b/src/tools/ceph-monstore-tool.cc
index 4ab8fa86465..7d9ea628e9f 100644
--- a/src/tools/ceph-monstore-tool.cc
+++ b/src/tools/ceph-monstore-tool.cc
@@ -179,7 +179,7 @@ int main(int argc, char **argv) {
int fd;
if (vm.count("out")) {
- if ((fd = open(out_path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666)) == -1) {
+ if ((fd = open(out_path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
int _err = errno;
if (_err != EISDIR) {
std::cerr << "Couldn't open " << out_path << ": " << cpp_strerror(_err) << std::endl;