linux/Documentation
KAMEZAWA Hiroyuki f817ed4853 memcg: move all acccounting to parent at rmdir()
This patch provides a function to move account information of a page
between mem_cgroups and rewrite force_empty to make use of this.

This moving of page_cgroup is done under
 - lru_lock of source/destination mem_cgroup is held.
 - lock_page_cgroup() is held.

Then, a routine which touches pc->mem_cgroup without lock_page_cgroup()
should confirm pc->mem_cgroup is still valid or not.  Typical code can be
following.

(while page is not under lock_page())
	mem = pc->mem_cgroup;
	mz = page_cgroup_zoneinfo(pc)
	spin_lock_irqsave(&mz->lru_lock);
	if (pc->mem_cgroup == mem)
		...../* some list handling */
	spin_unlock_irqrestore(&mz->lru_lock);

Of course, better way is
	lock_page_cgroup(pc);
	....
	unlock_page_cgroup(pc);

But you should confirm the nest of lock and avoid deadlock.

If you treats page_cgroup from mem_cgroup's LRU under mz->lru_lock,
you don't have to worry about what pc->mem_cgroup points to.
moved pages are added to head of lru, not to tail.

Expected users of this routine is:
  - force_empty (rmdir)
  - moving tasks between cgroup (for moving account information.)
  - hierarchy (maybe useful.)

force_empty(rmdir) uses this move_account and move pages to its parent.
This "move" will not cause OOM (I added "oom" parameter to try_charge().)

If the parent is busy (not enough memory), force_empty calls try_to_free_page()
and reduce usage.

Purpose of this behavior is
  - Fix "forget all" behavior of force_empty and avoid leak of accounting.
  - By "moving first, free if necessary", keep pages on memory as much as
    possible.

Adding a switch to change behavior of force_empty to
  - free first, move if necessary
  - free all, if there is mlocked/busy pages, return -EBUSY.
is under consideration. (I'll add if someone requtests.)

This patch also removes memory.force_empty file, a brutal debug-only interface.

Reviewed-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Tested-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Paul Menage <menage@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-01-08 08:31:04 -08:00
..
ABI mm: show node to memory section relationship with symlinks in sysfs 2009-01-06 15:59:00 -08:00
accounting .gitignore updates 2008-10-30 11:38:45 -07:00
acpi ACPI: update debug parameter documentation 2008-11-07 21:45:29 -05:00
aoe aoe: user can ask driver to forget previously detected devices 2008-02-08 09:22:31 -08:00
arm Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel 2008-12-29 18:08:11 +00:00
auxdisplay .gitignore updates 2008-10-30 11:38:45 -07:00
blackfin Blackfin arch: Add document about bfin-gpio 2009-01-07 23:14:38 +08:00
block Documentation: remove reference to ll_rw_blk.c and moved drivers/block/elevator.c 2008-12-29 08:28:43 +01:00
blockdev Create/use more directory structure in the Documentation/ tree. 2008-11-14 17:28:53 +00:00
cdrom doc/cdrom: Trvial documentation error, file not present 2008-10-10 08:22:44 +02:00
cgroups cgroups: documentation updates 2009-01-08 08:31:01 -08:00
connector .gitignore updates 2008-10-30 11:38:45 -07:00
console
controllers memcg: move all acccounting to parent at rmdir() 2009-01-08 08:31:04 -08:00
cpu-freq doc: Update sh cpufreq documentation. 2008-12-22 18:44:47 +09:00
cpuidle cpuidle: Add Documentation 2008-02-14 00:16:13 -05:00
cris fix random typos 2008-10-16 11:21:30 -07:00
crypto [CRYPTO] doc: Update api-intro.txt 2008-01-11 08:16:14 +11:00
development-process Add the development process document 2008-10-16 11:51:30 -06:00
device-mapper dm crypt: add documentation 2008-04-25 13:27:03 +01:00
DocBook wimax: Makefile, Kconfig and docbook linkage for the stack 2009-01-07 10:00:17 -08:00
driver-model Driver core: Update some prototypes in platform.txt 2008-02-02 15:14:49 -08:00
dvb V4L/DVB (9812): [PATCH] short help for Technisat cards to select the right configuration 2008-12-30 09:38:35 -02:00
early-userspace Documentation: Remove last references to BitKeeper. 2008-04-21 22:19:05 +00:00
fault-injection
fb [ARM] pxafb: add support for overlay1 and overlay2 as framebuffer devices 2008-12-29 18:00:04 +08:00
filesystems Merge branch 'proc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/adobriyan/proc 2009-01-07 12:01:06 -08:00
firmware_class firmware_sample_driver.c: fix coding style 2008-04-21 22:23:30 +00:00
frv move frv docs one level up 2008-02-03 15:54:28 +02:00
hwmon Merge branch 'hwmon-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6 2009-01-07 11:59:51 -08:00
i2c i2c: The i2c mailing list is moving 2008-10-30 15:55:47 +01:00
i2o
ia64 .gitignore updates 2008-10-30 11:38:45 -07:00
ide ide: update warm-plug HOWTO 2009-01-06 17:21:00 +01:00
infiniband
input Merge commit 'v2.6.28-rc9' into next 2008-12-20 04:54:54 -05:00
ioctl documentation: update header file paths 2009-01-06 15:59:28 -08:00
isdn Rationalise Randy's address a bit 2008-10-30 11:38:47 -07:00
ja_JP HOWTO: Sync patch for jp_JP/HOWTO 2008-10-29 15:03:50 -07:00
kbuild kbuild: fix typos (s/bin_shipped/bin.o_shipped/) in Documentation 2009-01-07 21:44:23 +01:00
kdump powerpc: Support for relocatable kdump kernel 2008-10-22 15:01:22 +11:00
ko_KR HOWTO: update misspelling and word incorrected 2007-12-17 10:33:19 -08:00
laptops trivial: fix an -> a typos in documentation and comments 2009-01-06 11:28:07 +01:00
lguest lguest: move the initial guest page table creation code to the host 2008-12-30 09:26:11 +10:30
m68k [SCSI] 53c7xx: fix removal fallout 2008-01-11 18:22:30 -06:00
make Documentation/make/headers_install.txt 2007-10-17 08:43:05 -07:00
mips documentation: update header file paths 2009-01-06 15:59:28 -08:00
mn10300 mn10300: add the MN10300/AM33 architecture to the kernel 2008-02-08 09:22:30 -08:00
mtd [MTD] [NAND] nand_ecc.c: rewrite for improved performance 2008-08-16 10:55:33 +01:00
namespaces The namespaces compatibility list doc 2007-11-29 09:24:53 -08:00
netlabel
networking trivial: fix an -> a typos in documentation and comments 2009-01-06 11:28:07 +01:00
parisc
PCI PCI: Add pci_clear_master() as opposite of pci_set_master() 2009-01-07 11:13:23 -08:00
pcmcia .gitignore updates 2008-10-30 11:38:45 -07:00
power pm: document use of RTC in pm_trace 2008-10-16 11:21:29 -07:00
powerpc documentation: update header file paths 2009-01-06 15:59:28 -08:00
prctl generic, x86: add tests for prctl PR_GET_TSC and PR_SET_TSC 2008-04-19 19:19:55 +02:00
RCU Merge branch 'core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-12-30 16:10:19 -08:00
s390 documentation: update s390 header file paths 2009-01-06 15:59:28 -08:00
scheduler Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-12-28 12:27:58 -08:00
scsi trivial: Fix misspelling of "firmware" in docs for ncr53c8xx/sym53c8xx 2009-01-06 11:28:09 +01:00
serial Create/use more directory structure in the Documentation/ tree. 2008-11-14 17:28:53 +00:00
sh sh: Kill off remaining CONFIG_SH_KGDB bits. 2008-12-22 18:44:05 +09:00
sound Merge branch 'topic/oxygen' into to-push 2008-12-25 11:40:30 +01:00
sparc sparc: Remove Documentation/sparc/sbus_drivers.txt 2008-08-29 02:15:25 -07:00
spi hwmon: (lm70) Code streamlining and cleanup 2009-01-07 16:37:34 +01:00
sysctl mm: add dirty_background_bytes and dirty_bytes sysctls 2009-01-06 15:59:03 -08:00
telephony remove mention of CONFIG_KMOD from documentation 2008-07-22 19:24:29 +10:00
thermal thermal: update the documentation 2008-04-29 02:49:47 -04:00
timers hpet: /dev/hpet - fixes and cleanup 2008-07-31 18:45:41 +02:00
tracers tracing, doc: update mmiotrace documentation 2008-11-23 20:33:24 +01:00
uml
usb USB: add asynchronous autosuspend/autoresume support 2009-01-07 09:59:53 -08:00
video4linux V4L/DVB (10157): Add USB ID for the Sil4701 radio from DealExtreme 2009-01-02 17:13:56 -02:00
vm mm: remove try_to_munlock from vmscan 2009-01-06 15:59:03 -08:00
w1 hdq: documentation for OMAP HDQ 2008-11-12 17:17:18 -08:00
watchdog .gitignore updates 2008-10-30 11:38:45 -07:00
wimax i2400m: documentation and instructions for usage 2009-01-07 10:00:18 -08:00
x86 documentation: update header file paths 2009-01-06 15:59:28 -08:00
zh_CN Chinese: add translation of Codingstyle 2008-01-24 20:40:04 -08:00
00-INDEX Merge branch 'doc-subdirs' of git://git.kernel.org/pub/scm/linux/kernel/git/rdunlap/linux-docs 2008-11-15 11:51:03 -08:00
applying-patches.txt
atomic_ops.txt documentation: atomic_add_unless() doesn't imply mb() on failure 2008-02-23 17:52:36 -08:00
basic_profiling.txt
binfmt_misc.txt
braille-console.txt Basic braille screen reader support 2008-04-30 08:29:52 -07:00
bt8xxgpio.txt gpio: add bt8xxgpio driver 2008-07-25 10:53:30 -07:00
BUG-HUNTING Documentation: add hint about call traces & module symbols to BUG-HUNTING 2008-02-06 10:41:09 -08:00
c2port.txt Add c2 port support 2008-11-12 17:17:18 -08:00
cachetlb.txt remove unused flush_tlb_pgtables 2007-10-19 11:53:34 -07:00
Changes
CodingStyle documentation: update CodingStyle tips for Emacs users 2008-07-25 10:53:29 -07:00
cpu-hotplug.txt x86: use possible_cpus=NUM to extend the possible cpus allowed 2008-12-18 12:08:05 +01:00
cpu-load.txt
cpusets.txt container freezer: document the cgroup freezer subsystem. 2008-10-20 08:52:34 -07:00
cputopology.txt sysfs: add documentation to cputopology.txt for system cpumasks 2008-12-19 17:47:12 +10:30
credentials.txt CRED: Documentation 2008-11-14 10:39:26 +11:00
dcdbas.txt
debugging-modules.txt Documentation: Clarify when module debugging actually works. 2008-02-03 15:27:38 +02:00
debugging-via-ohci1394.txt firewire: fw-ohci: add option for remote debugging 2008-04-18 17:55:33 +02:00
dell_rbu.txt trivial: fix an -> a typos in documentation and comments 2009-01-06 11:28:07 +01:00
devices.txt USB: add USB test and measurement class driver 2008-10-17 14:40:51 -07:00
DMA-API.txt DMA-API.txt: fix description of pci_map_sg/dma_map_sg scatterlists handling 2008-12-01 19:55:24 -08:00
DMA-attributes.txt powerpc/cell: Add DMA_ATTR_WEAK_ORDERING dma attribute and use in Cell IOMMU code 2008-07-22 10:39:36 +10:00
DMA-ISA-LPC.txt
DMA-mapping.txt documentation: update header file paths 2009-01-06 15:59:28 -08:00
dontdiff dontdiff: more updates to be closer to gitignore 2008-10-16 11:21:31 -07:00
edac.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
eisa.txt
email-clients.txt Documentation/email-clients.txt: add some info about gmail 2008-11-06 15:41:19 -08:00
exception.txt
feature-removal-schedule.txt hwmon: Deprecate the fscher and fscpos drivers 2009-01-07 16:37:33 +01:00
ftrace.txt ftrace: improve documentation 2008-11-28 13:15:14 +01:00
gpio.txt gpiolib: request/free hooks 2008-10-16 11:21:40 -07:00
highuid.txt [SPARC]: Remove SunOS and Solaris binary support. 2008-04-21 15:10:15 -07:00
HOWTO Remove Andrew Morton's http://www.zip.com.au/~akpm/ 2008-10-16 11:21:32 -07:00
hw_random.txt hw_random doc updates 2008-03-24 19:22:19 -07:00
ics932s401 ics932s401: new clock generator chip driver 2008-11-12 17:17:18 -08:00
initrd.txt use the newc archive format as requested by initramfs 2008-02-03 14:54:41 +02:00
Intel-IOMMU.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
io_ordering.txt
io-mapping.txt io mapping: improve documentation 2008-11-03 18:21:44 +01:00
IO-mapping.txt
iostats.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
IPMI.txt IPMI: new NMI handling 2007-10-18 14:37:32 -07:00
IRQ-affinity.txt genirq: Expose default irq affinity mask (take 3) 2008-06-05 15:18:30 +02:00
IRQ.txt
irqflags-tracing.txt
isapnp.txt
java.txt Documentation/java.txt: typo and grammar fixes 2007-10-20 02:37:21 +02:00
kernel-doc-nano-HOWTO.txt documentation: how to use DOC: section blocks 2009-01-06 15:59:28 -08:00
kernel-docs.txt doc: update to URL and status of kernel-docs.txt entry 2008-06-06 11:29:10 -07:00
kernel-parameters.txt Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2009-01-07 15:41:01 -08:00
keys-request-key.txt keys: allow the callout data to be passed as a blob rather than a string 2008-04-29 08:06:16 -07:00
keys.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
kobject.txt kobject: Make Documentation/kobject.txt a little more coherent. 2009-01-06 10:44:32 -08:00
kprobes.txt kprobes: support probing module __exit function 2009-01-06 15:59:21 -08:00
kref.txt docs: convert kref semaphore to mutex 2008-02-06 10:41:09 -08:00
ldm.txt
leds-class.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
local_ops.txt documentation: local_ops fix on_each_cpu 2008-12-01 13:51:26 +01:00
lockdep-design.txt
lockstat.txt lockstat: contend with points 2008-10-20 15:43:10 +02:00
logo.gif
logo.txt
magic-number.txt documentation: update header file paths 2009-01-06 15:59:28 -08:00
Makefile docsrc: build Documentation/ sources 2008-08-12 16:07:30 -07:00
ManagementStyle docs: fix ManagementStyle book name 2008-10-30 11:38:46 -07:00
markers.txt markers: comment marker_synchronize_unregister() on data dependency 2008-11-28 16:47:41 +01:00
mca.txt The ps2esdi driver was marked as BROKEN more than two years ago due to being 2008-03-17 09:03:05 +01:00
md.txt md: Tidy up rdev_size_store a bit: 2008-07-21 14:22:18 +10:00
memory-barriers.txt read_barrier_depends arch fixlets 2008-05-14 10:05:18 -07:00
memory-hotplug.txt mm: show node to memory section relationship with symlinks in sysfs 2009-01-06 15:59:00 -08:00
memory.txt
mono.txt
mutex-design.txt Documentation: Add nested versions of mutex locks to docs 2007-10-20 00:15:26 +02:00
nmi_watchdog.txt x86, nmi-watchdog: update procfs nmi_watchdog file documentation v2 2008-10-30 19:07:04 +01:00
nommu-mmap.txt
numastat.txt
oops-tracing.txt Taint kernel after WARN_ON(condition) 2008-04-29 08:05:59 -07:00
parport-lowlevel.txt plip: fix parport_register_device name parameter 2007-11-26 19:39:01 -08:00
parport.txt
pi-futex.txt
pnp.txt Documentation: Replace obsolete "driverfs" with "sysfs". 2008-01-24 20:40:04 -08:00
preempt-locking.txt
printk-formats.txt DOC: add printk-formats.txt 2008-11-12 17:17:17 -08:00
prio_tree.txt
rbtree.txt
rfkill.txt rfkill: add master_switch_mode and EPO lock to rfkill and rfkill-input 2008-10-31 19:00:09 -04:00
robust-futex-ABI.txt
robust-futexes.txt
rt-mutex-design.txt
rt-mutex.txt
rtc.txt rtc: cleanup example code 2008-02-06 10:41:14 -08:00
SAK.txt Remove Andrew Morton's old email accounts 2008-10-16 11:21:32 -07:00
SecurityBugs
SELinux.txt selinux: add support for installing a dummy policy (v2) 2008-08-27 08:54:08 +10:00
serial-console.txt
sgi-ioc4.txt
sgi-visws.txt
SM501.txt Tweak Documentation/SM501.txt 2007-10-17 08:43:06 -07:00
Smack.txt Smack: Simplified Mandatory Access Control Kernel 2008-02-05 09:44:20 -08:00
sparse.txt kbuild: sparse needs CF not CHECKFLAGS 2008-07-25 22:12:39 +02:00
spinlocks.txt Add additional examples in Documentation/spinlocks.txt 2008-04-11 13:21:14 -06:00
stable_api_nonsense.txt
stable_kernel_rules.txt Update stable tree documentation 2008-10-29 15:03:49 -07:00
SubmitChecklist documentation: explain memory barriers 2008-10-16 11:21:32 -07:00
SubmittingDrivers Remove Andrew Morton's old email accounts 2008-10-16 11:21:32 -07:00
SubmittingPatches Merge branch 'docs' of git://git.lwn.net/linux-2.6 2008-10-16 12:18:16 -07:00
svga.txt
sysfs-rules.txt sysfs-rules.txt: reword API stability statement 2008-07-21 21:54:59 -07:00
sysrq.txt Merge branch 'v28-timers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-10-20 13:19:56 -07:00
tracepoints.txt tracepoints: Documentation TPPROTO misspelt in Documentation/tracepoints.txt 2008-11-29 15:13:42 +01:00
unaligned-memory-access.txt introduce HAVE_EFFICIENT_UNALIGNED_ACCESS Kconfig symbol 2008-07-25 10:53:27 -07:00
unicode.txt
unshare.txt
VGA-softcursor.txt
video-output.txt
volatile-considered-harmful.txt Documentation cleanup: trivial misspelling, punctuation, and grammar corrections. 2008-07-26 12:00:06 -07:00
voyager.txt
zorro.txt