diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-08-21 13:26:50 +0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-21 21:55:10 -0700 |
commit | 123f79bea8301aadbb11e8fd277af2e40102864f (patch) | |
tree | 9fb21eba8e800ff610ef072ed8452ad15303e9d1 | |
parent | 878456466911cebd5fa2226b89a8de801eddbc45 (diff) | |
download | ceph-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.cc | 29 | ||||
-rw-r--r-- | src/tools/ceph-monstore-tool.cc | 2 |
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; |