Unverified Commit 04060e78 authored by Christian Brauner's avatar Christian Brauner
Browse files

Merge patch series "backing_file accessors cleanup"

Amir Goldstein <amir73il@gmail.com> says:

As promissed, here is the backing_file accessors cleanup that
was dicussed on the overlayfs pr [1].

I have kept the ovl patch separate from the vfs patch, so that
the vfs patch could be backported to stable kernels, because
the ovl patch depends on master of today.

* patches from https://lore.kernel.org/20250607115304.2521155-1-amir73il@gmail.com:
  ovl: remove unneeded non-const conversion
  fs: constify file ptr in backing_file accessor helpers

Link: https://lore.kernel.org/linux-fsdevel/CAOQ4uxgFJCikAi4o4e9vzXTH=cUQGyvoo+cpdtfmBwJzutSCzw@mail.gmail.com/ [1]
Link: https://lore.kernel.org/20250607115304.2521155-1-amir73il@gmail.com


Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parents bc924136 3ec2529e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ struct file *backing_file_open(const struct path *user_path, int flags,
		return f;

	path_get(user_path);
	*backing_file_user_path(f) = *user_path;
	backing_file_set_user_path(f, user_path);
	error = vfs_open(real_path, f);
	if (error) {
		fput(f);
@@ -65,7 +65,7 @@ struct file *backing_tmpfile_open(const struct path *user_path, int flags,
		return f;

	path_get(user_path);
	*backing_file_user_path(f) = *user_path;
	backing_file_set_user_path(f, user_path);
	error = vfs_tmpfile(real_idmap, real_parentpath, f, mode);
	if (error) {
		fput(f);
+8 −5
Original line number Diff line number Diff line
@@ -52,17 +52,20 @@ struct backing_file {
	};
};

static inline struct backing_file *backing_file(struct file *f)
{
	return container_of(f, struct backing_file, file);
}
#define backing_file(f) container_of(f, struct backing_file, file)

struct path *backing_file_user_path(struct file *f)
struct path *backing_file_user_path(const struct file *f)
{
	return &backing_file(f)->user_path;
}
EXPORT_SYMBOL_GPL(backing_file_user_path);

void backing_file_set_user_path(struct file *f, const struct path *path)
{
	backing_file(f)->user_path = *path;
}
EXPORT_SYMBOL_GPL(backing_file_set_user_path);

static inline void file_free(struct file *f)
{
	security_file_free(f);
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ extern void chroot_fs_refs(const struct path *, const struct path *);
struct file *alloc_empty_file(int flags, const struct cred *cred);
struct file *alloc_empty_file_noaccount(int flags, const struct cred *cred);
struct file *alloc_empty_backing_file(int flags, const struct cred *cred);
void backing_file_set_user_path(struct file *f, const struct path *path);

static inline void file_put_write_access(struct file *file)
{
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ static struct file *ovl_open_realfile(const struct file *file,
		if (!inode_owner_or_capable(real_idmap, realinode))
			flags &= ~O_NOATIME;

		realfile = backing_file_open(file_user_path((struct file *) file),
		realfile = backing_file_open(file_user_path(file),
					     flags, realpath, current_cred());
	}
	ovl_revert_creds(old_cred);
+3 −3
Original line number Diff line number Diff line
@@ -2864,7 +2864,7 @@ struct file *dentry_open_nonotify(const struct path *path, int flags,
				  const struct cred *cred);
struct file *dentry_create(const struct path *path, int flags, umode_t mode,
			   const struct cred *cred);
struct path *backing_file_user_path(struct file *f);
struct path *backing_file_user_path(const struct file *f);

/*
 * When mmapping a file on a stackable filesystem (e.g., overlayfs), the file
@@ -2876,14 +2876,14 @@ struct path *backing_file_user_path(struct file *f);
 * by fstat() on that same fd.
 */
/* Get the path to display in /proc/<pid>/maps */
static inline const struct path *file_user_path(struct file *f)
static inline const struct path *file_user_path(const struct file *f)
{
	if (unlikely(f->f_mode & FMODE_BACKING))
		return backing_file_user_path(f);
	return &f->f_path;
}
/* Get the inode whose inode number to display in /proc/<pid>/maps */
static inline const struct inode *file_user_inode(struct file *f)
static inline const struct inode *file_user_inode(const struct file *f)
{
	if (unlikely(f->f_mode & FMODE_BACKING))
		return d_inode(backing_file_user_path(f)->dentry);