From: Jérôme Glisse <jglisse@xxxxxxxxxx> For the holy crusade to stop relying on struct page mapping field, add struct super_block to jbd2_journal_forget() arguments. spatch --sp-file zemantic-010a.spatch --in-place --dir fs/ ---------------------------------------------------------------------- @exists@ expression E1, E2; identifier I; @@ struct super_block *I; ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I, E2) @exists@ expression E1, E2; identifier F, I; @@ F(..., struct super_block *I, ...) { ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I, E2) ... } @exists@ expression E1, E2; identifier I; @@ struct block_device *I; ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I->bd_super, E2) @exists@ expression E1, E2; identifier F, I; @@ F(..., struct block_device *I, ...) { ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I->bd_super, E2) ... } @exists@ expression E1, E2; identifier I; @@ struct inode *I; ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I->i_sb, E2) @exists@ expression E1, E2; identifier F, I; @@ F(..., struct inode *I, ...) { ... -jbd2_journal_forget(E1, E2) +jbd2_journal_forget(E1, I->i_sb, E2) ... } ---------------------------------------------------------------------- Signed-off-by: Jérôme Glisse <jglisse@xxxxxxxxxx> Cc: "Theodore Ts'o" <tytso@xxxxxxx> Cc: Jan Kara <jack@xxxxxxxx> Cc: linux-ext4@xxxxxxxxxxxxxxx Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: linux-fsdevel@xxxxxxxxxxxxxxx --- fs/ext4/ext4_jbd2.c | 2 +- fs/jbd2/revoke.c | 2 +- fs/jbd2/transaction.c | 3 ++- include/linux/jbd2.h | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c index 2d593201cf7a..0804d564b529 100644 --- a/fs/ext4/ext4_jbd2.c +++ b/fs/ext4/ext4_jbd2.c @@ -224,7 +224,7 @@ int __ext4_forget(const char *where, unsigned int line, handle_t *handle, (!is_metadata && !ext4_should_journal_data(inode))) { if (bh) { BUFFER_TRACE(bh, "call jbd2_journal_forget"); - err = jbd2_journal_forget(handle, bh); + err = jbd2_journal_forget(handle, inode->i_sb, bh); if (err) ext4_journal_abort_handle(where, line, __func__, bh, handle, err); diff --git a/fs/jbd2/revoke.c b/fs/jbd2/revoke.c index 696ef15ec942..b6e2fd52acd6 100644 --- a/fs/jbd2/revoke.c +++ b/fs/jbd2/revoke.c @@ -381,7 +381,7 @@ int jbd2_journal_revoke(handle_t *handle, unsigned long long blocknr, set_buffer_revokevalid(bh); if (bh_in) { BUFFER_TRACE(bh_in, "call jbd2_journal_forget"); - jbd2_journal_forget(handle, bh_in); + jbd2_journal_forget(handle, bdev->bd_super, bh_in); } else { BUFFER_TRACE(bh, "call brelse"); __brelse(bh); diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index ac311037d7a5..e8c50bb5822c 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c @@ -1482,7 +1482,8 @@ int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh) * Allow this call even if the handle has aborted --- it may be part of * the caller's cleanup after an abort. */ -int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh) +int jbd2_journal_forget (handle_t *handle, struct super_block *sb, + struct buffer_head *bh) { transaction_t *transaction = handle->h_transaction; journal_t *journal; diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index b708e5169d1d..d89749a179eb 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h @@ -1358,7 +1358,8 @@ extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *); void jbd2_journal_set_triggers(struct buffer_head *, struct jbd2_buffer_trigger_type *type); extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *); -extern int jbd2_journal_forget (handle_t *, struct buffer_head *); +extern int jbd2_journal_forget (handle_t *, struct super_block *sb, + struct buffer_head *); extern void journal_sync_buffer (struct buffer_head *); extern int jbd2_journal_invalidatepage(journal_t *, struct page *, unsigned int, unsigned int); -- 2.14.3