]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filestore: test xattrs on temporary file
authorSage Weil <sage@inktank.com>
Sat, 19 May 2012 23:03:41 +0000 (16:03 -0700)
committerSage Weil <sage@inktank.com>
Mon, 21 May 2012 21:21:30 +0000 (14:21 -0700)
There isn't one we can rely on existing yet.  Broken by
1314a00798ed4b7ef2f2686f0195c5c53c98c2ce while fixing #2452.

Backport: dho
Signed-off-by: Sage Weil <sage@inktank.com>
src/os/FileStore.cc

index c144fd21213ff0d987e515f72576bc2bc4e9b4eb..7e8f253b51139a06dcbbff26c1e419374c7fad75 100644 (file)
@@ -1312,7 +1312,16 @@ int FileStore::_detect_fs()
   char fn[PATH_MAX];
   int x = rand();
   int y = x+1;
-  snprintf(fn, sizeof(fn), "%s/whoami", basedir.c_str());
+
+  snprintf(fn, sizeof(fn), "%s/xattr_test", basedir.c_str());
+
+  int tmpfd = ::open(fn, O_CREAT|O_WRONLY|O_TRUNC, 0700);
+  if (tmpfd < 0) {
+    int ret = -errno;
+    derr << "_detect_fs unable to create " << fn << ": " << cpp_strerror(ret) << dendl;
+    return ret;
+  }
+
   int ret = do_setxattr(fn, "user.test", &x, sizeof(x));
   if (ret >= 0)
     ret = do_getxattr(fn, "user.test", &y, sizeof(y));
@@ -1345,6 +1354,9 @@ int FileStore::_detect_fs()
   do_removexattr(fn, "user.test4");
   do_removexattr(fn, "user.test5");
 
+  ::unlink(fn);
+  TEMP_FAILURE_RETRY(::close(tmpfd));
+
   int fd = ::open(basedir.c_str(), O_RDONLY);
   if (fd < 0)
     return -errno;