// ----------
// 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)
{
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();
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);
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);