The patch titled Remove semi-softlockup from invalidate_mapping_pages has been removed from the -mm tree. Its filename is remove-softlockup-from-invalidate_mapping_pages.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: Remove semi-softlockup from invalidate_mapping_pages From: NeilBrown <neilb@xxxxxxx> If invalidate_mapping_pages is called to invalidate a very large mapping (e.g. a very large block device) and if the only active page in that device is near the end (or at least, at a very large index), such as, say, the superblock of an md array, and if that page happens to be locked when invalidate_mapping_pages is called, then pagevec_lookup will return this page and as it is locked, 'next' will be incremented and pagevec_lookup will be called again. and again. and again. while we count from 0 upto a very large number. We should really always set 'next' to 'page->index+1' before going around the loop again, not just if the page isn't locked. Cc: "Steinar H. Gunderson" <sgunderson@xxxxxxxxxxx> Signed-off-by: Neil Brown <neilb@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- mm/truncate.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff -puN mm/truncate.c~remove-softlockup-from-invalidate_mapping_pages mm/truncate.c --- a/mm/truncate.c~remove-softlockup-from-invalidate_mapping_pages +++ a/mm/truncate.c @@ -230,14 +230,24 @@ unsigned long invalidate_mapping_pages(s pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) { for (i = 0; i < pagevec_count(&pvec); i++) { struct page *page = pvec.pages[i]; + pgoff_t index; + int lock_failed; - if (TestSetPageLocked(page)) { - next++; - continue; - } - if (page->index > next) - next = page->index; + lock_failed = TestSetPageLocked(page); + + /* + * We really shouldn't be looking at the ->index of an + * unlocked page. But we're not allowed to lock these + * pages. So we rely upon nobody altering the ->index + * of this (pinned-by-us) page. + */ + index = page->index; + if (index > next) + next = index; next++; + if (lock_failed) + continue; + if (PageDirty(page) || PageWriteback(page)) goto unlock; if (page_mapped(page)) _ Patches currently in -mm which might be from neilb@xxxxxxx are origin.patch prepare-for-__copy_from_user_inatomic-to-not-zero-missed-bytes.patch make-copy_from_user_inatomic-not-zero-the-tail-on-i386.patch generic_file_buffered_write-deadlock-on-vectored-write.patch kconfig-select-things-at-the-closest-tristate-instead-of-bool.patch dm-mirror-sector-offset-fix.patch md-reformat-code-in-raid1_end_write_request-to-avoid-goto.patch md-remove-arbitrary-limit-on-chunk-size.patch md-remove-useless-ioctl-warning.patch md-increase-the-delay-before-marking-metadata-clean-and-make-it-configurable.patch md-merge-raid5-and-raid6-code.patch md-remove-nuisance-message-at-shutdown.patch md-allow-checkpoint-of-recovery-with-version-1-superblock.patch md-allow-checkpoint-of-recovery-with-version-1-superblock-fix.patch md-allow-a-linear-array-to-have-drives-added-while-active.patch md-support-stripe-offset-mode-in-raid10.patch md-make-md_print_devices-static.patch md-split-reshape-portion-of-raid5-sync_request-into-a-separate-function.patch md-bitmap-fix-online-removal-of-file-backed-bitmaps.patch md-bitmap-remove-bitmap-writeback-daemon.patch md-bitmap-cleaner-separation-of-page-attribute-handlers-in-md-bitmap.patch md-bitmap-use-set_bit-etc-for-bitmap-page-attributes.patch md-bitmap-remove-unnecessary-page-reference-manipulations-from-md-bitmap-code.patch md-bitmap-remove-dead-code-from-md-bitmap.patch md-bitmap-tidy-up-i_writecount-handling-in-md-bitmap.patch md-bitmap-change-md-bitmap-file-handling-to-use-bmap-to-file-blocks.patch md-change-md-bitmap-file-handling-to-use-bmap-to-file-blocks-fix.patch md-calculate-correct-array-size-for-raid10-in-new-offset-mode.patch md-md-kconfig-speeling-feex.patch md-fix-kconfig-error.patch md-fix-bug-that-stops-raid5-resync-from-happening.patch md-allow-re-add-to-work-on-array-without-bitmaps.patch md-dont-write-dirty-clean-update-to-spares-leave-them-alone.patch md-set-get-state-of-array-via-sysfs.patch md-allow-rdev-state-to-be-set-via-sysfs.patch md-allow-raid-layout-to-be-read-and-set-via-sysfs.patch md-allow-resync_start-to-be-set-and-queried-via-sysfs.patch md-allow-the-write_mostly-flag-to-be-set-via-sysfs.patch drivers-md-mdc-make-code-static.patch md-dm-reduce-stack-usage-with-stacked-block-devices.patch lockdep-add-i_mutex-ordering-annotations-to-the-sunrpc.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