env_spdk: add error code check for blobfs APIs
Change-Id: I64221416aae7cd28dd7cab5badb8fb3a534b9d3f Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.gerrithub.io/423351 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Xiaodong Liu <xiaodong.liu@intel.com>
This commit is contained in:
parent
f1e14ef412
commit
58be43c085
@ -133,12 +133,17 @@ SpdkSequentialFile::~SpdkSequentialFile(void)
|
|||||||
Status
|
Status
|
||||||
SpdkSequentialFile::Read(size_t n, Slice *result, char *scratch)
|
SpdkSequentialFile::Read(size_t n, Slice *result, char *scratch)
|
||||||
{
|
{
|
||||||
uint64_t ret;
|
int64_t ret;
|
||||||
|
|
||||||
ret = spdk_file_read(mFile, g_sync_args.channel, scratch, mOffset, n);
|
ret = spdk_file_read(mFile, g_sync_args.channel, scratch, mOffset, n);
|
||||||
mOffset += ret;
|
if (ret >= 0) {
|
||||||
*result = Slice(scratch, ret);
|
mOffset += ret;
|
||||||
return Status::OK();
|
*result = Slice(scratch, ret);
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -ret;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Status
|
Status
|
||||||
@ -173,9 +178,16 @@ SpdkRandomAccessFile::~SpdkRandomAccessFile(void)
|
|||||||
Status
|
Status
|
||||||
SpdkRandomAccessFile::Read(uint64_t offset, size_t n, Slice *result, char *scratch) const
|
SpdkRandomAccessFile::Read(uint64_t offset, size_t n, Slice *result, char *scratch) const
|
||||||
{
|
{
|
||||||
spdk_file_read(mFile, g_sync_args.channel, scratch, offset, n);
|
int64_t rc;
|
||||||
*result = Slice(scratch, n);
|
|
||||||
return Status::OK();
|
rc = spdk_file_read(mFile, g_sync_args.channel, scratch, offset, n);
|
||||||
|
if (rc >= 0) {
|
||||||
|
*result = Slice(scratch, n);
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Status
|
Status
|
||||||
@ -230,13 +242,27 @@ public:
|
|||||||
}
|
}
|
||||||
virtual Status Sync() override
|
virtual Status Sync() override
|
||||||
{
|
{
|
||||||
spdk_file_sync(mFile, g_sync_args.channel);
|
int rc;
|
||||||
return Status::OK();
|
|
||||||
|
rc = spdk_file_sync(mFile, g_sync_args.channel);
|
||||||
|
if (!rc) {
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual Status Fsync() override
|
virtual Status Fsync() override
|
||||||
{
|
{
|
||||||
spdk_file_sync(mFile, g_sync_args.channel);
|
int rc;
|
||||||
return Status::OK();
|
|
||||||
|
rc = spdk_file_sync(mFile, g_sync_args.channel);
|
||||||
|
if (!rc) {
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual bool IsSyncThreadSafe() const override
|
virtual bool IsSyncThreadSafe() const override
|
||||||
{
|
{
|
||||||
@ -264,12 +290,19 @@ public:
|
|||||||
}
|
}
|
||||||
virtual Status RangeSync(uint64_t offset, uint64_t nbytes) override
|
virtual Status RangeSync(uint64_t offset, uint64_t nbytes) override
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPDK BlobFS does not have a range sync operation yet, so just sync
|
* SPDK BlobFS does not have a range sync operation yet, so just sync
|
||||||
* the whole file.
|
* the whole file.
|
||||||
*/
|
*/
|
||||||
spdk_file_sync(mFile, g_sync_args.channel);
|
rc = spdk_file_sync(mFile, g_sync_args.channel);
|
||||||
return Status::OK();
|
if (!rc) {
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual size_t GetUniqueId(char *id, size_t max_size) const override
|
virtual size_t GetUniqueId(char *id, size_t max_size) const override
|
||||||
{
|
{
|
||||||
@ -280,10 +313,16 @@ public:
|
|||||||
Status
|
Status
|
||||||
SpdkWritableFile::Append(const Slice &data)
|
SpdkWritableFile::Append(const Slice &data)
|
||||||
{
|
{
|
||||||
spdk_file_write(mFile, g_sync_args.channel, (void *)data.data(), mSize, data.size());
|
int64_t rc;
|
||||||
mSize += data.size();
|
|
||||||
|
|
||||||
return Status::OK();
|
rc = spdk_file_write(mFile, g_sync_args.channel, (void *)data.data(), mSize, data.size());
|
||||||
|
if (rc >= 0) {
|
||||||
|
mSize += data.size();
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(spdk_file_get_name(mFile), strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SpdkDirectory : public Directory
|
class SpdkDirectory : public Directory
|
||||||
@ -461,10 +500,16 @@ public:
|
|||||||
virtual Status LockFile(const std::string &fname, FileLock **lock) override
|
virtual Status LockFile(const std::string &fname, FileLock **lock) override
|
||||||
{
|
{
|
||||||
std::string name = sanitize_path(fname, mDirectory);
|
std::string name = sanitize_path(fname, mDirectory);
|
||||||
|
int64_t rc;
|
||||||
|
|
||||||
spdk_fs_open_file(g_fs, g_sync_args.channel, name.c_str(),
|
rc = spdk_fs_open_file(g_fs, g_sync_args.channel, name.c_str(),
|
||||||
SPDK_BLOBFS_OPEN_CREATE, (struct spdk_file **)lock);
|
SPDK_BLOBFS_OPEN_CREATE, (struct spdk_file **)lock);
|
||||||
return Status::OK();
|
if (!rc) {
|
||||||
|
return Status::OK();
|
||||||
|
} else {
|
||||||
|
errno = -rc;
|
||||||
|
return Status::IOError(name, strerror(errno));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual Status UnlockFile(FileLock *lock) override
|
virtual Status UnlockFile(FileLock *lock) override
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user