Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f94533d authored by Theodore Ts'o's avatar Theodore Ts'o
Browse files

ext4: fix a BUG_ON crash by checking that page has buffers attached to it



In ext4_num_dirty_pages() we were calling page_buffers() before
checking to see if the page actually had pages attached to it; this
would cause a BUG check crash in the inline function page_buffers().

Thanks to Markus Trippelsdorf for reporting this bug.

Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent c1fccc06
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -1146,8 +1146,8 @@ static int check_block_validity(struct inode *inode, const char *msg,
}

/*
 * Return the number of dirty pages in the given inode starting at
 * page frame idx.
 * Return the number of contiguous dirty pages in a given inode
 * starting at page frame idx.
 */
static pgoff_t ext4_num_dirty_pages(struct inode *inode, pgoff_t idx,
				    unsigned int max_pages)
@@ -1181,15 +1181,15 @@ static pgoff_t ext4_num_dirty_pages(struct inode *inode, pgoff_t idx,
				unlock_page(page);
				break;
			}
			head = page_buffers(page);
			bh = head;
			if (page_has_buffers(page)) {
				bh = head = page_buffers(page);
				do {
					if (!buffer_delay(bh) &&
				    !buffer_unwritten(bh)) {
					    !buffer_unwritten(bh))
						done = 1;
					break;
					bh = bh->b_this_page;
				} while (!done && (bh != head));
			}
			} while ((bh = bh->b_this_page) != head);
			unlock_page(page);
			if (done)
				break;