Commit c56a6eb0 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle)
Browse files

jbd2: Convert jbd2_journal_try_to_free_buffers to take a folio



Also convert it to return a bool since it's called from release_folio().

Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: default avatarTheodore Ts'o <tytso@mit.edu>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
parent be6b969c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3253,7 +3253,7 @@ static bool ext4_release_folio(struct folio *folio, gfp_t wait)
	if (folio_test_checked(folio))
		return false;
	if (journal)
		return jbd2_journal_try_to_free_buffers(journal, &folio->page);
		return jbd2_journal_try_to_free_buffers(journal, folio);
	else
		return try_to_free_buffers(&folio->page);
}
+6 −6
Original line number Diff line number Diff line
@@ -2143,17 +2143,17 @@ __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh)
 * cannot happen because we never reallocate freed data as metadata
 * while the data is part of a transaction.  Yes?
 *
 * Return 0 on failure, 1 on success
 * Return false on failure, true on success
 */
int jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page)
bool jbd2_journal_try_to_free_buffers(journal_t *journal, struct folio *folio)
{
	struct buffer_head *head;
	struct buffer_head *bh;
	int ret = 0;
	bool ret = false;

	J_ASSERT(PageLocked(page));
	J_ASSERT(folio_test_locked(folio));

	head = page_buffers(page);
	head = folio_buffers(folio);
	bh = head;
	do {
		struct journal_head *jh;
@@ -2175,7 +2175,7 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page)
			goto busy;
	} while ((bh = bh->b_this_page) != head);

	ret = try_to_free_buffers(page);
	ret = try_to_free_buffers(&folio->page);
busy:
	return ret;
}
+1 −1
Original line number Diff line number Diff line
@@ -1529,7 +1529,7 @@ extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *);
extern int	 jbd2_journal_forget (handle_t *, struct buffer_head *);
int jbd2_journal_invalidate_folio(journal_t *, struct folio *,
					size_t offset, size_t length);
extern int	 jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page);
bool jbd2_journal_try_to_free_buffers(journal_t *journal, struct folio *folio);
extern int	 jbd2_journal_stop(handle_t *);
extern int	 jbd2_journal_flush(journal_t *journal, unsigned int flags);
extern void	 jbd2_journal_lock_updates (journal_t *);