ext4: Fix buffer head reference leak in no-journal mode
We found a problem with buffer head reference leaks when using an ext4 partition without a journal. In particular, calls to ext4_forget() would not to a brelse() on the input buffer head, which will cause pages they belong to to not be reclaimable. Further investigation showed that all places where ext4_journal_forget() and ext4_journal_revoke() are called are subject to the same problem. The patch below changes __ext4_journal_forget/__ext4_journal_revoke to do an explicit release of the buffer head when the journal handle isn't valid. Signed-off-by: Curt Wohlgemuth <curtw@google.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:

committed by
Theodore Ts'o

parent
62e086be5d
commit
e6b5d30104
@@ -43,6 +43,8 @@ int __ext4_journal_forget(const char *where, handle_t *handle,
|
||||
ext4_journal_abort_handle(where, __func__, bh,
|
||||
handle, err);
|
||||
}
|
||||
else
|
||||
brelse(bh);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -57,6 +59,8 @@ int __ext4_journal_revoke(const char *where, handle_t *handle,
|
||||
ext4_journal_abort_handle(where, __func__, bh,
|
||||
handle, err);
|
||||
}
|
||||
else
|
||||
brelse(bh);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user