Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a795b58c authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ANDROID: Add optional __get xattr method paired to __vfs_getxattr"

parents 9539071a 8cca945b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence)

	old_cred = ovl_override_creds(inode->i_sb);
	ret = vfs_llseek(real.file, offset, whence);
	revert_creds(old_cred);
	ovl_revert_creds(old_cred);

	file->f_pos = real.file->f_pos;
	inode_unlock(inode);
+10 −1
Original line number Diff line number Diff line
@@ -305,6 +305,9 @@ __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
	handler = xattr_resolve_name(inode, &name);
	if (IS_ERR(handler))
		return PTR_ERR(handler);
	if (unlikely(handler->__get))
		return handler->__get(handler, dentry, inode, name, value,
				      size);
	if (!handler->get)
		return -EOPNOTSUPP;
	return handler->get(handler, dentry, inode, name, value, size);
@@ -316,6 +319,7 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
{
	struct inode *inode = dentry->d_inode;
	int error;
	const struct xattr_handler *handler;

	error = xattr_permission(inode, name, MAY_READ);
	if (error)
@@ -338,7 +342,12 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
		return ret;
	}
nolsm:
	return __vfs_getxattr(dentry, inode, name, value, size);
	handler = xattr_resolve_name(inode, &name);
	if (IS_ERR(handler))
		return PTR_ERR(handler);
	if (!handler->get)
		return -EOPNOTSUPP;
	return handler->get(handler, dentry, inode, name, value, size);
}
EXPORT_SYMBOL_GPL(vfs_getxattr);

+5 −2
Original line number Diff line number Diff line
@@ -30,10 +30,13 @@ struct xattr_handler {
	const char *prefix;
	int flags;      /* fs private flags */
	bool (*list)(struct dentry *dentry);
	int (*get)(const struct xattr_handler *, struct dentry *dentry,
	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
		   struct inode *inode, const char *name, void *buffer,
		   size_t size);
	int (*set)(const struct xattr_handler *, struct dentry *dentry,
	int (*__get)(const struct xattr_handler *handler, struct dentry *dentry,
		     struct inode *inode, const char *name, void *buffer,
		     size_t size);
	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
		   struct inode *inode, const char *name, const void *buffer,
		   size_t size, int flags);
};