Re: [PATCH 3/9] struct file: use anonymous union member for rcuhead and llist

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

 



On Tue 07-06-22 04:10:28, Al Viro wrote:
> Once upon a time we couldn't afford anon unions; these days minimal
> gcc version had been raised enough to take care of that.

This patch misses your Signed-off-by but otherwise it looks good to me.
Feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

								Honza

> ---
>  fs/file_table.c    | 16 ++++++++--------
>  include/linux/fs.h |  6 +++---
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/fs/file_table.c b/fs/file_table.c
> index 5424e3a8df5f..b989e33aacda 100644
> --- a/fs/file_table.c
> +++ b/fs/file_table.c
> @@ -45,7 +45,7 @@ static struct percpu_counter nr_files __cacheline_aligned_in_smp;
>  
>  static void file_free_rcu(struct rcu_head *head)
>  {
> -	struct file *f = container_of(head, struct file, f_u.fu_rcuhead);
> +	struct file *f = container_of(head, struct file, f_rcuhead);
>  
>  	put_cred(f->f_cred);
>  	kmem_cache_free(filp_cachep, f);
> @@ -56,7 +56,7 @@ static inline void file_free(struct file *f)
>  	security_file_free(f);
>  	if (!(f->f_mode & FMODE_NOACCOUNT))
>  		percpu_counter_dec(&nr_files);
> -	call_rcu(&f->f_u.fu_rcuhead, file_free_rcu);
> +	call_rcu(&f->f_rcuhead, file_free_rcu);
>  }
>  
>  /*
> @@ -142,7 +142,7 @@ static struct file *__alloc_file(int flags, const struct cred *cred)
>  	f->f_cred = get_cred(cred);
>  	error = security_file_alloc(f);
>  	if (unlikely(error)) {
> -		file_free_rcu(&f->f_u.fu_rcuhead);
> +		file_free_rcu(&f->f_rcuhead);
>  		return ERR_PTR(error);
>  	}
>  
> @@ -341,13 +341,13 @@ static void delayed_fput(struct work_struct *unused)
>  	struct llist_node *node = llist_del_all(&delayed_fput_list);
>  	struct file *f, *t;
>  
> -	llist_for_each_entry_safe(f, t, node, f_u.fu_llist)
> +	llist_for_each_entry_safe(f, t, node, f_llist)
>  		__fput(f);
>  }
>  
>  static void ____fput(struct callback_head *work)
>  {
> -	__fput(container_of(work, struct file, f_u.fu_rcuhead));
> +	__fput(container_of(work, struct file, f_rcuhead));
>  }
>  
>  /*
> @@ -374,8 +374,8 @@ void fput(struct file *file)
>  		struct task_struct *task = current;
>  
>  		if (likely(!in_interrupt() && !(task->flags & PF_KTHREAD))) {
> -			init_task_work(&file->f_u.fu_rcuhead, ____fput);
> -			if (!task_work_add(task, &file->f_u.fu_rcuhead, TWA_RESUME))
> +			init_task_work(&file->f_rcuhead, ____fput);
> +			if (!task_work_add(task, &file->f_rcuhead, TWA_RESUME))
>  				return;
>  			/*
>  			 * After this task has run exit_task_work(),
> @@ -384,7 +384,7 @@ void fput(struct file *file)
>  			 */
>  		}
>  
> -		if (llist_add(&file->f_u.fu_llist, &delayed_fput_list))
> +		if (llist_add(&file->f_llist, &delayed_fput_list))
>  			schedule_delayed_work(&delayed_fput_work, 1);
>  	}
>  }
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 9ad5e3520fae..6a2a4906041f 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -924,9 +924,9 @@ static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
>  
>  struct file {
>  	union {
> -		struct llist_node	fu_llist;
> -		struct rcu_head 	fu_rcuhead;
> -	} f_u;
> +		struct llist_node	f_llist;
> +		struct rcu_head 	f_rcuhead;
> +	};
>  	struct path		f_path;
>  	struct inode		*f_inode;	/* cached value */
>  	const struct file_operations	*f_op;
> -- 
> 2.30.2
> 
-- 
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