diff --git a/fs/ufs/balloc.c b/fs/ufs/balloc.c index 62193db34346da58caf9cb77db0ec6b29cc6d8bd..ac709e70f6466dd8d71c31b5f595ce1d16da1126 100644 --- a/fs/ufs/balloc.c +++ b/fs/ufs/balloc.c @@ -156,7 +156,7 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count) bit = ufs_dtogd (fragment); if (cgno >= uspi->s_ncg) { ufs_panic (sb, "ufs_free_blocks", "freeing blocks are outside device"); - goto failed; + goto failed_unlock; } end_bit = bit + count; if (end_bit > uspi->s_fpg) { @@ -167,11 +167,11 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count) ucpi = ufs_load_cylinder (sb, cgno); if (!ucpi) - goto failed; + goto failed_unlock; ucg = ubh_get_ucg (UCPI_UBH(ucpi)); if (!ufs_cg_chkmagic(sb, ucg)) { ufs_panic (sb, "ufs_free_blocks", "internal error, bad magic number on cg %u", cgno); - goto failed; + goto failed_unlock; } for (i = bit; i < end_bit; i += uspi->s_fpb) { @@ -210,8 +210,9 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count) UFSD("EXIT\n"); return; -failed: +failed_unlock: unlock_super (sb); +failed: UFSD("EXIT (FAILED)\n"); return; }