Message ID | 20200311195954.27117-14-fllinden@amazon.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | server side user xattr support (RFC 8276) | expand |
> On Mar 11, 2020, at 3:59 PM, Frank van der Linden <fllinden@amazon.com> wrote: > > Add a function that checks is an extended attribute namespace is > supported for an inode. > > To be used by the nfs server code when being queried for extended > attributes support. Here's a patch that needs to be cc: linux-fsdevel. Also, perhaps 13/14 and 14/14 could be squashed together. > Signed-off-by: Frank van der Linden <fllinden@amazon.com> > --- > fs/xattr.c | 27 +++++++++++++++++++++++++++ > include/linux/xattr.h | 2 ++ > 2 files changed, 29 insertions(+) > > diff --git a/fs/xattr.c b/fs/xattr.c > index 58013bcbc333..7d0ebab1df30 100644 > --- a/fs/xattr.c > +++ b/fs/xattr.c > @@ -134,6 +134,33 @@ xattr_permission(struct inode *inode, const char *name, int mask) > return inode_permission(inode, mask); > } > > +/* > + * Look for any handler that deals with the specified namespace. > + */ > +int > +xattr_supported_namespace(struct inode *inode, const char *prefix) > +{ > + const struct xattr_handler **handlers = inode->i_sb->s_xattr; > + const struct xattr_handler *handler; > + size_t preflen; > + > + if (!(inode->i_opflags & IOP_XATTR)) { > + if (unlikely(is_bad_inode(inode))) > + return -EIO; > + return -EOPNOTSUPP; > + } > + > + preflen = strlen(prefix); > + > + for_each_xattr_handler(handlers, handler) { > + if (!strncmp(xattr_prefix(handler), prefix, preflen)) > + return 0; > + } > + > + return -EOPNOTSUPP; > +} > +EXPORT_SYMBOL(xattr_supported_namespace); > + > int > __vfs_setxattr(struct dentry *dentry, struct inode *inode, const char *name, > const void *value, size_t size, int flags) > diff --git a/include/linux/xattr.h b/include/linux/xattr.h > index 3a71ad716da5..32e377602068 100644 > --- a/include/linux/xattr.h > +++ b/include/linux/xattr.h > @@ -61,6 +61,8 @@ ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_siz > ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name, > char **xattr_value, size_t size, gfp_t flags); > > +int xattr_supported_namespace(struct inode *inode, const char *prefix); > + > static inline const char *xattr_prefix(const struct xattr_handler *handler) > { > return handler->prefix ?: handler->name; > -- > 2.16.6 > -- Chuck Lever
diff --git a/fs/xattr.c b/fs/xattr.c index 58013bcbc333..7d0ebab1df30 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -134,6 +134,33 @@ xattr_permission(struct inode *inode, const char *name, int mask) return inode_permission(inode, mask); } +/* + * Look for any handler that deals with the specified namespace. + */ +int +xattr_supported_namespace(struct inode *inode, const char *prefix) +{ + const struct xattr_handler **handlers = inode->i_sb->s_xattr; + const struct xattr_handler *handler; + size_t preflen; + + if (!(inode->i_opflags & IOP_XATTR)) { + if (unlikely(is_bad_inode(inode))) + return -EIO; + return -EOPNOTSUPP; + } + + preflen = strlen(prefix); + + for_each_xattr_handler(handlers, handler) { + if (!strncmp(xattr_prefix(handler), prefix, preflen)) + return 0; + } + + return -EOPNOTSUPP; +} +EXPORT_SYMBOL(xattr_supported_namespace); + int __vfs_setxattr(struct dentry *dentry, struct inode *inode, const char *name, const void *value, size_t size, int flags) diff --git a/include/linux/xattr.h b/include/linux/xattr.h index 3a71ad716da5..32e377602068 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h @@ -61,6 +61,8 @@ ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_siz ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, size_t size, gfp_t flags); +int xattr_supported_namespace(struct inode *inode, const char *prefix); + static inline const char *xattr_prefix(const struct xattr_handler *handler) { return handler->prefix ?: handler->name;
Add a function that checks is an extended attribute namespace is supported for an inode. To be used by the nfs server code when being queried for extended attributes support. Signed-off-by: Frank van der Linden <fllinden@amazon.com> --- fs/xattr.c | 27 +++++++++++++++++++++++++++ include/linux/xattr.h | 2 ++ 2 files changed, 29 insertions(+)