The patch titled VM: don't run touch_buffer() during buffercache lookups has been removed from the -mm tree. Its filename was vm-dont-run-touch_buffer-during-buffercache-lookups.patch This patch was dropped because it was withdrawn The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: VM: don't run touch_buffer() during buffercache lookups From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> When userspace reads a directory or a number of inodes it is very common for the filesystem to be asked to access the same metadata block multiple times in quick succession. Each lookup will run touch_buffer(). As a consequence of this, large amounts of blockdev pagecache end up nailed on the VM's active list, marked as referenced. These pages will cause other active pages to be evicted: mapped executables, swapout, etc. This is probably wrong. The core problem here is that the kernel is treating that sudden burst of accesses to the dirents and inodes as multiple touches. Really we should be treating them as a single touch. So as an experiment, just remove that touch_buffer() call. We don't have any tests to determine the effects of this, and nobody will bother setting one up, so ho hum, this remains in -mm for ever. This change is probably a bit too aggressive - as a followup, filesystems should be taught to run touch_buffer() or mark_page_accessed() against this pagecache on each "independent" access. The problem is, how to determine when they are "independent"? Perhaps "the access was to the first inode in the block" and "the access was to the first directory entry in the block" would suffice. The fs could then implement use-once via: if (first inode in block) { page = find_get_page(...); if (page) mark_page_accessed(page); put_page(page); } I don't think there's any point in doing this until we have some decent testcases. AFACIT ext2 has never run mark_page_accessed() against its directory pagecache, so there is no practical way in which ext2 directories _ever_ find their way onto the inactive list. Nobody appears to have noticed this. touch_buffer() is unused after this patch, but let's retain it for the above reasons. I guess we'll need a new probe_buffer() thing to be able to implement the above use-once algorithm for bh-based metadata. Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/buffer.c | 2 -- 1 file changed, 2 deletions(-) diff -puN fs/buffer.c~vm-dont-run-touch_buffer-during-buffercache-lookups fs/buffer.c --- a/fs/buffer.c~vm-dont-run-touch_buffer-during-buffercache-lookups +++ a/fs/buffer.c @@ -1381,8 +1381,6 @@ __find_get_block(struct block_device *bd if (bh) bh_lru_install(bh); } - if (bh) - touch_buffer(bh); return bh; } EXPORT_SYMBOL(__find_get_block); _ Patches currently in -mm which might be from akpm@xxxxxxxxxxxxxxxxxxxx are mm-remove-the-might_sleep-from-lock_page.patch git-tip.patch markers-make-marker_synchronize_unregister-a-macro.patch git-powerpc.patch git-sparc.patch git-xtensa.patch git-pci.patch git-hid.patch git-v4l-dvb.patch git-v4l-dvb-git-rejects.patch git-nfs.patch git-nfsd.patch git-dlm.patch git-scsi.patch git-tests-fixup.patch git-ext4.patch git-ext4-vs-git-ocfs2.patch git-async_tx.patch git-net.patch git-net-conflicts.patch git-mtd.patch git-vfs-vs-git-ext4.patch git-sound.patch git-sound-vs-git-arm.patch git-input.patch git-block.patch git-block-reject-fix.patch git-pcmcia-git-rejects.patch git-battery.patch git-battery-rejects.patch git-slab-versus-git-tip.patch git-mfd.patch git-drm.patch revert-usb-usb-remove-info-macro-from-usbh.patch revert-usb-usb-remove-warn-macro-from-usbh.patch fix-ttydev-tty-usbserial-kref.patch drivers-mfd-ucb1400_corec-needs-gpio.patch drivers-mfd-ucb1400_corec-further-unbork.patch arch-x86-kernel-early_printkc-remove-unused-enable_debug_console.patch tick-schedc-suppress-needless-timer-reprogramming.patch drivers-input-touchscreen-ucb1400_tsc-needs-gpio.patch led-driver-for-leds-on-pcengines-alix2-and-alix3-boards.patch libata-blackfin-pata-driver-add-proper-pm-operation-into-atapi-driver.patch misdn-misc-timerdev-fixes-fix.patch drivers-net-sfc-falconc-fix-min-warnings.patch backlight-driver-for-tabletkiosk-sahara-touchit-213-tablet-pc.patch drivers-scsi-sdh-use-inlined-c-functions-not-macros.patch scsi-dpt_i2o-is-bust-on-ia64.patch mm-page_allocc-free_area_init_nodes-fix-inappropriate-use-of-enum.patch mm-cleanup-to-make-remove_memory-arch-neutral-fix.patch mm-cleanup-to-make-remove_memory-arch-neutral-fix-fix.patch vm-dont-run-touch_buffer-during-buffercache-lookups.patch vmscan-move-isolate_lru_page-to-vmscanc.patch define-page_file_cache-function.patch vmscan-split-lru-lists-into-anon-file-sets.patch unevictable-lru-infrastructure.patch unevictable-lru-page-statistics.patch mlock-mlocked-pages-are-unevictable.patch mlock-mlocked-pages-are-unevictable-fix.patch mmap-handle-mlocked-pages-during-map-remap-unmap.patch mmap-handle-mlocked-pages-during-map-remap-unmap-mlock-resubmit-locked_vm-adjustment-as-separate-patch-fix.patch vmscan-unevictable-lru-scan-sysctl.patch mlock-make-mlock-error-return-posixly-correct-fix.patch mm-vmallocc-revert-git-tip-change.patch mm-rewrite-vmap-layer-fix.patch mm-rewrite-vmap-layer-fix-fix.patch mm-rewrite-vmap-layer-fix-fix-fix.patch revert-mm-vmallocc-revert-git-tip-change.patch memory_probe-fix-wrong-sysfs-file-attribute-fix.patch mm-use-a-radix-tree-to-make-do_move_pages-complexity-linear-checkpatch-fixes.patch h8300-generic_bug-support-checkpatch-fixes.patch pm-rework-disabling-of-user-mode-helpers-during-suspend-hibernation-cleanup.patch container-freezer-add-tif_freeze-flag-to-all-architectures-fix.patch container-freezer-implement-freezer-cgroup-subsystem-checkpatch-fixes.patch container-freezer-implement-freezer-cgroup-subsystem-uninline-thaw_process-fix.patch eeepc-laptop-use-standard-interfaces-fix-fix.patch separate-atomic_t-declaration-from-asm-atomich-into-asm-atomic_defh.patch make-taint-bit-reliable-v3-fix.patch kernel-sysc-improve-code-generation.patch compat-generic-compat-get-settimeofday-checkpatch-fixes.patch hwmon-pc87360-separate-alarm-files-add-in-min-max-alarms-cleanup.patch hwmon-pc87360-separate-alarm-files-add-temp-min-max-crit-fault-alarms-cleanup.patch hwmon-pc87360-separate-alarm-files-add-therm-min-max-crit-alarms-cleanup.patch drivers-hwmon-applesmcc-remove-unneeded-casts.patch allow-recursion-in-binfmt_script-and-binfmt_misc-fix.patch serial-make-uart_ports-ioport-unsigned-long-fix.patch autofs4-track-uid-and-gid-of-last-mount-requester-fix.patch autofs4-add-miscellaneous-device-for-ioctls-fix.patch autofs4-add-miscellaneous-device-for-ioctls-fix-2.patch rtc-add-device-driver-for-dallas-ds3234-spi-rtc-chip-fix.patch fb-push-down-the-bkl-in-the-ioctl-handler-checkpatch-fixes.patch viafb-viafbmodes-viafbtxt-fix-fix.patch viafb-accelc-accelh-checkpatch-fixes.patch viafb-dvic-dvih-globalc-and-globalh-checkpatch-fixes.patch viafb-hwc-hwh-checkpatch-fixes.patch viafb-viafbdevc-viafbdevh-checkpatch-fixes.patch fbdev-kconfig-update-fix.patch fbdev-allow-more-chip-revisions-in-epson-s1d13-video-driver-cleanups.patch ext2-avoid-printk-floods-in-the-face-of-directory-corruption-checkpatch-fixes.patch ext3-fix-ext3_dx_readdir-hash-collision-handling-checkpatch-fixes.patch cgroups-fix-probable-race-with-put_css_set-and-find_css_set-fix.patch memrlimit-add-memrlimit-controller-accounting-and-control-mm_owner-fix-checkpatch-fixes.patch message-queues-increase-range-limits-checkpatch-fixes.patch applicomc-fix-apparently-broken-code-in-do_ac_read.patch drivers-char-tpm-tpmc-fix-error-patch-memory-leak.patch tpm-addition-of-pnp_remove-checkpatch-fixes.patch w1-be-able-to-manually-add-and-remove-slaves-fix.patch w1-new-driver-ds2431-chip-fix.patch gru-driver-minor-updates-fix.patch drivers-rtc-rtc-bq4802c-dont-use-bin_2_bcd-and-bcd_2_bin.patch x86-sysfs-kill-owner-field-from-attribute-fix.patch x86-sysfs-kill-owner-field-from-attribute-fix-3.patch nilfs2-inode-operations-fix.patch nilfs2-pathname-operations-fix.patch reiser4.patch reiser4-tree_lock-fixes.patch reiser4-tree_lock-fixes-fix.patch reiser4-semaphore-fix.patch slb-drop-kmem-cache-argument-from-constructor-reiser4.patch reiser4-suid.patch reiser4-track-upstream-changes.patch page-owner-tracking-leak-detector.patch nr_blockdev_pages-in_interrupt-warning.patch slab-leaks3-default-y.patch put_bh-debug.patch shrink_slab-handle-bad-shrinkers.patch getblk-handle-2tb-devices.patch getblk-handle-2tb-devices-fix.patch undeprecate-pci_find_device.patch notify_change-callers-must-hold-i_mutex.patch profile-likely-unlikely-macros.patch drivers-net-bonding-bond_sysfsc-suppress-uninitialized-var-warning.patch w1-build-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html