The patch titled grow_buffers() infinite loop fix has been removed from the -mm tree. Its filename is grow_buffers-infinite-loop-fix.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: grow_buffers() infinite loop fix From: Andrew Morton <akpm@xxxxxxxx> If grow_buffers() is for some reason passed a block number which wants to lie outside the maximum-addressable pagecache range (PAGE_SIZE * 4G bytes) then it will accidentally truncate `index' and will then instnatiate a page at the wrong pagecache offset. This causes __getblk_slow() to go into an infinite loop. This can happen with corrupted disks, or with software errors elsewhere. Detect that, and handle it. Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- fs/buffer.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff -puN fs/buffer.c~grow_buffers-infinite-loop-fix fs/buffer.c --- a/fs/buffer.c~grow_buffers-infinite-loop-fix +++ a/fs/buffer.c @@ -1042,8 +1042,21 @@ grow_buffers(struct block_device *bdev, } while ((size << sizebits) < PAGE_SIZE); index = block >> sizebits; - block = index << sizebits; + /* + * Check for a block which wants to lie outside our maximum possible + * pagecache index. (this comparison is done using sector_t types). + */ + if (unlikely(index != block >> sizebits)) { + char b[BDEVNAME_SIZE]; + + printk(KERN_ERR "%s: requested out-of-range block %llu for " + "device %s\n", + __FUNCTION__, (unsigned long long)block, + bdevname(bdev, b)); + return -EIO; + } + block = index << sizebits; /* Create a page with the proper size buffers.. */ page = grow_dev_page(bdev, block, index, size); if (!page) @@ -1070,12 +1083,16 @@ __getblk_slow(struct block_device *bdev, for (;;) { struct buffer_head * bh; + int ret; bh = __find_get_block(bdev, block, size); if (bh) return bh; - if (!grow_buffers(bdev, block, size)) + ret = grow_buffers(bdev, block, size); + if (ret < 0) + return NULL; + if (ret == 0) free_more_memory(); } } _ Patches currently in -mm which might be from akpm@xxxxxxxx are origin.patch revert-pci-quirk-for-ibm-dock-ii-cardbus-controllers.patch git-acpi.patch i386-acpi-build-fix.patch acpi-asus-s3-resume-fix.patch sony_apci-resume.patch git-cifs-fixup.patch cifs-kconfig-dont-select-connector.patch git-dvb-build-fix.patch w1-kconfig-fix.patch git-geode-fixup.patch git-gfs2.patch git-infiniband.patch git-input-fixup.patch git-libata-all.patch mtd-maps-support-for-bios-flash-chips-on-intel-esb2-southbridge.patch git-netdev-all.patch libphy-dont-do-that.patch drivers-net-ns83820c-add-paramter-to-disable-auto.patch git-pcmcia-fixup.patch git-serial-fixup.patch git-scsi-target-fixup.patch git-scsi-target-vs-git-block.patch fix-gregkh-usb-usbatm-fix-tiny-race.patch xpad-dance-pad-support.patch git-watchdog.patch x86_64-dump_trace-atomicity-fix.patch spinlock-debug-all-cpu-backtrace.patch spinlock-debug-all-cpu-backtrace-fix.patch spinlock-debug-all-cpu-backtrace-fix-2.patch spinlock-debug-all-cpu-backtrace-fix-3.patch xfs-rename-uio_read.patch touchkit-ps-2-touchscreen-driver-regs-fix.patch get-rid-of-zone_table.patch new-scheme-to-preempt-swap-token-tidy.patch radix-tree-rcu-lockless-readside.patch acx1xx-wireless-driver.patch swsusp-add-resume_offset-command-line-parameter-rev-2.patch deprecate-smbfs-in-favour-of-cifs.patch edac-new-opteron-athlon64-memory-controller-driver.patch add-address_space_operationsbatch_write.patch add-config_headers_check-option-to-automatically-run-make-headers_check-nobble.patch kbuild-dont-put-temp-files-in-the-source-tree.patch lockdep-annotate-nfs-nfsd-in-kernel-sockets-tidy.patch bug-test-1.patch log2-implement-a-general-integer-log2-facility-in-the-kernel-fix.patch fs-cache-provide-a-filesystem-specific-syncable-page-bit-ext4.patch fs-cache-make-kafs-use-fs-cache-fix.patch fs-cache-make-kafs-use-fs-cache-vs-streamline-generic_file_-interfaces-and-filemap.patch nfs-use-local-caching-12-fix.patch fs-cache-cachefiles-a-cache-that-backs-onto-a-mounted-filesystem-log2-fix.patch swap_prefetch-vs-zoned-counters.patch readahead-sysctl-parameters.patch make-copy_from_user_inatomic-not-zero-the-tail-on-i386-vs-reiser4.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-rename-generic_sounding_globalspatch-fix.patch hpt3xx-rework-rate-filtering-tidy.patch gtod-persistent-clock-support-i386.patch hrtimers-state-tracking.patch clockevents-drivers-for-i386.patch gtod-mark-tsc-unusable-for-highres-timers.patch round_jiffies-infrastructure-fix.patch kevent-core-files-fix.patch kevent-core-files-s390-hack.patch kevent-socket-notifications-fix-2.patch kevent-socket-notifications-fix-4.patch kevent-timer-notifications-fix.patch nr_blockdev_pages-in_interrupt-warning.patch device-suspend-debug.patch slab-leaks3-default-y.patch x86-kmap_atomic-debugging.patch restore-rogue-readahead-printk.patch put_bh-debug.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