Tejun Heo
4bac00d16a
cgroup: load and release pidlists from seq_file start and stop respectively
...
Currently, pidlists are reference counted from file open and release
methods. This means that holding onto an open file may waste memory
and reads may return data which is very stale. Both aren't critical
because pidlists are keyed and shared per namespace and, well, the
user isn't supposed to have large delay between open and reads.
cgroup is planned to be converted to use kernfs and it'd be best if we
can stick to just the seq_file operations - start, next, stop and
show. This can be achieved by loading pidlist on demand from start
and release with time delay from stop, so that consecutive reads don't
end up reloading the pidlist on each iteration. This would remove the
need for hooking into open and release while also avoiding issues with
holding onto pidlist for too long.
The previous patches implemented delayed release and restructured
pidlist handling so that pidlists can be loaded and released from
seq_file start / stop. This patch actually moves pidlist load to
start and release to stop.
This means that pidlist is pinned only between start and stop and may
go away between two consecutive read calls if the two calls are apart
by more than CGROUP_PIDLIST_DESTROY_DELAY. cgroup_pidlist_start()
thus can't re-use the stored cgroup_pid_list_open_file->pidlist
directly. During start, it's only used as a hint indicating whether
this is the first start after open or not and pidlist is always looked
up or created.
pidlist_mutex locking and reference counting are moved out of
pidlist_array_load() so that pidlist_array_load() can perform lookup
and creation atomically. While this enlarges the area covered by
pidlist_mutex, given how the lock is used, it's highly unlikely to be
noticeable.
v2: Refreshed on top of the updated "cgroup: introduce struct
cgroup_pidlist_open_file".
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Li Zefan <lizefan@huawei.com>
2013-11-29 10:42:59 -05:00
..
cpu
sched: Add NEED_RESCHED to the preempt_count
2013-09-25 14:07:49 +02:00
debug
kdb: Add support for external NMI handler to call KGDB/KDB
2013-10-03 18:47:54 +02:00
events
list: introduce list_next_entry() and list_prev_entry()
2013-11-13 12:09:23 +09:00
gcov
gcov: reuse kbasename helper
2013-11-13 12:09:34 +09:00
irq
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2013-11-19 10:40:00 -08:00
locking
locking/lockdep: Mark __lockdep_count_forward_deps() as static
2013-11-13 13:50:17 +01:00
power
Merge branch 'pm-sleep'
2013-11-19 01:07:08 +01:00
printk
printk.c: comments should refer to /proc/vmcore instead of /proc/vmcoreinfo
2013-11-13 12:09:14 +09:00
rcu
This batch of changes is mostly clean ups and small bug fixes.
2013-11-16 12:23:18 -08:00
sched
sched/fair: Avoid integer overflow
2013-11-13 13:33:55 +01:00
time
Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2013-11-12 10:36:00 +09:00
trace
This batch of changes is mostly clean ups and small bug fixes.
2013-11-16 12:23:18 -08:00
.gitignore
acct.c
async.c
audit.c
Merge git://git.infradead.org/users/eparis/audit
2013-11-21 19:18:14 -08:00
audit.h
audit: call audit_bprm() only once to add AUDIT_EXECVE information
2013-11-05 11:15:03 -05:00
audit_tree.c
audit_watch.c
auditfilter.c
audit: do not reject all AUDIT_INODE filter types
2013-11-05 11:09:16 -05:00
auditsc.c
audit: fix type of sessionid in audit_set_loginuid()
2013-11-06 11:47:24 -05:00
backtracetest.c
bounds.c
kernel/bounds: avoid circular dependencies in generated headers
2013-11-19 14:20:12 -08:00
capability.c
xfs: update for v3.12-rc1
2013-09-09 11:19:09 -07:00
cgroup.c
cgroup: load and release pidlists from seq_file start and stop respectively
2013-11-29 10:42:59 -05:00
cgroup_freezer.c
cgroup: make css_for_each_descendant() and friends include the origin css in the iteration
2013-08-08 20:11:27 -04:00
compat.c
configs.c
context_tracking.c
Linux 3.12-rc4
2013-10-09 12:36:13 +02:00
cpu.c
Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2013-11-14 16:55:11 +09:00
cpu_pm.c
cpuset.c
cpuset: Fix memory allocator deadlock
2013-11-27 13:52:47 -05:00
crash_dump.c
cred.c
delayacct.c
kernel/delayacct.c: remove redundant checking in __delayacct_add_tsk()
2013-11-13 12:09:12 +09:00
dma.c
elfcore.c
switch elf_core_write_extra_phdrs() to dump_emit()
2013-11-09 00:16:23 -05:00
exec_domain.c
exit.c
ptrace: revert "Prepare to fix racy accesses on task breakpoints"
2013-07-09 10:33:26 -07:00
extable.c
extable: skip sorting if the table is empty
2013-09-11 15:58:25 -07:00
fork.c
mm: implement split page table lock for PMD level
2013-11-15 09:32:15 +09:00
freezer.c
freezer: set PF_SUSPEND_TASK flag on tasks that call freeze_processes
2013-07-30 14:05:06 +02:00
futex.c
locking: Move the rtmutex code to kernel/locking/
2013-11-06 09:23:59 +01:00
futex_compat.c
groups.c
userns: Kill nsown_capable it makes the wrong thing easy
2013-08-30 23:44:11 -07:00
hrtimer.c
kernel: delete __cpuinit usage from all core kernel files
2013-07-14 19:36:59 -04:00
hung_task.c
Here are the 3.13 KVM changes. There was a lot of work on the PPC
2013-11-15 13:51:36 +09:00
irq_work.c
itimer.c
jump_label.c
static_key: WARN on usage before jump_label_init was called
2013-10-19 19:45:35 -04:00
kallsyms.c
kcmp.c
Kconfig.freezer
Kconfig.hz
kernel: remove CONFIG_USE_GENERIC_SMP_HELPERS
2013-11-15 09:32:22 +09:00
Kconfig.locks
Kconfig.preempt
kexec.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-11-15 16:47:22 -08:00
kmod.c
kernel/kmod.c: check for NULL in call_usermodehelper_exec()
2013-09-30 14:31:02 -07:00
kprobes.c
kprobes: use KSYM_NAME_LEN to size identifier buffers
2013-11-13 12:09:26 +09:00
ksysfs.c
kernel: replace strict_strto*() with kstrto*()
2013-09-12 15:38:03 -07:00
kthread.c
kthread: make kthread_create() killable
2013-11-13 12:08:59 +09:00
latencytop.c
Makefile
Merge branch 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
2013-11-21 19:46:00 -08:00
module-internal.h
KEYS: Separate the kernel signature checking keyring from module signing
2013-09-25 17:17:01 +01:00
module.c
Mainly boring here, too. rmmod --wait finally removed, though.
2013-11-15 13:27:50 +09:00
module_signing.c
keys: change asymmetric keys to use common hash definitions
2013-10-25 17:15:18 -04:00
notifier.c
nsproxy.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2013-09-07 14:35:32 -07:00
padata.c
padata - Register hotcpu notifier after initialization
2013-08-29 14:37:59 +10:00
panic.c
kernel/panic.c: reduce 1 byte usage for print tainted buffer
2013-11-13 12:09:35 +09:00
params.c
kernel/params: fix handling of signed integer types
2013-09-28 12:35:52 -07:00
pid.c
pidns: fix free_pid() to handle the first fork failure
2013-09-30 14:31:03 -07:00
pid_namespace.c
pid_namespace: make freeing struct pid_namespace rcu-delayed
2013-10-24 23:43:29 -04:00
posix-cpu-timers.c
posix-timers.c
profile.c
kernel: delete __cpuinit usage from all core kernel files
2013-07-14 19:36:59 -04:00
ptrace.c
exec/ptrace: fix get_dumpable() incorrect tests
2013-11-13 12:09:33 +09:00
range.c
reboot.c
kernel/reboot.c: re-enable the function of variable reboot_default
2013-09-24 17:00:26 -07:00
relay.c
kernel: delete __cpuinit usage from all core kernel files
2013-07-14 19:36:59 -04:00
res_counter.c
memcg: reduce function dereference
2013-09-12 15:38:02 -07:00
resource.c
kernel/resource.c: remove the unneeded assignment in function __find_resource
2013-07-03 16:08:06 -07:00
seccomp.c
signal.c
constify copy_siginfo_to_user{,32}()
2013-11-09 00:16:29 -05:00
smp.c
kernel: fix generic_exec_single indentation
2013-11-15 09:32:22 +09:00
smpboot.c
kernel: delete __cpuinit usage from all core kernel files
2013-07-14 19:36:59 -04:00
smpboot.h
softirq.c
revert "softirq: Add support for triggering softirq work on softirqs"
2013-11-15 09:32:22 +09:00
stacktrace.c
stop_machine.c
stop_machine: Fix race between stop_two_cpus() and stop_cpus()
2013-11-11 12:43:38 +01:00
sys.c
kernel/sys.c: remove obsolete #include <linux/kexec.h>
2013-11-13 12:09:13 +09:00
sys_ni.c
sysctl.c
Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2013-11-14 16:30:30 +09:00
sysctl_binary.c
kernel/sysctl_binary.c: use scnprintf() instead of snprintf()
2013-11-13 12:09:33 +09:00
system_certificates.S
kernel/system_certificate.S: use real contents instead of macro GLOBAL()
2013-10-30 12:58:00 +00:00
system_keyring.c
KEYS: Make the system 'trusted' keyring viewable by userspace
2013-09-25 17:17:01 +01:00
task_work.c
task_work: documentation
2013-09-11 15:58:27 -07:00
taskstats.c
genetlink: only pass array to genl_register_family_with_ops()
2013-11-19 16:39:05 -05:00
test_kprobes.c
time.c
timeconst.bc
timer.c
sched: Introduce preempt_count accessor functions
2013-09-25 14:07:32 +02:00
tracepoint.c
tsacct.c
uid16.c
userns: Kill nsown_capable it makes the wrong thing easy
2013-08-30 23:44:11 -07:00
up.c
kernel: provide a __smp_call_function_single stub for !CONFIG_SMP
2013-11-15 09:32:22 +09:00
user-return-notifier.c
user.c
KEYS: Add per-user_namespace registers for persistent per-UID kerberos caches
2013-09-24 10:35:19 +01:00
user_namespace.c
KEYS: Add per-user_namespace registers for persistent per-UID kerberos caches
2013-09-24 10:35:19 +01:00
utsname.c
userns: Kill nsown_capable it makes the wrong thing easy
2013-08-30 23:44:11 -07:00
utsname_sysctl.c
watchdog.c
watchdog: update watchdog_thresh properly
2013-09-24 17:00:25 -07:00
workqueue.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-09-06 09:36:28 -07:00
workqueue_internal.h