Add posix ACL support. This implements POSIX over NFSV4 ACL. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> --- fs/nfs/Kconfig | 6 +++++ fs/nfs/Makefile | 1 + fs/nfs/nfs4pacl.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ fs/nfs/nfs4proc.c | 7 +++++- 4 files changed, 75 insertions(+), 1 deletions(-) create mode 100644 fs/nfs/nfs4pacl.c diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig index 2a77bc2..744ea00 100644 --- a/fs/nfs/Kconfig +++ b/fs/nfs/Kconfig @@ -101,3 +101,9 @@ config NFS_FSCACHE help Say Y here if you want NFS data to be cached locally on disc through the general filesystem cache manager + +config NFS4_FS_POSIX_ACL + bool "NFS client support for NFSV4 posix acl support" + depends on NFS_V4 + help + This option enables support for modifying POSIX ACL from NFS clients diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile index 8451598..f888f5c 100644 --- a/fs/nfs/Makefile +++ b/fs/nfs/Makefile @@ -16,3 +16,4 @@ nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \ nfs4namespace.o nfs-$(CONFIG_SYSCTL) += sysctl.o nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o +nfs-$(CONFIG_NFS4_FS_POSIX_ACL) += nfs4pacl.o diff --git a/fs/nfs/nfs4pacl.c b/fs/nfs/nfs4pacl.c new file mode 100644 index 0000000..c1c2b04 --- /dev/null +++ b/fs/nfs/nfs4pacl.c @@ -0,0 +1,62 @@ +#include <linux/fs.h> +#include <linux/nfs.h> +#include <linux/nfs3.h> +#include <linux/nfs_fs.h> +#include <linux/posix_acl_xattr.h> +#include <linux/nfsacl.h> +#include <linux/xattr.h> + +#include "internal.h" + +static size_t nfs4_xattr_list_pacl_default(struct inode *inode, char *list, + size_t list_len, const char *name, + size_t name_len) +{ + return 0; +} + +static int nfs4_xattr_get_pacl_default(struct inode *inode, const char *key, + void *buf, size_t buflen) +{ + return -EOPNOTSUPP; +} + +static int nfs4_xattr_set_pacl_default(struct inode *inode, const char *key, + const void *buf, size_t buflen, int flags) +{ + return -EOPNOTSUPP; +} + +struct xattr_handler nfs4_xattr_pacl_default_handler = { + .prefix = POSIX_ACL_XATTR_DEFAULT, + .list = nfs4_xattr_list_pacl_default, + .get = nfs4_xattr_get_pacl_default, + .set = nfs4_xattr_set_pacl_default, +}; + +static size_t nfs4_xattr_list_pacl_access(struct inode *inode, char *list, + size_t list_len, const char *name, + size_t name_len) +{ + return 0; +} + +static int nfs4_xattr_get_pacl_access(struct inode *inode, const char *key, + void *buf, size_t buflen) +{ + return -EOPNOTSUPP; +} + +static int nfs4_xattr_set_pacl_access(struct inode *inode, const char *key, + const void *buf, size_t buflen, int flags) +{ + return -EOPNOTSUPP; +} + + +struct xattr_handler nfs4_xattr_pacl_access_handler = { + .prefix = POSIX_ACL_XATTR_ACCESS, + .list = nfs4_xattr_list_pacl_access, + .get = nfs4_xattr_get_pacl_access, + .set = nfs4_xattr_set_pacl_access, +}; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index fa60261..eb93426 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -5035,9 +5035,14 @@ struct xattr_handler nfs4_xattr_nfs4_acl_handler = { .get = nfs4_xattr_get_nfs4_acl, .set = nfs4_xattr_set_nfs4_acl, }; - +extern struct xattr_handler nfs4_xattr_pacl_access_handler; +extern struct xattr_handler nfs4_xattr_pacl_default_handler; struct xattr_handler *nfs4_xattr_handlers[] = { &nfs4_xattr_nfs4_acl_handler, +#ifdef CONFIG_NFS4_FS_POSIX_ACL + &nfs4_xattr_pacl_access_handler, + &nfs4_xattr_pacl_default_handler, +#endif NULL }; -- 1.6.4.2.253.g0b1fac -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html