xfs: fix potential infinite loop in xfs_iomap_prealloc_size()
authorBrian Foster <bfoster@redhat.com>
Fri, 22 Feb 2013 18:32:56 +0000 (13:32 -0500)
committerBen Myers <bpm@sgi.com>
Thu, 7 Mar 2013 18:21:39 +0000 (12:21 -0600)
If freesp == 0, we could end up in an infinite loop while squashing
the preallocation. Break the loop when we've killed the prealloc
entirely.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_iomap.c

index 912d83d8860a984a938b604f3e2447c3e390ce89..b0b0f448e8434a08ccaf6fc4f75b9b23a2ad6c51 100644 (file)
@@ -413,7 +413,7 @@ xfs_iomap_prealloc_size(
                 * have a large file on a small filesystem and the above
                 * lowspace thresholds are smaller than MAXEXTLEN.
                 */
-               while (alloc_blocks >= freesp)
+               while (alloc_blocks && alloc_blocks >= freesp)
                        alloc_blocks >>= 4;
        }