From mboxrd@z Thu Jan 1 00:00:00 1970 From: akpm@linux-foundation.org Subject: - pagemap-fixes-to-pagemap_read.patch removed from -mm tree Date: Sun, 06 Jul 2008 20:05:36 -0700 Message-ID: <200807070305.m6735aIL004830@imap1.linux-foundation.org> Reply-To: linux-kernel@vger.kernel.org Return-path: Received: from smtp1.linux-foundation.org ([140.211.169.13]:42012 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753316AbYGGDFu (ORCPT ); Sun, 6 Jul 2008 23:05:50 -0400 Sender: mm-commits-owner@vger.kernel.org List-Id: mm-commits@vger.kernel.org To: akpm@linux-foundation.org, adobriyan@gmail.com, mpm@selenic.com, mm-commits@vger.kernel.org The patch titled pagemap fixes to pagemap_read() has been removed from the -mm tree. Its filename was pagemap-fixes-to-pagemap_read.patch This patch was dropped because it was merged into mainline or a subsystem tree The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: pagemap fixes to pagemap_read() From: Andrew Morton Fix some issues noted by Alexey: - initialize pagemap_walk.mm to "mm" , so the code starts working as advertised - initialize ->private to "&pm" so it wouldn't immediately oops in pagemap_pte_hole() - unstatic struct pagemap_walk, so two threads won't fsckup each other (including those started by root, including flipping ->mm when you don't have permissions) - pagemap_read() contains two calls to ptrace_may_attach(), second one looks unneeded. - avoid possible kmalloc(0) and integer wraparound. Cc: Alexey Dobriyan Cc: Matt Mackall Signed-off-by: Andrew Morton --- fs/proc/task_mmu.c | 72 ++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff -puN fs/proc/task_mmu.c~pagemap-fixes-to-pagemap_read fs/proc/task_mmu.c --- a/fs/proc/task_mmu.c~pagemap-fixes-to-pagemap_read +++ a/fs/proc/task_mmu.c @@ -602,11 +602,6 @@ static int pagemap_pte_range(pmd_t *pmd, return err; } -static struct mm_walk pagemap_walk = { - .pmd_entry = pagemap_pte_range, - .pte_hole = pagemap_pte_hole -}; - /* * /proc/pid/pagemap - an array mapping virtual pages to pfns * @@ -641,6 +636,11 @@ static ssize_t pagemap_read(struct file struct pagemapread pm; int pagecount; int ret = -ESRCH; + struct mm_walk pagemap_walk; + unsigned long src; + unsigned long svpfn; + unsigned long start_vaddr; + unsigned long end_vaddr; if (!task) goto out; @@ -659,11 +659,15 @@ static ssize_t pagemap_read(struct file if (!mm) goto out_task; - ret = -ENOMEM; + uaddr = (unsigned long)buf & PAGE_MASK; uend = (unsigned long)(buf + count); pagecount = (PAGE_ALIGN(uend) - uaddr) / PAGE_SIZE; - pages = kmalloc(pagecount * sizeof(struct page *), GFP_KERNEL); + ret = 0; + if (pagecount == 0) + goto out_mm; + pages = kcalloc(pagecount, sizeof(struct page *), GFP_KERNEL); + ret = -ENOMEM; if (!pages) goto out_mm; @@ -684,33 +688,33 @@ static ssize_t pagemap_read(struct file pm.out = (u64 *)buf; pm.end = (u64 *)(buf + count); - if (!ptrace_may_attach(task)) { - ret = -EIO; - } else { - unsigned long src = *ppos; - unsigned long svpfn = src / PM_ENTRY_BYTES; - unsigned long start_vaddr = svpfn << PAGE_SHIFT; - unsigned long end_vaddr = TASK_SIZE_OF(task); - - /* watch out for wraparound */ - if (svpfn > TASK_SIZE_OF(task) >> PAGE_SHIFT) - start_vaddr = end_vaddr; - - /* - * The odds are that this will stop walking way - * before end_vaddr, because the length of the - * user buffer is tracked in "pm", and the walk - * will stop when we hit the end of the buffer. - */ - ret = walk_page_range(start_vaddr, end_vaddr, - &pagemap_walk); - if (ret == PM_END_OF_BUFFER) - ret = 0; - /* don't need mmap_sem for these, but this looks cleaner */ - *ppos += (char *)pm.out - buf; - if (!ret) - ret = (char *)pm.out - buf; - } + pagemap_walk.pmd_entry = pagemap_pte_range; + pagemap_walk.pte_hole = pagemap_pte_hole; + pagemap_walk.mm = mm; + pagemap_walk.private = ± + + src = *ppos; + svpfn = src / PM_ENTRY_BYTES; + start_vaddr = svpfn << PAGE_SHIFT; + end_vaddr = TASK_SIZE_OF(task); + + /* watch out for wraparound */ + if (svpfn > TASK_SIZE_OF(task) >> PAGE_SHIFT) + start_vaddr = end_vaddr; + + /* + * The odds are that this will stop walking way + * before end_vaddr, because the length of the + * user buffer is tracked in "pm", and the walk + * will stop when we hit the end of the buffer. + */ + ret = walk_page_range(start_vaddr, end_vaddr, &pagemap_walk); + if (ret == PM_END_OF_BUFFER) + ret = 0; + /* don't need mmap_sem for these, but this looks cleaner */ + *ppos += (char *)pm.out - buf; + if (!ret) + ret = (char *)pm.out - buf; out_pages: for (; pagecount; pagecount--) { _ Patches currently in -mm which might be from akpm@linux-foundation.org are revert-introduce-rculisth.patch revert-cpumask-introduce-new-apis.patch linux-next.patch next-remove-localversion.patch linux-next-fixups.patch linux-next-git-rejects.patch fix-kobject-fix-kobject_rename-and-config_sysfs.patch kvm-is-busted-on-ia64.patch drivers-mtd-nand-nandsimc-needs-div64h.patch pci-make-pci_register_driver-a-macro.patch arch-x86-kernel-smpbootc-fix-warning.patch arch-x86-mm-pgtable_32c-remove-unused-variable-fixmaps.patch drivers-media-video-cx18-cx18-av-firmwarec-fix-warning.patch drivers-media-video-uvc-uvc_v4l2c-suppress-uninitialized-var-warning.patch i2c-renesas-highlander-fpga-smbus-support.patch tick-schedc-suppress-needless-timer-reprogramming.patch git-jg-misc-git-rejects.patch drivers-scsi-broadsasc-fix-uninitialised-var-warning.patch documentation-build-source-files-in-documentation-sub-dir-disable.patch mmc-sd-host-driver-for-ricoh-bay1controllers.patch sundance-set-carrier-status-on-link-change-events.patch update-smc91x-driver-with-arm-versatile-board-info.patch git-scsi-misc-fix-scsi_dh-build-errors.patch drivers-scsi-qla2xxx-qla_osc-suppress-uninitialized-var-warning.patch pktcdvd-push-bkl-down-into-driver.patch git-unionfs.patch git-unionfs-fixup.patch git-logfs-fixup.patch drivers-usb-class-cdc-acmc-use-correct-type-for-cpu-flags.patch drivers-usb-class-cdc-wdmc-fix-build-with-config_pm=n.patch watchdog-wdt501-pci-clean-up-coding-style-and-switch-to-unlocked_ioctl.patch git-xtensa.patch scsi-dpt_i2o-is-bust-on-ia64.patch mm-verify-the-page-links-and-memory-model.patch mspec-convert-nopfn-to-fault-fix.patch page-allocator-inlnie-some-__alloc_pages-wrappers-fix.patch kill-generic_file_direct_io-checkpatch-fixes.patch use-generic_access_phys-for-dev-mem-mappings-fix.patch spufs-use-the-new-vm_ops-access-fix.patch fix-soft-lock-up-at-nfs-mount-by-per-sb-lru-list-of-unused-dentries-fix.patch page-flags-record-page-flag-overlays-explicitly-xen.patch mapping_set_error-add-unlikely.patch huge-page-private-reservation-review-cleanups-fix.patch vma-page-offset-has-no-callees-drop-it.patch sync_file_range_write-may-and-will-block-document-that-fix.patch vmallocinfo-add-numa-information-fix.patch hugetlb-modular-state-for-hugetlb-page-size-checkpatch-fixes.patch hugetlb-multiple-hstates-for-multiple-page-sizes-checkpatch-fixes.patch hugetlb-override-default-huge-page-size-ia64-build.patch linux-next-revert-bootmem-add-return-value-to-reserve_bootmem_node.patch revert-linux-next-revert-bootmem-add-return-value-to-reserve_bootmem_node.patch revert-revert-linux-next-revert-bootmem-add-return-value-to-reserve_bootmem_node.patch revert-revert-revert-linux-next-revert-bootmem-add-return-value-to-reserve_bootmem_node.patch bootmem-add-debugging-framework-fix.patch bootmem-clean-up-free_all_bootmem_core-fix.patch bootmem-free-reserve-helpers-fix.patch revert-revert-revert-revert-linux-next-revert-bootmem-add-return-value-to-reserve_bootmem_node.patch bootmem-factor-out-the-marking-of-a-pfn-range-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-v850-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-powerpc-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-arm-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-mips-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-dvb.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-mtd-fix.patch page_align-correctly-handle-64-bit-values-on-32-bit-architectures-powerpc-fixes.patch mmu-notifiers-add-mm_take_all_locks-operation-checkpatch-fixes.patch mmu-notifier-core-checkpatch-fixes.patch mmu-notifier-core-fix.patch mmu-notifier-core-fix-2.patch vmscan-give-referenced-active-and-unmapped-pages-a-second-trip-around-the-lru.patch vm-dont-run-touch_buffer-during-buffercache-lookups.patch security-protect-legacy-apps-from-insufficient-privilege-cleanup.patch security-protect-legacy-applications-from-executing-with-insufficient-privilege-checkpatch-fixes.patch swsusp-provide-users-with-a-hint-about-the-no_console_suspend-option-fix.patch split-the-typecheck-macros-out-of-include-linux-kernelh.patch locking-add-typecheck-on-irqsave-and-friends-for-correct-flags.patch locking-add-typecheck-on-irqsave-and-friends-for-correct-flags-fix.patch remove-apparently-unused-fd1772h-header-file.patch lib-allow-memparse-to-accept-a-null-and-ignorable-second-parm-checkpatch-fixes.patch build-kernel-profileo-only-when-requested-cleanups.patch fs-partition-checkc-fix-return-value-warning-v2-cleanup.patch block-ioctlc-and-fs-partition-checkc-checkpatch-fixes.patch seq_file-fix-bug-when-seq_read-reads-nothing-fix.patch exec-remove-some-includes-fix.patch inflate-refactor-inflate-malloc-code-checkpatch-fixes.patch add-a-warn-macro-this-is-warn_on-printk-arguments-fix.patch flag-parameters-paccept-fix.patch flag-parameters-paccept-sys_ni.patch flag-parameters-anon_inode_getfd-extension-fix.patch flag-parameters-signalfd-fix.patch flag-parameters-eventfd-fix.patch flag-parameters-inotify_init-fix.patch flag-parameters-check-magic-constants-alpha.patch spi-au1550_spi-improve-pio-transfer-mode-checkpatch-fixes.patch gpio-gpio-driver-for-max7301-spi-gpio-expander-checkpatch-fixes.patch gpio-add-bt8xxgpio-driver-checkpatch-fixes.patch gpio-add-bt8xxgpio-driver-checkpatch-fixes-fix.patch gpio-add-bt8xxgpio-driver-checkpatch-fixes-cleanup.patch drivers-video-aty-radeon_basec-notify-user-if-sysfs_create_bin_file-failed-checkpatch-fixes.patch atmel_lcdfb-avoid-division-by-zero-checkpatch-fixes.patch lcd-add-platform_lcd-driver-fix.patch fsl-diu-fb-update-freescale-diu-driver-to-use-page_alloc_exact-fix.patch fbdev-add-new-cobalt-lcd-framebuffer-driver-fix.patch jbd-fix-race-between-free-buffer-and-commit-trasanction-checkpatch-fixes.patch jbd-fix-race-between-free-buffer-and-commit-trasanction-checkpatch-fixes-fix.patch ext3-handle-corrupted-orphan-list-at-mount-cleanup.patch ext3-handle-corrupted-orphan-list-at-mount-fix.patch ext3-handle-corrupted-orphan-list-at-mount-cleanup-fix.patch ext3-handle-deleting-corrupted-indirect-blocks-fix.patch jbd-dont-abort-if-flushing-file-data-failed-fix.patch reiserfs-convert-j_flush_sem-to-mutex.patch reiserfs-convert-j_commit_lock-to-mutex-checkpatch-fixes.patch quota-move-function-macros-from-quotah-to-quotaopsh-jfs-fix.patch quota-move-function-macros-from-quotah-to-quotaopsh-jfs-fix-fix.patch cgroup_clone-use-pid-of-newly-created-task-for-new-cgroup-fix.patch cgroup_clone-use-pid-of-newly-created-task-for-new-cgroup-checkpatch-fixes.patch memcg-remove-refcnt-from-page_cgroup-fix-2.patch workqueues-make-get_online_cpus-useable-for-work-func-fix.patch jbd2-fix-race-between-jbd2_journal_try_to_free_buffers-and-jbd2-commit-transaction-cleanup.patch ipc-semc-convert-undo-structures-to-struct-list_head-checkpatch-fixes.patch ipc-semc-convert-sem_arraysem_pending-to-struct-list_head-checkpatch-fixes.patch ipc-semc-rewrite-undo-list-locking-checkpatch-fixes.patch getdelaysc-add-a-usr1-signal-handler-checkpatch-fixes.patch edac-mpc85xx-fix-pci-ofdev-2nd-pass-checkpatch-fixes.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-sge-fix.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-svc_rdma-fix.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-bnx2x.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-sparc32.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-s2io.patch dma-mapping-add-the-device-argument-to-dma_mapping_error-pasemi_mac.patch dma-mapping-x86-per-device-dma_mapping_ops-support-fix.patch x86-calgary-fix-handling-of-devices-that-arent-behind-the-calgary-checkpatch-fixes.patch tpm-increase-size-of-internal-tpm-response-buffers-checkpatch-fixes.patch memstick-allow-set_param-method-to-return-an-error-code-checkpatch-fixes.patch memstick-use-fully-asynchronous-request-processing-fix.patch full-conversion-to-early_initcall-interface-remove-old-interface-cleanup.patch full-conversion-to-early_initcall-interface-remove-old-interface-fix.patch ppc-use-the-common-ascii-hex-helpers-fix.patch gcov-architecture-specific-compile-flag-adjustments-powerpc-moved-stuff.patch mm-introduce-get_user_pages_fast-fix.patch mm-introduce-get_user_pages_fast-checkpatch-fixes.patch x86-lockless-get_user_pages_fast-checkpatch-fixes.patch x86-lockless-get_user_pages_fast-fix.patch x86-lockless-get_user_pages_fast-fix-2.patch x86-lockless-get_user_pages_fast-fix-2-fix-fix.patch x86-lockless-get_user_pages_fast-fix-warning.patch vmscan-move-isolate_lru_page-to-vmscanc-fix.patch define-page_file_cache-function-fix.patch vmscan-split-lru-lists-into-anon-file-sets-units-fix.patch unevictable-lru-infrastructure-fix.patch unevictable-lru-page-statistics-units-fix.patch mlock-mlocked-pages-are-unevictable-fix.patch mlock-mlocked-pages-are-unevictable-fix-fix.patch mlock-mlocked-pages-are-unevictable-fix-3.patch mmap-handle-mlocked-pages-during-map-remap-unmap-cleanup.patch vmscan-unevictable-lru-scan-sysctl-nommu-fix.patch video-console-sticonrec-make-code-static-checkpatch-fixes.patch reiser4.patch reiser4-tree_lock-fixes.patch reiser4-tree_lock-fixes-fix.patch reiser4-semaphore-fix.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