Re: [PATCH 01/21] procfs: kill ->proc_dops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon 24-02-25 21:20:31, Al Viro wrote:
> It has two possible values - one for "forced lookup" entries, another
> for the normal ones.  We'd be better off with that as an explicit
> flag anyway and in addition to that it opens some fun possibilities
> with ->d_op and ->d_flags handling.
> 
> Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>

FWIW I went through the patches and I like them. They look mostly
straightforward enough to me and as good simplifications.

								Honza

> ---
>  fs/proc/generic.c  | 8 +++++---
>  fs/proc/internal.h | 5 +++--
>  2 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/proc/generic.c b/fs/proc/generic.c
> index 8ec90826a49e..499c2bf67488 100644
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -254,7 +254,10 @@ struct dentry *proc_lookup_de(struct inode *dir, struct dentry *dentry,
>  		inode = proc_get_inode(dir->i_sb, de);
>  		if (!inode)
>  			return ERR_PTR(-ENOMEM);
> -		d_set_d_op(dentry, de->proc_dops);
> +		if (de->flags & PROC_ENTRY_FORCE_LOOKUP)
> +			d_set_d_op(dentry, &proc_net_dentry_ops);
> +		else
> +			d_set_d_op(dentry, &proc_misc_dentry_ops);
>  		return d_splice_alias(inode, dentry);
>  	}
>  	read_unlock(&proc_subdir_lock);
> @@ -448,9 +451,8 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
>  	INIT_LIST_HEAD(&ent->pde_openers);
>  	proc_set_user(ent, (*parent)->uid, (*parent)->gid);
>  
> -	ent->proc_dops = &proc_misc_dentry_ops;
>  	/* Revalidate everything under /proc/${pid}/net */
> -	if ((*parent)->proc_dops == &proc_net_dentry_ops)
> +	if ((*parent)->flags & PROC_ENTRY_FORCE_LOOKUP)
>  		pde_force_lookup(ent);
>  
>  out:
> diff --git a/fs/proc/internal.h b/fs/proc/internal.h
> index 1695509370b8..07f75c959173 100644
> --- a/fs/proc/internal.h
> +++ b/fs/proc/internal.h
> @@ -44,7 +44,6 @@ struct proc_dir_entry {
>  		const struct proc_ops *proc_ops;
>  		const struct file_operations *proc_dir_ops;
>  	};
> -	const struct dentry_operations *proc_dops;
>  	union {
>  		const struct seq_operations *seq_ops;
>  		int (*single_show)(struct seq_file *, void *);
> @@ -67,6 +66,8 @@ struct proc_dir_entry {
>  	char inline_name[];
>  } __randomize_layout;
>  
> +#define PROC_ENTRY_FORCE_LOOKUP 2 /* same space as PROC_ENTRY_PERMANENT */
> +
>  #define SIZEOF_PDE	(				\
>  	sizeof(struct proc_dir_entry) < 128 ? 128 :	\
>  	sizeof(struct proc_dir_entry) < 192 ? 192 :	\
> @@ -346,7 +347,7 @@ extern const struct dentry_operations proc_net_dentry_ops;
>  static inline void pde_force_lookup(struct proc_dir_entry *pde)
>  {
>  	/* /proc/net/ entries can be changed under us by setns(CLONE_NEWNET) */
> -	pde->proc_dops = &proc_net_dentry_ops;
> +	pde->flags |= PROC_ENTRY_FORCE_LOOKUP;
>  }
>  
>  /*
> -- 
> 2.39.5
> 
-- 
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux