ext4: More buffer head reference leaks
authorCurt Wohlgemuth <curtw@google.com>
Fri, 17 Jul 2009 14:54:08 +0000 (10:54 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 17 Jul 2009 14:54:08 +0000 (10:54 -0400)
commit6487a9d3b5476ffd1bbbe97e58cf26dbeb7a5d4a
tree6f03532934774f847e281a9eb52fbf539b36f42b
parentf6f50e28f0cb8d7bcdfaacc83129f005dede11b1
ext4: More buffer head reference leaks

After the patch I posted last week regarding buffer head ref leaks in
no-journal mode, I looked at all the code that uses buffer heads and
searched for more potential leaks.

The patch below fixes the issues I found; these can occur even when a
journal is present.

The change to inode.c fixes a double release if
ext4_journal_get_create_access() fails.

The changes to namei.c are more complicated.  add_dirent_to_buf() will
release the input buffer head EXCEPT when it returns -ENOSPC.  There are
some callers of this routine that don't always do the brelse() in the event
that -ENOSPC is returned.  Unfortunately, to put this fix into ext4_add_entry()
required capturing the return value of make_indexed_dir() and
add_dirent_to_buf().

Signed-off-by: Curt Wohlgemuth <curtw@google.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/inode.c
fs/ext4/namei.c