cgroup: replace cftype->write_string() with cftype->write()
Convert all cftype->write_string() users to the new cftype->write() which maps directly to kernfs write operation and has full access to kernfs and cgroup contexts. The conversions are mostly mechanical. * @css and @cft are accessed using of_css() and of_cft() accessors respectively instead of being specified as arguments. * Should return @nbytes on success instead of 0. * @buf is not trimmed automatically. Trim if necessary. Note that blkcg and netprio don't need this as the parsers already handle whitespaces. cftype->write_string() has no user left after the conversions and removed. While at it, remove unnecessary local variable @p in cgroup_subtree_control_write() and stale comment about CGROUP_LOCAL_BUFFER_SIZE in cgroup_freezer.c. This patch doesn't introduce any visible behavior changes. v2: netprio was missing from conversion. Converted. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Aristeu Rozanski <arozansk@redhat.com> Acked-by: Vivek Goyal <vgoyal@redhat.com> Acked-by: Li Zefan <lizefan@huawei.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@suse.cz> Cc: Neil Horman <nhorman@tuxdriver.com> Cc: "David S. Miller" <davem@davemloft.net>
This commit is contained in:
@@ -253,15 +253,16 @@ static u64 hugetlb_cgroup_read_u64(struct cgroup_subsys_state *css,
|
||||
return res_counter_read_u64(&h_cg->hugepage[idx], name);
|
||||
}
|
||||
|
||||
static int hugetlb_cgroup_write(struct cgroup_subsys_state *css,
|
||||
struct cftype *cft, char *buffer)
|
||||
static ssize_t hugetlb_cgroup_write(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off)
|
||||
{
|
||||
int idx, name, ret;
|
||||
unsigned long long val;
|
||||
struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(css);
|
||||
struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_css(of_css(of));
|
||||
|
||||
idx = MEMFILE_IDX(cft->private);
|
||||
name = MEMFILE_ATTR(cft->private);
|
||||
buf = strstrip(buf);
|
||||
idx = MEMFILE_IDX(of_cft(of)->private);
|
||||
name = MEMFILE_ATTR(of_cft(of)->private);
|
||||
|
||||
switch (name) {
|
||||
case RES_LIMIT:
|
||||
@@ -271,7 +272,7 @@ static int hugetlb_cgroup_write(struct cgroup_subsys_state *css,
|
||||
break;
|
||||
}
|
||||
/* This function does all necessary parse...reuse it */
|
||||
ret = res_counter_memparse_write_strategy(buffer, &val);
|
||||
ret = res_counter_memparse_write_strategy(buf, &val);
|
||||
if (ret)
|
||||
break;
|
||||
ret = res_counter_set_limit(&h_cg->hugepage[idx], val);
|
||||
@@ -280,7 +281,7 @@ static int hugetlb_cgroup_write(struct cgroup_subsys_state *css,
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
return ret ?: nbytes;
|
||||
}
|
||||
|
||||
static int hugetlb_cgroup_reset(struct cgroup_subsys_state *css,
|
||||
@@ -331,7 +332,7 @@ static void __init __hugetlb_cgroup_file_init(int idx)
|
||||
snprintf(cft->name, MAX_CFTYPE_NAME, "%s.limit_in_bytes", buf);
|
||||
cft->private = MEMFILE_PRIVATE(idx, RES_LIMIT);
|
||||
cft->read_u64 = hugetlb_cgroup_read_u64;
|
||||
cft->write_string = hugetlb_cgroup_write;
|
||||
cft->write = hugetlb_cgroup_write;
|
||||
|
||||
/* Add the usage file */
|
||||
cft = &h->cgroup_files[1];
|
||||
|
Reference in New Issue
Block a user