Messages in this thread | | | Date | Tue, 26 Feb 2013 18:25:08 +0800 | From | Li Zefan <> | Subject | Re: [PATCH 2/3] cgroup: add cgroup_name() API |
| |
On 2013/2/26 10:27, Tejun Heo wrote: > On Mon, Feb 25, 2013 at 02:17:49PM +0800, Li Zefan wrote: >> cgroup_name() returns the name of a cgroup and it must be called with >> rcu_read_lock() held. >> >> This will be used by cpuset. >> >> Signed-off-by: Li Zefan <lizefan@huawei.com> > ... >> /** >> + * cgroup_name - get the name of a cgroup >> + * @cgrp: the cgroup in question >> + * >> + * Must be called with rcu_read_lock() held. >> + */ >> +char *cgroup_name(const struct cgroup *cgrp) >> +{ >> + if (!cgrp->parent) >> + return "/"; >> + else >> + return rcu_dereference(cgrp->name)->name; >> +} > > Can't we initialize ->name of root cgroup to "/" and lose the > conditional?
Sure we can. We'll have to allocate cgrp->name in cgroup_remount() and cgroup_init(), and free cgrp->name in cgroup_kill_sb(). It looks to me the current version is a bit simpler.
That said, I don't have strong preference. I'll revise the patchset if you still prefer to init root_cgrp->name.
> We can lose the wrapper altogether but if you're worried > that sparse check isn't enough, we can have trivial inline wrapper, > but in that case it probably would help to rename cgrp->name to, say, > cgrp->__name and put a comment directing people to the accessing > wrapper which should probably return const char *. >
I do expect people always use cgroup_name(). Should anyone access cgrp->name directly and doesn't notice cgrp->name can be NULL, he'll get NULL ptr crash and turn to cgroup_name(), and a comment to guide people to cgroup_name() is helpful too.
| |