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

Commit dd37978c authored by Al Viro's avatar Al Viro
Browse files

cache the value of file_inode() in struct file



Note that this thing does *not* contribute to inode refcount;
it's pinned down by dentry.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5e608671
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ struct file *alloc_file(struct path *path, fmode_t mode,
		return file;

	file->f_path = *path;
	file->f_inode = path->dentry->d_inode;
	file->f_mapping = path->dentry->d_inode->i_mapping;
	file->f_mode = mode;
	file->f_op = fop;
@@ -258,6 +259,7 @@ static void __fput(struct file *file)
		drop_file_write_access(file);
	file->f_path.dentry = NULL;
	file->f_path.mnt = NULL;
	file->f_inode = NULL;
	file_free(file);
	dput(dentry);
	mntput(mnt);
+2 −1
Original line number Diff line number Diff line
@@ -689,7 +689,7 @@ static int do_dentry_open(struct file *f,
		f->f_mode = FMODE_PATH;

	path_get(&f->f_path);
	inode = file_inode(f);
	inode = f->f_inode = f->f_path.dentry->d_inode;
	if (f->f_mode & FMODE_WRITE) {
		error = __get_file_write_access(inode, f->f_path.mnt);
		if (error)
@@ -752,6 +752,7 @@ static int do_dentry_open(struct file *f,
	path_put(&f->f_path);
	f->f_path.mnt = NULL;
	f->f_path.dentry = NULL;
	f->f_inode = NULL;
	return error;
}

+2 −1
Original line number Diff line number Diff line
@@ -769,6 +769,7 @@ struct file {
	} f_u;
	struct path		f_path;
#define f_dentry	f_path.dentry
	struct inode		*f_inode;	/* cached value */
	const struct file_operations	*f_op;

	/*
@@ -2217,7 +2218,7 @@ static inline bool execute_ok(struct inode *inode)

static inline struct inode *file_inode(struct file *f)
{
	return f->f_path.dentry->d_inode;
	return f->f_inode;
}

/*