From: xie xingguo Date: Thu, 28 Jan 2016 09:50:07 +0000 (+0800) Subject: FuseStore: fix unhandled error cases for open X-Git-Tag: v10.0.4~105^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=87b7e53e70c226e28be298945599c876c435577b;p=ceph.git FuseStore: fix unhandled error cases for open Signed-off-by: xie xingguo --- diff --git a/src/os/FuseStore.cc b/src/os/FuseStore.cc index de83f1e31986..f55f1ee80f78 100644 --- a/src/os/FuseStore.cc +++ b/src/os/FuseStore.cc @@ -567,8 +567,11 @@ static int os_open(const char *path, struct fuse_file_info *fi) case FN_HASH_BITS: { + int r = fs->store->collection_bits(cid); + if (r < 0) + return r; char buf[8]; - snprintf(buf, sizeof(buf), "%d\n", fs->store->collection_bits(cid)); + snprintf(buf, sizeof(buf), "%d\n", r); pbl = new bufferlist; pbl->append(buf); } @@ -587,14 +590,20 @@ static int os_open(const char *path, struct fuse_file_info *fi) case FN_OBJECT_DATA: { pbl = new bufferlist; - fs->store->read(cid, oid, 0, 0, *pbl); + int r = fs->store->read(cid, oid, 0, 0, *pbl); + if (r < 0) { + delete pbl; + return r; + } } break; case FN_OBJECT_ATTR_VAL: { bufferptr bp; - fs->store->getattr(cid, oid, key.c_str(), bp); + int r = fs->store->getattr(cid, oid, key.c_str(), bp); + if (r < 0) + return r; pbl = new bufferlist; pbl->append(bp); } @@ -605,7 +614,9 @@ static int os_open(const char *path, struct fuse_file_info *fi) set k; k.insert(key); map v; - fs->store->omap_get_values(cid, oid, k, &v); + int r = fs->store->omap_get_values(cid, oid, k, &v); + if (r < 0) + return r; pbl = new bufferlist; *pbl = v[key]; } @@ -614,7 +625,9 @@ static int os_open(const char *path, struct fuse_file_info *fi) case FN_OBJECT_OMAP_HEADER: { bufferlist bl; - fs->store->omap_get_header(cid, oid, &bl); + int r = fs->store->omap_get_header(cid, oid, &bl); + if (r < 0) + return r; pbl = new bufferlist; pbl->claim(bl); }