Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs pile #2 from Al Viro: "Next pile (and there'll be one or two more). The large piece in this one is getting rid of /proc/*/ns/* weirdness; among other things, it allows to (finally) make nameidata completely opaque outside of fs/namei.c, making for easier further cleanups in there" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: coda_venus_readdir(): use file_inode() fs/namei.c: fold link_path_walk() call into path_init() path_init(): don't bother with LOOKUP_PARENT in argument fs/namei.c: new helper (path_cleanup()) path_init(): store the "base" pointer to file in nameidata itself make default ->i_fop have ->open() fail with ENXIO make nameidata completely opaque outside of fs/namei.c kill proc_ns completely take the targets of /proc/*/ns/* symlinks to separate fs bury struct proc_ns in fs/proc copy address of proc_ns_ops into ns_common new helpers: ns_alloc_inum/ns_free_inum make proc_ns_operations work with struct ns_common * instead of void * switch the rest of proc_ns_operations to working with &...->ns netns: switch ->get()/->put()/->install()/->inum() to working with &net->ns make mntns ->get()/->put()/->install()/->inum() work with &mnt_ns->ns common object embedded into various struct ....ns
This commit is contained in:
11
fs/inode.c
11
fs/inode.c
@@ -114,6 +114,11 @@ int proc_nr_inodes(struct ctl_table *table, int write,
|
||||
}
|
||||
#endif
|
||||
|
||||
static int no_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/**
|
||||
* inode_init_always - perform inode structure intialisation
|
||||
* @sb: superblock inode belongs to
|
||||
@@ -125,7 +130,7 @@ int proc_nr_inodes(struct ctl_table *table, int write,
|
||||
int inode_init_always(struct super_block *sb, struct inode *inode)
|
||||
{
|
||||
static const struct inode_operations empty_iops;
|
||||
static const struct file_operations empty_fops;
|
||||
static const struct file_operations no_open_fops = {.open = no_open};
|
||||
struct address_space *const mapping = &inode->i_data;
|
||||
|
||||
inode->i_sb = sb;
|
||||
@@ -133,7 +138,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode)
|
||||
inode->i_flags = 0;
|
||||
atomic_set(&inode->i_count, 1);
|
||||
inode->i_op = &empty_iops;
|
||||
inode->i_fop = &empty_fops;
|
||||
inode->i_fop = &no_open_fops;
|
||||
inode->__i_nlink = 1;
|
||||
inode->i_opflags = 0;
|
||||
i_uid_write(inode, 0);
|
||||
@@ -1798,7 +1803,7 @@ void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev)
|
||||
} else if (S_ISFIFO(mode))
|
||||
inode->i_fop = &pipefifo_fops;
|
||||
else if (S_ISSOCK(mode))
|
||||
inode->i_fop = &bad_sock_fops;
|
||||
; /* leave it no_open_fops */
|
||||
else
|
||||
printk(KERN_DEBUG "init_special_inode: bogus i_mode (%o) for"
|
||||
" inode %s:%lu\n", mode, inode->i_sb->s_id,
|
||||
|
||||
Reference in New Issue
Block a user