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: Al Viro <viro@zeniv.linux.org.uk>
这个提交包含在:
@@ -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);
|
||||
|
@@ -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 @@ cleanup_file:
|
||||
path_put(&f->f_path);
|
||||
f->f_path.mnt = NULL;
|
||||
f->f_path.dentry = NULL;
|
||||
f->f_inode = NULL;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户