]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
FuseStore: fix unhandled error cases for open
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 28 Jan 2016 09:50:07 +0000 (17:50 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Fri, 29 Jan 2016 02:26:15 +0000 (10:26 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/FuseStore.cc

index de83f1e319861d7698572c1305d101f293ef0e21..f55f1ee80f787852509c9420359dbf9e6b1af929 100644 (file)
@@ -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<string> k;
       k.insert(key);
       map<string,bufferlist> 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);
     }