Re: [PATCH 06/21] split d_flags calculation out of d_set_d_op()

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

 



On Mon, Feb 24, 2025 at 09:20:36PM +0000, Al Viro wrote:
> Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
> ---

Reviewed-by: Christian Brauner <brauner@xxxxxxxxxx>

>  fs/dcache.c | 53 ++++++++++++++++++++++++++++++-----------------------
>  1 file changed, 30 insertions(+), 23 deletions(-)
> 
> diff --git a/fs/dcache.c b/fs/dcache.c
> index cd5e5139ca4c..1201149e1e2c 100644
> --- a/fs/dcache.c
> +++ b/fs/dcache.c
> @@ -1811,33 +1811,40 @@ struct dentry *d_alloc_name(struct dentry *parent, const char *name)
>  }
>  EXPORT_SYMBOL(d_alloc_name);
>  
> +#define DCACHE_OP_FLAGS \
> +	(DCACHE_OP_HASH | DCACHE_OP_COMPARE | DCACHE_OP_REVALIDATE | \
> +	 DCACHE_OP_WEAK_REVALIDATE | DCACHE_OP_DELETE | DCACHE_OP_REAL)
> +
> +static unsigned int d_op_flags(const struct dentry_operations *op)
> +{
> +	unsigned int flags = 0;
> +	if (op) {
> +		if (op->d_hash)
> +			flags |= DCACHE_OP_HASH;
> +		if (op->d_compare)
> +			flags |= DCACHE_OP_COMPARE;
> +		if (op->d_revalidate)
> +			flags |= DCACHE_OP_REVALIDATE;
> +		if (op->d_weak_revalidate)
> +			flags |= DCACHE_OP_WEAK_REVALIDATE;
> +		if (op->d_delete)
> +			flags |= DCACHE_OP_DELETE;
> +		if (op->d_prune)
> +			flags |= DCACHE_OP_PRUNE;
> +		if (op->d_real)
> +			flags |= DCACHE_OP_REAL;
> +	}
> +	return flags;
> +}
> +
>  void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
>  {
> +	unsigned int flags = d_op_flags(op);
>  	WARN_ON_ONCE(dentry->d_op);
> -	WARN_ON_ONCE(dentry->d_flags & (DCACHE_OP_HASH	|
> -				DCACHE_OP_COMPARE	|
> -				DCACHE_OP_REVALIDATE	|
> -				DCACHE_OP_WEAK_REVALIDATE	|
> -				DCACHE_OP_DELETE	|
> -				DCACHE_OP_REAL));
> +	WARN_ON_ONCE(dentry->d_flags & DCACHE_OP_FLAGS);
>  	dentry->d_op = op;
> -	if (!op)
> -		return;
> -	if (op->d_hash)
> -		dentry->d_flags |= DCACHE_OP_HASH;
> -	if (op->d_compare)
> -		dentry->d_flags |= DCACHE_OP_COMPARE;
> -	if (op->d_revalidate)
> -		dentry->d_flags |= DCACHE_OP_REVALIDATE;
> -	if (op->d_weak_revalidate)
> -		dentry->d_flags |= DCACHE_OP_WEAK_REVALIDATE;
> -	if (op->d_delete)
> -		dentry->d_flags |= DCACHE_OP_DELETE;
> -	if (op->d_prune)
> -		dentry->d_flags |= DCACHE_OP_PRUNE;
> -	if (op->d_real)
> -		dentry->d_flags |= DCACHE_OP_REAL;
> -
> +	if (flags)
> +		dentry->d_flags |= flags;
>  }
>  EXPORT_SYMBOL(d_set_d_op);
>  
> -- 
> 2.39.5
> 




[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