The patch titled io-accounting: read accounting has been added to the -mm tree. Its filename is io-accounting-read-accounting.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: io-accounting: read accounting From: Andrew Morton <akpm@xxxxxxxx> Account for the number of storage-level byte reads which this process caused to happen. This is a bit trickier due to the need to ->readpages. It's OK if the filesystem is using all the generic stuff, but if the filesystem is going it alone then more work is needed. Perhaps all this should have been done at the submit_bio level. But that would subvert things like NFS, and NFS is an open question at this stage. We don't account for things like filesystem metadata reads yet. Cc: Jay Lan <jlan@xxxxxxx> Cc: Shailabh Nagar <nagar@xxxxxxxxxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxx> Cc: Chris Sturtivant <csturtiv@xxxxxxx> Cc: Tony Ernst <tee@xxxxxxx> Cc: Guillaume Thouvenin <guillaume.thouvenin@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/mpage.c | 2 ++ fs/namei.c | 2 +- fs/splice.c | 4 ++-- include/linux/pagemap.h | 11 ++++++++++- mm/filemap.c | 13 +++++++------ mm/readahead.c | 2 +- 6 files changed, 23 insertions(+), 11 deletions(-) diff -puN fs/mpage.c~io-accounting-read-accounting fs/mpage.c --- a/fs/mpage.c~io-accounting-read-accounting +++ a/fs/mpage.c @@ -19,6 +19,7 @@ #include <linux/bio.h> #include <linux/fs.h> #include <linux/buffer_head.h> +#include <linux/task_io_accounting_ops.h> #include <linux/blkdev.h> #include <linux/highmem.h> #include <linux/prefetch.h> @@ -402,6 +403,7 @@ mpage_readpages(struct address_space *ma list_del(&page->lru); if (!add_to_page_cache(page, mapping, page->index, GFP_KERNEL)) { + task_io_accounting_account_read(PAGE_CACHE_SIZE); bio = do_mpage_readpage(bio, page, nr_pages - page_idx, &last_block_in_bio, &map_bh, diff -puN fs/namei.c~io-accounting-read-accounting fs/namei.c --- a/fs/namei.c~io-accounting-read-accounting +++ a/fs/namei.c @@ -2725,7 +2725,7 @@ retry: * OTOH it's obviously correct and should make the page up-to-date. */ if (!PageUptodate(page)) { - err = mapping->a_ops->readpage(NULL, page); + err = do_readpage(mapping, NULL, page); if (err != AOP_TRUNCATED_PAGE) wait_on_page_locked(page); } else { diff -puN fs/splice.c~io-accounting-read-accounting fs/splice.c --- a/fs/splice.c~io-accounting-read-accounting +++ a/fs/splice.c @@ -403,7 +403,7 @@ __generic_file_splice_read(struct file * /* * need to read in the page */ - error = mapping->a_ops->readpage(in, page); + error = do_readpage(mapping, in, page); if (unlikely(error)) { /* * We really should re-lookup the page here, @@ -625,7 +625,7 @@ find_page: */ if (!PageUptodate(page)) { if (this_len < PAGE_CACHE_SIZE) { - ret = mapping->a_ops->readpage(file, page); + ret = do_readpage(mapping, file, page); if (unlikely(ret)) goto out; diff -puN include/linux/pagemap.h~io-accounting-read-accounting include/linux/pagemap.h --- a/include/linux/pagemap.h~io-accounting-read-accounting +++ a/include/linux/pagemap.h @@ -9,9 +9,11 @@ #include <linux/list.h> #include <linux/highmem.h> #include <linux/compiler.h> -#include <asm/uaccess.h> +#include <linux/task_io_accounting_ops.h> #include <linux/gfp.h> +#include <asm/uaccess.h> + /* * Bits in mapping->flags. The lower __GFP_BITS_SHIFT bits are the page * allocation mode flags. @@ -232,4 +234,11 @@ static inline void fault_in_pages_readab } } +static inline int do_readpage(struct address_space *mapping, struct file *file, + struct page *page) +{ + task_io_accounting_account_read(PAGE_CACHE_SIZE); + return mapping->a_ops->readpage(file, page); +} + #endif /* _LINUX_PAGEMAP_H */ diff -puN mm/filemap.c~io-accounting-read-accounting mm/filemap.c --- a/mm/filemap.c~io-accounting-read-accounting +++ a/mm/filemap.c @@ -990,7 +990,7 @@ page_not_up_to_date: readpage: /* Start the actual read. The read will unlock the page. */ - error = mapping->a_ops->readpage(filp, page); + error = do_readpage(mapping, filp, page); if (unlikely(error)) { if (error == AOP_TRUNCATED_PAGE) { @@ -1311,7 +1311,7 @@ static int fastcall page_cache_read(stru ret = add_to_page_cache_lru(page, mapping, offset, GFP_KERNEL); if (ret == 0) - ret = mapping->a_ops->readpage(file, page); + ret = do_readpage(mapping, file, page); else if (ret == -EEXIST) ret = 0; /* losing race to add is OK */ @@ -1483,7 +1483,7 @@ page_not_uptodate: goto success; } - error = mapping->a_ops->readpage(file, page); + error = do_readpage(mapping, file, page); if (!error) { wait_on_page_locked(page); if (PageUptodate(page)) @@ -1514,7 +1514,7 @@ page_not_uptodate: goto success; } ClearPageError(page); - error = mapping->a_ops->readpage(file, page); + error = do_readpage(mapping, file, page); if (!error) { wait_on_page_locked(page); if (PageUptodate(page)) @@ -1604,7 +1604,7 @@ page_not_uptodate: goto success; } - error = mapping->a_ops->readpage(file, page); + error = do_readpage(mapping, file, page); if (!error) { wait_on_page_locked(page); if (PageUptodate(page)) @@ -1634,7 +1634,7 @@ page_not_uptodate: } ClearPageError(page); - error = mapping->a_ops->readpage(file, page); + error = do_readpage(mapping, file, page); if (!error) { wait_on_page_locked(page); if (PageUptodate(page)) @@ -1774,6 +1774,7 @@ repeat: } page = cached_page; cached_page = NULL; + task_io_accounting_account_read(PAGE_CACHE_SIZE); err = filler(data, page); if (err < 0) { page_cache_release(page); diff -puN mm/readahead.c~io-accounting-read-accounting mm/readahead.c --- a/mm/readahead.c~io-accounting-read-accounting +++ a/mm/readahead.c @@ -178,7 +178,7 @@ static int read_pages(struct address_spa list_del(&page->lru); if (!add_to_page_cache(page, mapping, page->index, GFP_KERNEL)) { - mapping->a_ops->readpage(filp, page); + do_readpage(mapping, filp, page); if (!pagevec_add(&lru_pvec, page)) __pagevec_lru_add(&lru_pvec); } else _ Patches currently in -mm which might be from akpm@xxxxxxxx are origin.patch git-acpi.patch video-sysfs-support-take-2-add-dev-argument-for-backlight_device_register.patch acpi-asus-s3-resume-fix.patch sony_apci-resume.patch video-sysfs-support-take-2-add-dev-argument-for-backlight_device_register-sony_acpi-fix.patch git-cpufreq-prep.patch git-cpufreq.patch git-powerpc.patch fix-gregkh-driver-sound-device.patch git-dvb.patch git-dvb-fixup.patch git-gfs2-nmw.patch git-ia64.patch git-input.patch git-input-fixup.patch git-libata-all.patch via-pata-controller-xfer-fixes-fix.patch git-mtd.patch git-netdev-all.patch git-netdev-all-fixup.patch libphy-dont-do-that.patch update-smc91x-driver-with-arm-versatile-board-info.patch drivers-net-ns83820c-add-paramter-to-disable-auto.patch git-net.patch net-uninline-skb_put.patch ioat-warning-fix.patch tidy-gregkh-pci-pci-check-szhi-when-sz-is-0-when-64-bit-iomem-bigger-than-4g.patch fix-gregkh-pci-pci-check-szhi-when-sz-is-0-when-64-bit-iomem-bigger-than-4g.patch fix-2-gregkh-pci-pci-check-szhi-when-sz-is-0-when-64-bit-iomem-bigger-than-4g.patch git-scsi-misc.patch drivers-scsi-mca_53c9xc-save_flags-cli-removal.patch nokia-e70-is-an-unusual-device.patch git-watchdog.patch pre-x86_64-mm-i386-reloc-abssym.patch post-x86_64-mm-i386-reloc-abssym.patch touchkit-ps-2-touchscreen-driver.patch get-rid-of-zone_table.patch new-scheme-to-preempt-swap-token-tidy.patch balance_pdgat-cleanup.patch add-numa-node-information-to-struct-device-tidy.patch node-aware-skb-allocation-fix-for-device-tree-changes.patch radix-tree-rcu-lockless-readside.patch acx1xx-wireless-driver.patch security-introduce-file-caps-tweaks.patch security-introduce-file-caps-warning-fix.patch swsusp-add-resume_offset-command-line-parameter-rev-2.patch add-include-linux-freezerh-and-move-definitions-from-ueagle-fix.patch cciss-set-sector_size-to-2048-for-performance-tidy.patch deprecate-smbfs-in-favour-of-cifs.patch edac-new-opteron-athlon64-memory-controller-driver.patch kbuild-dont-put-temp-files-in-the-source-tree.patch lockdep-annotate-nfs-nfsd-in-kernel-sockets-tidy.patch drivers-add-lcd-support-3-Kconfig-fix.patch probe_kernel_address-needs-to-do-set_fs.patch slab-use-probe_kernel_address.patch lockdep-spin_lock_irqsave_nested-fix.patch lockdep-spin_lock_irqsave_nested-fix-2.patch aio-use-prepare_to_wait.patch exar-quad-port-serial-fix.patch vfs_getattr-remove-dead-code.patch ext3-uninline-large-functions.patch ext4-uninline-large-functions.patch uninline-module_put.patch sleep-profiling-fixes.patch sleep-profiling-fix.patch debug-workqueue-locking-sanity-fix.patch pcengines-wrap-led-support-fix.patch driver-base-memoryc-remove-warnings-of.patch remove-kernel-syscalls-x86_64-fix.patch protect-ext2-ioctl-modifying-append_only-immutable-etc-with-i_mutex.patch remove-hash_highmem.patch elf-fix-kcore-note-size-calculation-fix.patch reiserfs-add-missing-d-cache-flushing-tweak.patch io-accounting-remove-current-io-accounting.patch io-accounting-core-statistics.patch clean-up-__set_page_dirty_nobuffers.patch io-accounting-write-accounting.patch io-accounting-write-cancel-accounting.patch io-accounting-read-accounting.patch io-accounting-direct-io.patch io-accounting-report-in-procfs.patch cleanup-taskstatsh.patch io-accounting-via-taskstats.patch getdelays-various-fixes.patch ext2-reservations.patch ext2-reservations-fix-42.patch ext2-reservations-fix-ext2_new_blocks-type.patch ext2-reservations-fix-ext2_new_block-type.patch pktcdvd-bio-write-congestion-using-blk_congestion_wait-fix.patch bug-test-1.patch fsstack-introduce-fsstack_copy_attrinode_-tidy.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-fix.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-vs-git-cryptodev.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-ppc-fix.patch add-process_session-helper-routine-deprecate-old-field-tidy.patch add-process_session-helper-routine-deprecate-old-field-fix-warnings.patch add-process_session-helper-routine-deprecate-old-field-fix-warnings-2.patch mxser-session-warning-fix.patch tty-switch-to-ktermios-and-new-framework-warning-fix.patch tty-switch-to-ktermios-bluetooth-fix.patch tty_ioctl-use-termios-for-the-old-structure-and-termios2-fix.patch char-istallion-correct-fail-paths-fix.patch drivers-isdn-handcrafted-min-max-macro-removal-fix.patch fault-injection-capabilities-infrastructure-tidy.patch fault-injection-capabilities-infrastructure-tweaks.patch fault-injection-Kconfig-cleanup.patch fault-injection-stacktrace-filtering-kconfig-fix.patch kernel-schedc-whitespace-cleanups-more.patch swap_prefetch-vs-zoned-counters.patch add-include-linux-freezerh-and-move-definitions-from-prefetch.patch readahead-minmax_ra_pages.patch readahead-sysctl-parameters.patch make-copy_from_user_inatomic-not-zero-the-tail-on-i386-vs-reiser4.patch resier4-add-include-linux-freezerh-and-move-definitions-from.patch make-kmem_cache_destroy-return-void-reiser4.patch reiser4-hardirq-include-fix.patch reiser4-run-truncate_inode_pages-in-reiser4_delete_inode.patch reiser4-get_sb_dev-fix.patch reiser4-vs-zoned-allocator.patch reiser4-temp-fix.patch hpt3xx-rework-rate-filtering-tidy.patch video-get-the-default-mode-from-the-right-database-fb-modedb-uses-wrong-default_mode-fix.patch various-fbdev-files-mark-structs-fix.patch md-allow-reads-that-have-bypassed-the-cache-to-be-retried-on-failure-fix.patch statistics-infrastructure-fix-buffer-overflow-in-histogram-with-linear-tidy.patch extend-notifier_call_chain-to-count-nr_calls-made.patch define-and-use-new-eventscpu_lock_acquire-and-cpu_lock_release-fix.patch gtod-persistent-clock-support-i386.patch updated-hrtimers-state-tracking.patch updated-i386-convert-to-clock-event-devices.patch updated-i386-convert-to-clock-event-devices-fix.patch updated-gtod-mark-tsc-unusable-for-highres-timers.patch round_jiffies-infrastructure-fix.patch clocksource-small-cleanup-2-fix.patch kevent_user_wait-retval-fix.patch kevent-v23-socket-notifications-fix-again.patch kevent-timer-notifications-fix.patch nr_blockdev_pages-in_interrupt-warning.patch device-suspend-debug.patch mutex-subsystem-synchro-test-module-fix.patch slab-leaks3-default-y.patch x86-kmap_atomic-debugging.patch restore-rogue-readahead-printk.patch put_bh-debug.patch e1000-printk-warning-fixes.patch acpi_format_exception-debug.patch jmicron-warning-fix.patch squash-ipc-warnings.patch squash-udf-warnings.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