ext4: fix SEEK_HOLE/SEEK_DATA for blocksize < pagesize
[sfrench/cifs-2.6.git] / fs / ext4 / file.c
index 58294c9a7e1df0028f267e4eaad67d7b0d2a910b..0d7cf0cc9b87562bbc52b17224794d9147208910 100644 (file)
@@ -537,6 +537,8 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
                                lastoff = page_offset(page);
                                bh = head = page_buffers(page);
                                do {
+                                       if (lastoff + bh->b_size <= startoff)
+                                               goto next;
                                        if (buffer_uptodate(bh) ||
                                            buffer_unwritten(bh)) {
                                                if (whence == SEEK_DATA)
@@ -551,6 +553,7 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
                                                unlock_page(page);
                                                goto out;
                                        }
+next:
                                        lastoff += bh->b_size;
                                        bh = bh->b_this_page;
                                } while (bh != head);