]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: move xattr -> os/filestore/os_xattr 32219/head
authorDavid Disseldorp <ddiss@suse.de>
Thu, 12 Dec 2019 15:26:42 +0000 (16:26 +0100)
committerDavid Disseldorp <ddiss@suse.de>
Thu, 12 Dec 2019 15:54:39 +0000 (16:54 +0100)
Aside from unittest_chain_xattr, these functions are only used by
filestore, so it makes sense to move them out of common.

Signed-off-by: David Disseldorp <ddiss@suse.de>
src/common/CMakeLists.txt
src/common/xattr.c [deleted file]
src/common/xattr.h [deleted file]
src/os/CMakeLists.txt
src/os/filestore/FileStore.cc
src/os/filestore/chain_xattr.h
src/os/filestore/os_xattr.c [new file with mode: 0644]
src/os/filestore/os_xattr.h [new file with mode: 0644]

index 46dab5362f25c62f373e8380ab01c12aa1cc161b..7affa6d5f6b886383c339f806d2a9b9f3f3ee7ab 100644 (file)
@@ -98,8 +98,7 @@ set(common_srcs
   url_escape.cc
   utf8.c
   util.cc
-  version.cc
-  xattr.c)
+  version.cc)
 
 set_source_files_properties(${CMAKE_SOURCE_DIR}/src/common/version.cc
   APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h)
diff --git a/src/common/xattr.c b/src/common/xattr.c
deleted file mode 100644 (file)
index c7afcf1..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2011 Stanislav Sedov <stas@FreeBSD.org>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- */
-
-#if defined(__FreeBSD__)
-#include <errno.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <sys/types.h>
-#include <sys/extattr.h>
-#elif defined(__linux__)
-#include <sys/types.h>
-#include <sys/xattr.h>
-#elif defined(__APPLE__)
-#include <errno.h>
-#include <sys/xattr.h>
-#else
-#error "Your system is not supported!"
-#endif
-
-#include "common/xattr.h"
-
-/*
- * Sets extended attribute on a file.
- * Returns 0 on success, -1 on failure.
- */
-int
-ceph_os_setxattr(const char *path, const char *name,
-    const void *value, size_t size)
-{
-       int error = -1;
-
-#if defined(__FreeBSD__)
-       error = extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, value,
-           size);
-       if (error > 0)
-               error = 0;
-#elif defined(__linux__) 
-       error = setxattr(path, name, value, size, 0);
-#elif defined(__APPLE__)
-       error = setxattr(path, name, value, size, 0 /* position */, 0);
-#endif
-
-       return (error);
-}
-
-int
-ceph_os_fsetxattr(int fd, const char *name, const void *value,
-    size_t size)
-{
-       int error = -1;
-
-#if defined(__FreeBSD__)
-       error = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size);
-       if (error > 0)
-               error = 0;
-#elif defined(__linux__)
-       error = fsetxattr(fd, name, value, size, 0);
-#elif defined(__APPLE__)
-       error = fsetxattr(fd, name, value, size, 0, 0 /* no options should be identical to Linux */ );
-#endif
-
-       return (error);
-}
-
-ssize_t
-ceph_os_getxattr(const char *path, const char *name,
-void *value, size_t size)
-{
-       ssize_t error = -1;
-
-#if defined(__FreeBSD__)
-       if (value == NULL || size == 0) {
-               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, value,
-                   size);
-       } else {
-               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, NULL,
-                   0);
-               if (error > 0) {
-                       if (error > size) {
-                               errno = ERANGE;
-                               error = -1;
-                       } else  {
-                               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER,
-                                   name, value, size);
-                       }
-               }
-       }
-#elif defined(__linux__)
-       error = getxattr(path, name, value, size);
-#elif defined(__APPLE__)
-       error = getxattr(path, name, value, size, 0 /* position  */, 0);
-       /* ENOATTR and ENODATA have different values */
-       if (error < 0 && errno == ENOATTR)
-               errno = ENODATA;
-#endif
-
-       return (error);
-}
-
-ssize_t
-ceph_os_fgetxattr(int fd, const char *name, void *value,
-    size_t size)
-{
-       ssize_t error = -1;
-
-#if defined(__FreeBSD__)
-       if (value == NULL || size == 0) {
-               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, value,
-                   size);
-       } else {
-               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, NULL,
-                   0);
-               if (error > 0) {
-                       if (error > size) {
-                               errno = ERANGE;
-                               error = -1;
-                       } else  {
-                               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER,
-                                   name, value, size);
-                       }
-               }
-       }
-#elif defined(__linux__)
-       error = fgetxattr(fd, name, value, size);
-#elif defined(__APPLE__)
-       error = fgetxattr(fd, name, value, size, 0, 0 /* no options */);
-       /* ENOATTR and ENODATA have different values */
-       if (error < 0 && errno == ENOATTR)
-               errno = ENODATA;
-#endif
-
-       return (error);
-}
-
-ssize_t
-ceph_os_listxattr(const char *path, char *list, size_t size)
-{
-       ssize_t error = -1;
-
-#if defined(__FreeBSD__)
-       /*
-        * XXX. The format of the list FreeBSD returns differs
-        * from the Linux ones.  We have to perform the conversion. :-(
-        */
-       char *newlist, *p, *p1;
-
-       if (size != 0) {
-               newlist = malloc(size);
-               if (newlist != NULL) {
-                       error = extattr_list_file(path, EXTATTR_NAMESPACE_USER,
-                           newlist, size);
-                       if (error > 0) {
-                               p = newlist;
-                               p1 = list;
-                               while ((p - newlist) < error) {
-                                       uint8_t len = *(uint8_t *)p;
-                                       p++;
-                                       if ((p + len - newlist) > error)
-                                               break;
-                                       if (len > 0) {
-                                               bcopy(p, p1, len);
-                                               p += len;
-                                               p1 += len;
-                                               *p1++ = '\0';
-                                       }
-                               }
-                               error = p1 - list;
-                       }
-                       free(newlist);
-               }
-       } else {
-               error = extattr_list_file(path, EXTATTR_NAMESPACE_USER,
-                   list, size);
-       }
-#elif defined(__linux__)
-       error = listxattr(path, list, size);
-#elif defined(__APPLE__)
-       error = listxattr(path, list, size, 0);
-#endif
-
-       return (error);
-}
-
-ssize_t
-ceph_os_flistxattr(int fd, char *list, size_t size)
-{
-       ssize_t error = -1;
-
-#if defined(__FreeBSD__)
-       /*
-        * XXX. The format of the list FreeBSD returns differs
-        * from the Linux ones.  We have to perform the conversion. :-(
-        */
-       char *newlist, *p, *p1;
-
-       if (size != 0) {
-               newlist = malloc(size);
-               if (newlist != NULL) {
-                       error = extattr_list_fd(fd, EXTATTR_NAMESPACE_USER,
-                           newlist, size);
-                       if (error > 0) {
-                               p = newlist;
-                               p1 = list;
-                               while ((p - newlist) < error) {
-                                       uint8_t len = *(uint8_t *)p;
-                                       p++;
-                                       if ((p + len - newlist) > error)
-                                               break;
-                                       if (len > 0) {
-                                               bcopy(p, p1, len);
-                                               p += len;
-                                               p1 += len;
-                                               *p1++ = '\0';
-                                       }
-                               }
-                               error = p1 - list;
-                       }
-                       free(newlist);
-               }
-       } else {
-               error = extattr_list_fd(fd, EXTATTR_NAMESPACE_USER,
-                   list, size);
-       }
-#elif defined(__linux__)
-       error = flistxattr(fd, list, size);
-#elif defined(__APPLE__)
-       error = flistxattr(fd, list, size, 0);
-#endif
-
-       return (error);
-}
-
-int
-ceph_os_removexattr(const char *path, const char *name)
-{
-       int error = -1;
-
-#if defined(__FreeBSD__)
-       error = extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name);
-#elif defined(__linux__)
-       error = removexattr(path, name);
-#elif defined(__APPLE__)
-       error = removexattr(path, name, 0);
-       /* ENOATTR and ENODATA have different values */
-       if (error < 0 && errno == ENOATTR)
-               errno = ENODATA;
-#endif
-
-       return (error);
-}
-
-int
-ceph_os_fremovexattr(int fd, const char *name)
-{
-       int error = -1;
-
-#if defined(__FreeBSD__)
-       error = extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name);
-#elif defined(__linux__)
-       error = fremovexattr(fd, name);
-#elif defined(__APPLE__)
-       error = fremovexattr(fd, name, 0);
-       /* ENOATTR and ENODATA have different values */
-       if (error < 0 && errno == ENOATTR)
-               errno = ENODATA;
-#endif
-
-       return (error);
-}
diff --git a/src/common/xattr.h b/src/common/xattr.h
deleted file mode 100644 (file)
index 15b3561..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2011 Stanislav Sedov <stas@FreeBSD.org>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- */
-
-#ifndef CEPH_EXTATTR_H
-#define CEPH_EXTATTR_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Almost everyone defines ENOATTR, except for Linux,
-// which does #define ENOATTR ENODATA.  It seems that occasionally that
-// isn't defined, though, so let's make sure.
-#ifndef ENOATTR
-# define ENOATTR ENODATA
-#endif
-
-int ceph_os_setxattr(const char *path, const char *name,
-                  const void *value, size_t size);
-int ceph_os_fsetxattr(int fd, const char *name, const void *value,
-                   size_t size);
-ssize_t ceph_os_getxattr(const char *path, const char *name,
-                         void *value, size_t size);
-ssize_t ceph_os_fgetxattr(int fd, const char *name, void *value,
-                          size_t size);
-ssize_t ceph_os_listxattr(const char *path, char *list, size_t size);
-ssize_t ceph_os_flistxattr(int fd, char *list, size_t size);
-int ceph_os_removexattr(const char *path, const char *name);
-int ceph_os_fremovexattr(int fd, const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !CEPH_EXTATTR_H */
index c9de652ee3e97803c7e3e01a7e163a6e848d3219..51894fd9a3c9560dd46922a598886d5061e1f7f2 100644 (file)
@@ -13,6 +13,7 @@ set(libos_srcs
   filestore/IndexManager.cc
   filestore/LFNIndex.cc
   filestore/WBThrottle.cc
+  filestore/os_xattr.c
   memstore/MemStore.cc
   kstore/KStore.cc
   kstore/kstore_types.cc
index 03346afba192565195ea818f4dd8da13d8fac868..d6aceafda17670109d3c2af4fe9a38ef98fe2b87 100644 (file)
@@ -36,7 +36,6 @@
 
 #include "include/linux_fiemap.h"
 
-#include "common/xattr.h"
 #include "chain_xattr.h"
 
 #if defined(__APPLE__) || defined(__FreeBSD__)
index a2d17fa64afce944a3d2bd8914d137d009fd97c8..99c1aedd429bc9afe5620a344a4f8757bb93930f 100644 (file)
@@ -7,7 +7,7 @@
 #include "include/compat.h"
 #include <errno.h>
 #include <stdio.h>
-#include "common/xattr.h"
+#include "os_xattr.h"
 #include "include/ceph_assert.h"
 #include "include/buffer_fwd.h"
 
diff --git a/src/os/filestore/os_xattr.c b/src/os/filestore/os_xattr.c
new file mode 100644 (file)
index 0000000..8de0e1d
--- /dev/null
@@ -0,0 +1,278 @@
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2011 Stanislav Sedov <stas@FreeBSD.org>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ */
+
+#if defined(__FreeBSD__)
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sys/types.h>
+#include <sys/extattr.h>
+#elif defined(__linux__)
+#include <sys/types.h>
+#include <sys/xattr.h>
+#elif defined(__APPLE__)
+#include <errno.h>
+#include <sys/xattr.h>
+#else
+#error "Your system is not supported!"
+#endif
+
+#include "os_xattr.h"
+
+/*
+ * Sets extended attribute on a file.
+ * Returns 0 on success, -1 on failure.
+ */
+int
+ceph_os_setxattr(const char *path, const char *name,
+    const void *value, size_t size)
+{
+       int error = -1;
+
+#if defined(__FreeBSD__)
+       error = extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, value,
+           size);
+       if (error > 0)
+               error = 0;
+#elif defined(__linux__) 
+       error = setxattr(path, name, value, size, 0);
+#elif defined(__APPLE__)
+       error = setxattr(path, name, value, size, 0 /* position */, 0);
+#endif
+
+       return (error);
+}
+
+int
+ceph_os_fsetxattr(int fd, const char *name, const void *value,
+    size_t size)
+{
+       int error = -1;
+
+#if defined(__FreeBSD__)
+       error = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size);
+       if (error > 0)
+               error = 0;
+#elif defined(__linux__)
+       error = fsetxattr(fd, name, value, size, 0);
+#elif defined(__APPLE__)
+       error = fsetxattr(fd, name, value, size, 0, 0 /* no options should be identical to Linux */ );
+#endif
+
+       return (error);
+}
+
+ssize_t
+ceph_os_getxattr(const char *path, const char *name,
+void *value, size_t size)
+{
+       ssize_t error = -1;
+
+#if defined(__FreeBSD__)
+       if (value == NULL || size == 0) {
+               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, value,
+                   size);
+       } else {
+               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, NULL,
+                   0);
+               if (error > 0) {
+                       if (error > size) {
+                               errno = ERANGE;
+                               error = -1;
+                       } else  {
+                               error = extattr_get_file(path, EXTATTR_NAMESPACE_USER,
+                                   name, value, size);
+                       }
+               }
+       }
+#elif defined(__linux__)
+       error = getxattr(path, name, value, size);
+#elif defined(__APPLE__)
+       error = getxattr(path, name, value, size, 0 /* position  */, 0);
+       /* ENOATTR and ENODATA have different values */
+       if (error < 0 && errno == ENOATTR)
+               errno = ENODATA;
+#endif
+
+       return (error);
+}
+
+ssize_t
+ceph_os_fgetxattr(int fd, const char *name, void *value,
+    size_t size)
+{
+       ssize_t error = -1;
+
+#if defined(__FreeBSD__)
+       if (value == NULL || size == 0) {
+               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, value,
+                   size);
+       } else {
+               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, NULL,
+                   0);
+               if (error > 0) {
+                       if (error > size) {
+                               errno = ERANGE;
+                               error = -1;
+                       } else  {
+                               error = extattr_get_fd(fd, EXTATTR_NAMESPACE_USER,
+                                   name, value, size);
+                       }
+               }
+       }
+#elif defined(__linux__)
+       error = fgetxattr(fd, name, value, size);
+#elif defined(__APPLE__)
+       error = fgetxattr(fd, name, value, size, 0, 0 /* no options */);
+       /* ENOATTR and ENODATA have different values */
+       if (error < 0 && errno == ENOATTR)
+               errno = ENODATA;
+#endif
+
+       return (error);
+}
+
+ssize_t
+ceph_os_listxattr(const char *path, char *list, size_t size)
+{
+       ssize_t error = -1;
+
+#if defined(__FreeBSD__)
+       /*
+        * XXX. The format of the list FreeBSD returns differs
+        * from the Linux ones.  We have to perform the conversion. :-(
+        */
+       char *newlist, *p, *p1;
+
+       if (size != 0) {
+               newlist = malloc(size);
+               if (newlist != NULL) {
+                       error = extattr_list_file(path, EXTATTR_NAMESPACE_USER,
+                           newlist, size);
+                       if (error > 0) {
+                               p = newlist;
+                               p1 = list;
+                               while ((p - newlist) < error) {
+                                       uint8_t len = *(uint8_t *)p;
+                                       p++;
+                                       if ((p + len - newlist) > error)
+                                               break;
+                                       if (len > 0) {
+                                               bcopy(p, p1, len);
+                                               p += len;
+                                               p1 += len;
+                                               *p1++ = '\0';
+                                       }
+                               }
+                               error = p1 - list;
+                       }
+                       free(newlist);
+               }
+       } else {
+               error = extattr_list_file(path, EXTATTR_NAMESPACE_USER,
+                   list, size);
+       }
+#elif defined(__linux__)
+       error = listxattr(path, list, size);
+#elif defined(__APPLE__)
+       error = listxattr(path, list, size, 0);
+#endif
+
+       return (error);
+}
+
+ssize_t
+ceph_os_flistxattr(int fd, char *list, size_t size)
+{
+       ssize_t error = -1;
+
+#if defined(__FreeBSD__)
+       /*
+        * XXX. The format of the list FreeBSD returns differs
+        * from the Linux ones.  We have to perform the conversion. :-(
+        */
+       char *newlist, *p, *p1;
+
+       if (size != 0) {
+               newlist = malloc(size);
+               if (newlist != NULL) {
+                       error = extattr_list_fd(fd, EXTATTR_NAMESPACE_USER,
+                           newlist, size);
+                       if (error > 0) {
+                               p = newlist;
+                               p1 = list;
+                               while ((p - newlist) < error) {
+                                       uint8_t len = *(uint8_t *)p;
+                                       p++;
+                                       if ((p + len - newlist) > error)
+                                               break;
+                                       if (len > 0) {
+                                               bcopy(p, p1, len);
+                                               p += len;
+                                               p1 += len;
+                                               *p1++ = '\0';
+                                       }
+                               }
+                               error = p1 - list;
+                       }
+                       free(newlist);
+               }
+       } else {
+               error = extattr_list_fd(fd, EXTATTR_NAMESPACE_USER,
+                   list, size);
+       }
+#elif defined(__linux__)
+       error = flistxattr(fd, list, size);
+#elif defined(__APPLE__)
+       error = flistxattr(fd, list, size, 0);
+#endif
+
+       return (error);
+}
+
+int
+ceph_os_removexattr(const char *path, const char *name)
+{
+       int error = -1;
+
+#if defined(__FreeBSD__)
+       error = extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name);
+#elif defined(__linux__)
+       error = removexattr(path, name);
+#elif defined(__APPLE__)
+       error = removexattr(path, name, 0);
+       /* ENOATTR and ENODATA have different values */
+       if (error < 0 && errno == ENOATTR)
+               errno = ENODATA;
+#endif
+
+       return (error);
+}
+
+int
+ceph_os_fremovexattr(int fd, const char *name)
+{
+       int error = -1;
+
+#if defined(__FreeBSD__)
+       error = extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name);
+#elif defined(__linux__)
+       error = fremovexattr(fd, name);
+#elif defined(__APPLE__)
+       error = fremovexattr(fd, name, 0);
+       /* ENOATTR and ENODATA have different values */
+       if (error < 0 && errno == ENOATTR)
+               errno = ENODATA;
+#endif
+
+       return (error);
+}
diff --git a/src/os/filestore/os_xattr.h b/src/os/filestore/os_xattr.h
new file mode 100644 (file)
index 0000000..15b3561
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2011 Stanislav Sedov <stas@FreeBSD.org>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ */
+
+#ifndef CEPH_EXTATTR_H
+#define CEPH_EXTATTR_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Almost everyone defines ENOATTR, except for Linux,
+// which does #define ENOATTR ENODATA.  It seems that occasionally that
+// isn't defined, though, so let's make sure.
+#ifndef ENOATTR
+# define ENOATTR ENODATA
+#endif
+
+int ceph_os_setxattr(const char *path, const char *name,
+                  const void *value, size_t size);
+int ceph_os_fsetxattr(int fd, const char *name, const void *value,
+                   size_t size);
+ssize_t ceph_os_getxattr(const char *path, const char *name,
+                         void *value, size_t size);
+ssize_t ceph_os_fgetxattr(int fd, const char *name, void *value,
+                          size_t size);
+ssize_t ceph_os_listxattr(const char *path, char *list, size_t size);
+ssize_t ceph_os_flistxattr(int fd, char *list, size_t size);
+int ceph_os_removexattr(const char *path, const char *name);
+int ceph_os_fremovexattr(int fd, const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !CEPH_EXTATTR_H */