From: Brian Chrisman <brchrisman@gmail.com>
To: ceph-devel@vger.kernel.org
Cc: Brian Chrisman <bchrisman@gmail.com>,
Brian Chrisman <brchrisman@gmail.com>
Subject: [PATCH 1/2] support for xattrs in libceph
Date: Tue, 10 May 2011 12:38:48 -0700 [thread overview]
Message-ID: <1305056329-482-2-git-send-email-brchrisman@gmail.com> (raw)
In-Reply-To: <1305056329-482-1-git-send-email-brchrisman@gmail.com>
From: Brian Chrisman <bchrisman@gmail.com>
Signed-off-by: Brian Chrisman <brchrisman@gmail.com>
---
src/client/Client.cc | 67 +++++++++++++++++++++++++++++++++++++++++++-
src/client/Client.h | 10 ++++++
src/include/ceph/libceph.h | 15 ++++++++++
src/libceph.cc | 42 +++++++++++++++++++++++++++
4 files changed, 133 insertions(+), 1 deletions(-)
diff --git a/src/client/Client.cc b/src/client/Client.cc
index 6a27273..5083e99 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -5563,6 +5563,71 @@ int Client::ll_setattr(vinodeno_t vino, struct stat *attr, int mask, int uid, in
// ----------
// xattrs
+int Client::getxattr(const char *path, const char *name, void *value, size_t size)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, true);
+ return Client::_getxattr(ceph_inode, name, value, size, getuid(), getgid());
+}
+
+int Client::lgetxattr(const char *path, const char *name, void *value, size_t size)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, false);
+ return Client::_getxattr(ceph_inode, name, value, size, getuid(), getgid());
+}
+
+int Client::listxattr(const char *path, char *list, size_t size)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, true);
+ return Client::_listxattr(ceph_inode, list, size, getuid(), getgid());
+}
+
+int Client::llistxattr(const char *path, char *list, size_t size)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, false);
+ return Client::_listxattr(ceph_inode, list, size, getuid(), getgid());
+}
+
+int Client::removexattr(const char *path, const char *name)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, true);
+ return Client::_removexattr(ceph_inode, name, getuid(), getgid());
+}
+
+int Client::lremovexattr(const char *path, const char *name)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, false);
+ return Client::_removexattr(ceph_inode, name, getuid(), getgid());
+}
+
+int Client::setxattr(const char *path, const char *name, const void *value, size_t size, int flags)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, true);
+ return Client::_setxattr(ceph_inode, name, value, size, flags, getuid(), getgid());
+}
+
+int Client::lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags)
+{
+ Mutex::Locker lock(client_lock);
+ Inode *ceph_inode;
+ Client::path_walk(path, &ceph_inode, false);
+ return Client::_setxattr(ceph_inode, name, value, size, flags, getuid(), getgid());
+}
+
+
int Client::_getxattr(Inode *in, const char *name, void *value, size_t size,
int uid, int gid)
{
@@ -5708,7 +5773,7 @@ int Client::ll_removexattr(vinodeno_t vino, const char *name, int uid, int gid)
tout << name << std::endl;
// only user xattrs, for now
- if (strncmp(name, "user.", 5))
+ if (strncmp(name, "user.", 5) && strncmp(name, "security.", 9) && strncmp(name, "trusted.", 8))
return -EOPNOTSUPP;
Inode *in = _ll_get_inode(vino);
diff --git a/src/client/Client.h b/src/client/Client.h
index ab21dc8..b36621d 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -1258,6 +1258,16 @@ public:
int fsync(int fd, bool syncdataonly);
int fstat(int fd, struct stat *stbuf);
+ // full path xattr ops
+ int getxattr(const char *path, const char *name, void *value, size_t size);
+ int lgetxattr(const char *path, const char *name, void *value, size_t size);
+ int listxattr(const char *path, char *list, size_t size);
+ int llistxattr(const char *path, char *list, size_t size);
+ int removexattr(const char *path, const char *name);
+ int lremovexattr(const char *path, const char *name);
+ int setxattr(const char *path, const char *name, const void *value, size_t size, int flags);
+ int lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags);
+
int sync_fs();
int64_t drop_caches();
diff --git a/src/include/ceph/libceph.h b/src/include/ceph/libceph.h
index 3ed3369..f9fc29e 100644
--- a/src/include/ceph/libceph.h
+++ b/src/include/ceph/libceph.h
@@ -121,6 +121,21 @@ int ceph_fstat(struct ceph_mount_info *cmount, int fd, struct stat *stbuf);
int ceph_sync_fs(struct ceph_mount_info *cmount);
+/* xattr support */
+int ceph_getxattr(struct ceph_mount_info *cmount, const char *path, const char *name,
+ void *value, size_t size);
+int ceph_lgetxattr(struct ceph_mount_info *cmount, const char *path, const char *name,
+ void *value, size_t size);
+int ceph_listxattr(struct ceph_mount_info *cmount, const char *path, char *list, size_t size);
+int ceph_llistxattr(struct ceph_mount_info *cmount, const char *path, char *list, size_t size);
+int ceph_removexattr(struct ceph_mount_info *cmount, const char *path, const char *name);
+int ceph_lremovexattr(struct ceph_mount_info *cmount, const char *path, const char *name);
+int ceph_setxattr(struct ceph_mount_info *cmount, const char *path, const char *name,
+ const void *value, size_t size, int flags);
+int ceph_lsetxattr(struct ceph_mount_info *cmount, const char *path, const char *name,
+ const void *value, size_t size, int flags);
+
+
/* expose file layout */
int ceph_get_file_stripe_unit(struct ceph_mount_info *cmount, int fh);
diff --git a/src/libceph.cc b/src/libceph.cc
index d1143d6..6388bde 100644
--- a/src/libceph.cc
+++ b/src/libceph.cc
@@ -416,6 +416,48 @@ extern "C" int ceph_setattr(struct ceph_mount_info *cmount, const char *relpath,
return cmount->get_client()->setattr(relpath, attr, mask);
}
+// *xattr() calls supporting samba/vfs
+extern "C" int ceph_getxattr(struct ceph_mount_info *cmount, const char *path, const char *name, void *value, size_t size)
+{
+ return cmount->get_client()->getxattr(path, name, value, size);
+}
+
+extern "C" int ceph_lgetxattr(struct ceph_mount_info *cmount, const char *path, const char *name, void *value, size_t size)
+{
+ return cmount->get_client()->lgetxattr(path, name, value, size);
+}
+
+extern "C" int ceph_listxattr(struct ceph_mount_info *cmount, const char *path, char *list, size_t size)
+{
+ return cmount->get_client()->listxattr(path, list, size);
+}
+
+extern "C" int ceph_llistxattr(struct ceph_mount_info *cmount, const char *path, char *list, size_t size)
+{
+ return cmount->get_client()->llistxattr(path, list, size);
+}
+
+extern "C" int ceph_removexattr(struct ceph_mount_info *cmount, const char *path, const char *name)
+{
+ return cmount->get_client()->removexattr(path, name);
+}
+
+extern "C" int ceph_lremovexattr(struct ceph_mount_info *cmount, const char *path, const char *name)
+{
+ return cmount->get_client()->lremovexattr(path, name);
+}
+
+extern "C" int ceph_setxattr(struct ceph_mount_info *cmount, const char *path, const char *name, const void *value, size_t size, int flags)
+{
+ return cmount->get_client()->setxattr(path, name, value, size, flags);
+}
+
+extern "C" int ceph_lsetxattr(struct ceph_mount_info *cmount, const char *path, const char *name, const void *value, size_t size, int flags)
+{
+ return cmount->get_client()->lsetxattr(path, name, value, size, flags);
+}
+/* end xattr support */
+
extern "C" int ceph_chmod(struct ceph_mount_info *cmount, const char *path, mode_t mode)
{
return cmount->get_client()->chmod(path, mode);
--
1.7.1
next prev parent reply other threads:[~2011-05-10 19:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-10 19:38 [PATCH 0/2] adding libceph xattr support Brian Chrisman
2011-05-10 19:38 ` Brian Chrisman [this message]
2011-05-10 19:44 ` [PATCH 1/2] support for xattrs in libceph Gregory Farnum
2011-05-10 20:22 ` Brian Chrisman
2011-05-10 20:28 ` Gregory Farnum
2011-05-10 20:34 ` Yehuda Sadeh Weinraub
2011-05-10 20:35 ` Gregory Farnum
2011-05-10 20:30 ` Yehuda Sadeh Weinraub
2011-05-10 19:38 ` [PATCH 2/2] expand testceph to check xattrs Brian Chrisman
2011-05-11 17:29 ` [PATCH 0/2] adding libceph xattr support Sage Weil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1305056329-482-2-git-send-email-brchrisman@gmail.com \
--to=brchrisman@gmail.com \
--cc=bchrisman@gmail.com \
--cc=ceph-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.