diff options
author | Zoltan Menyhart <Zoltan.Menyhart@bull.net> | 2006-09-29 01:58:40 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-29 09:18:03 -0700 |
commit | d1807793e1e7e502e3dc047115e9dbc3b50e4534 (patch) | |
tree | 0ee76ff91643dc23fd5aef6d0498a7e139fdc6f8 | |
parent | f71b2f10f56802075d67c5710cd9f1816382d720 (diff) | |
download | linux-3.10-d1807793e1e7e502e3dc047115e9dbc3b50e4534.tar.gz linux-3.10-d1807793e1e7e502e3dc047115e9dbc3b50e4534.tar.bz2 linux-3.10-d1807793e1e7e502e3dc047115e9dbc3b50e4534.zip |
[PATCH] JBD: memory leak in "journal_init_dev()"
We leak a bh ref in "journal_init_dev()" in case of failure.
Signed-off-by: Zoltan Menyhart <Zoltan.Menyhart@bull.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | fs/jbd/journal.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fs/jbd/journal.c b/fs/jbd/journal.c index 2fc66c3e668..7af6099c911 100644 --- a/fs/jbd/journal.c +++ b/fs/jbd/journal.c @@ -715,18 +715,8 @@ journal_t * journal_init_dev(struct block_device *bdev, if (!journal) return NULL; - journal->j_dev = bdev; - journal->j_fs_dev = fs_dev; - journal->j_blk_offset = start; - journal->j_maxlen = len; - journal->j_blocksize = blocksize; - - bh = __getblk(journal->j_dev, start, journal->j_blocksize); - J_ASSERT(bh != NULL); - journal->j_sb_buffer = bh; - journal->j_superblock = (journal_superblock_t *)bh->b_data; - /* journal descriptor can store up to n blocks -bzzz */ + journal->j_blocksize = blocksize; n = journal->j_blocksize / sizeof(journal_block_tag_t); journal->j_wbufsize = n; journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL); @@ -736,6 +726,15 @@ journal_t * journal_init_dev(struct block_device *bdev, kfree(journal); journal = NULL; } + journal->j_dev = bdev; + journal->j_fs_dev = fs_dev; + journal->j_blk_offset = start; + journal->j_maxlen = len; + + bh = __getblk(journal->j_dev, start, journal->j_blocksize); + J_ASSERT(bh != NULL); + journal->j_sb_buffer = bh; + journal->j_superblock = (journal_superblock_t *)bh->b_data; return journal; } |