jbd2: fix potential memory leak on transaction commit
authorZhang Huan <zhhuan@gmail.com>
Tue, 5 Apr 2011 23:16:20 +0000 (19:16 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 5 Apr 2011 23:16:20 +0000 (19:16 -0400)
commit6cba611e600ded15f642552ce6b5f7ee243bacf0
tree5ffde3bc5fb87bbf9693bc83a53d9212ae04f267
parent46e4690bbd9a4f8d9e7c4f34e34b48f703ad47e0
jbd2: fix potential memory leak on transaction commit

There is potential memory leak of journal head in function
jbd2_journal_commit_transaction. The problem is that JBD2 will not
reclaim the journal head of commit record if error occurs or journal
is abotred.

I use the following script to reproduce this issue, on a RHEL6
system. I found it very easy to reproduce with async commit enabled.

mount /dev/sdb /mnt -o journal_checksum,journal_async_commit
touch /mnt/xxx
echo offline > /sys/block/sdb/device/state
sync
umount /mnt
rmmod ext4
rmmod jbd2

Removal of the jbd2 module will make slab complaining that
"cache `jbd2_journal_head': can't free all objects".

Signed-off-by: Zhang Huan <zhhuan@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/jbd2/commit.c