[PATCH 12/12] cgroup: unify pidlist and other file handling

Li Zefan lizefan at huawei.com
Wed Dec 4 06:20:22 UTC 2013


> +static void *cgroup_seqfile_start(struct seq_file *seq, loff_t *ppos)
> +{
> +	struct cftype *cft = seq_cft(seq);
> +
> +	if (cft->seq_start) {
> +		return cft->seq_start(seq, ppos);
> +	} else {
> +		/*
> +		 * The same behavior and code as single_open().  Returns
> +		 * !NULL if pos is at the beginning; otherwise, NULL.
> +		 */

Isn't it simpler to choose between seq_open() and single_open() depending
on if cft->seq_start is implemented?

> +		return NULL + !*ppos;
> +	}
> +}
...
>  static int cgroup_file_open(struct inode *inode, struct file *file)
>  {
>  	struct cfent *cfe = __d_cfe(file->f_dentry);
> @@ -2338,20 +2384,17 @@ static int cgroup_file_open(struct inode *inode, struct file *file)
>  	WARN_ON_ONCE(cfe->css && cfe->css != css);
>  	cfe->css = css;
>  
> -	if (cft->open) {
> -		err = cft->open(inode, file);
> -	} else {
> -		err = single_open_size(file, cgroup_seqfile_show, cfe,
> -				       sizeof(struct cgroup_open_file));
> -		if (!err) {
> -			struct seq_file *sf = file->private_data;
> -			struct cgroup_open_file *of = sf->private;
> +	err = seq_open_private(file, &cgroup_seq_operations,
> +			       sizeof(struct cgroup_open_file));
> +	if (!err) {
> +		struct seq_file *sf = file->private_data;
> +		struct cgroup_open_file *of = sf->private;
>  
> -			of->cfe = cfe;
> -		}
> +		of->cfe = cfe;
> +		return 0;
>  	}
>  
> -	if (css->ss && err)
> +	if (css->ss)
>  		css_put(css);
>  	return err;
>  }




More information about the Containers mailing list