]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/ext2/dir.c
[GFS2] Kernel changes to support new gfs2_grow command (part 2)
[linux-2.6-omap-h63xx.git] / fs / ext2 / dir.c
index 0b02ba9642d2e817cb908f0ae10a37c6ae8366c4..2bf49d7ef841423d03c44527e1578f7f8c4a2f38 100644 (file)
@@ -23,7 +23,6 @@
 
 #include "ext2.h"
 #include <linux/pagemap.h>
-#include <linux/smp_lock.h>
 
 typedef struct ext2_dir_entry_2 ext2_dirent;
 
@@ -161,10 +160,7 @@ static struct page * ext2_get_page(struct inode *dir, unsigned long n)
        struct address_space *mapping = dir->i_mapping;
        struct page *page = read_mapping_page(mapping, n, NULL);
        if (!IS_ERR(page)) {
-               wait_on_page_locked(page);
                kmap(page);
-               if (!PageUptodate(page))
-                       goto fail;
                if (!PageChecked(page))
                        ext2_check_page(page);
                if (PageError(page))
@@ -368,6 +364,14 @@ struct ext2_dir_entry_2 * ext2_find_entry (struct inode * dir,
                }
                if (++n >= npages)
                        n = 0;
+               /* next page is past the blocks we've got */
+               if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) {
+                       ext2_error(dir->i_sb, __FUNCTION__,
+                               "dir %lu size %lld exceeds block count %llu",
+                               dir->i_ino, dir->i_size,
+                               (unsigned long long)dir->i_blocks);
+                       goto out;
+               }
        } while (n != start);
 out:
        return NULL;