Just one JFS patch

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEIodevzQLVs53l6BhNqiEXrVAjGQFAmGCnuoACgkQNqiEXrVA
 jGS68RAAm/sHFB4Kha351GHiOzLTqdbecYR6g9FrGA1rjeum1H0KeCKxTZ8D+PAP
 pxUieR/n52UC+2qqnZWgJccRgVRdyMSqkVwRFJAGourv9cd8CILb0cZUaoCLaSpU
 GbHn2GPaOBbOOPGiCLY6AJ3IhhDY+2qhgC6M4eGGRW0uVl/vyuW/CuAUH0PUFL+y
 Xksf0qOLcr+nPCsqb+kIbY95ZRD67udtbtn09VW/T2wSCQeN1KJEBcs2zC0BB6Nz
 OwccEZrd0spyCh/15G4pzo2y5Pq4yu+ymeuxFEyCGRTzgT+CNFvS7URSW5fwOLUw
 Q20mi+Y0xu/4fVgGhkpIQXySaA1/4JTYfXDk65q5f1VpI5/7RAVOj8jRUWQKS+ra
 B0ihP1yJf91sh7W2ykxjQtqsw/+UukYJijiD4Jwk8LAOHd00bpsT6BnbF05dDFaH
 a7aWIzaon6qeJ5KDkgqhn9bRRjE5o3i2SqWu3W6QBEkaFYIIurej1m/FNYpgND1W
 c+z6VRO09N18g2vCVEG7nZ6i2ob7xjuB9aNS0r+btf6ZoKZ5pfxDpm8YcFcUlkS7
 pHSt2VnbRZBoYF5/9Hw+2MzEj8Gum3J/CiEfR4nLCjqXUfCdIHYHk+vZFwybeNXy
 YRVRYpTMX60re+vyoRcnVBG0Ua9kvanEVj4HxiZpEukVRi9bzhE=
 =0HJn
 -----END PGP SIGNATURE-----

Merge tag 'jfs-5.16' of git://github.com/kleikamp/linux-shaggy

Pull jfs fix from David Kleikamp:
 "Just one JFS patch"

* tag 'jfs-5.16' of git://github.com/kleikamp/linux-shaggy:
  JFS: fix memleak in jfs_mount
This commit is contained in:
Linus Torvalds 2021-11-03 09:23:25 -07:00
commit 655fedaad3
1 changed files with 22 additions and 29 deletions

View File

@ -81,14 +81,14 @@ int jfs_mount(struct super_block *sb)
* (initialize mount inode from the superblock) * (initialize mount inode from the superblock)
*/ */
if ((rc = chkSuper(sb))) { if ((rc = chkSuper(sb))) {
goto errout20; goto out;
} }
ipaimap = diReadSpecial(sb, AGGREGATE_I, 0); ipaimap = diReadSpecial(sb, AGGREGATE_I, 0);
if (ipaimap == NULL) { if (ipaimap == NULL) {
jfs_err("jfs_mount: Failed to read AGGREGATE_I"); jfs_err("jfs_mount: Failed to read AGGREGATE_I");
rc = -EIO; rc = -EIO;
goto errout20; goto out;
} }
sbi->ipaimap = ipaimap; sbi->ipaimap = ipaimap;
@ -99,7 +99,7 @@ int jfs_mount(struct super_block *sb)
*/ */
if ((rc = diMount(ipaimap))) { if ((rc = diMount(ipaimap))) {
jfs_err("jfs_mount: diMount(ipaimap) failed w/rc = %d", rc); jfs_err("jfs_mount: diMount(ipaimap) failed w/rc = %d", rc);
goto errout21; goto err_ipaimap;
} }
/* /*
@ -108,7 +108,7 @@ int jfs_mount(struct super_block *sb)
ipbmap = diReadSpecial(sb, BMAP_I, 0); ipbmap = diReadSpecial(sb, BMAP_I, 0);
if (ipbmap == NULL) { if (ipbmap == NULL) {
rc = -EIO; rc = -EIO;
goto errout22; goto err_umount_ipaimap;
} }
jfs_info("jfs_mount: ipbmap:0x%p", ipbmap); jfs_info("jfs_mount: ipbmap:0x%p", ipbmap);
@ -120,7 +120,7 @@ int jfs_mount(struct super_block *sb)
*/ */
if ((rc = dbMount(ipbmap))) { if ((rc = dbMount(ipbmap))) {
jfs_err("jfs_mount: dbMount failed w/rc = %d", rc); jfs_err("jfs_mount: dbMount failed w/rc = %d", rc);
goto errout22; goto err_ipbmap;
} }
/* /*
@ -139,7 +139,7 @@ int jfs_mount(struct super_block *sb)
if (!ipaimap2) { if (!ipaimap2) {
jfs_err("jfs_mount: Failed to read AGGREGATE_I"); jfs_err("jfs_mount: Failed to read AGGREGATE_I");
rc = -EIO; rc = -EIO;
goto errout35; goto err_umount_ipbmap;
} }
sbi->ipaimap2 = ipaimap2; sbi->ipaimap2 = ipaimap2;
@ -151,7 +151,7 @@ int jfs_mount(struct super_block *sb)
if ((rc = diMount(ipaimap2))) { if ((rc = diMount(ipaimap2))) {
jfs_err("jfs_mount: diMount(ipaimap2) failed, rc = %d", jfs_err("jfs_mount: diMount(ipaimap2) failed, rc = %d",
rc); rc);
goto errout35; goto err_ipaimap2;
} }
} else } else
/* Secondary aggregate inode table is not valid */ /* Secondary aggregate inode table is not valid */
@ -168,7 +168,7 @@ int jfs_mount(struct super_block *sb)
jfs_err("jfs_mount: Failed to read FILESYSTEM_I"); jfs_err("jfs_mount: Failed to read FILESYSTEM_I");
/* open fileset secondary inode allocation map */ /* open fileset secondary inode allocation map */
rc = -EIO; rc = -EIO;
goto errout40; goto err_umount_ipaimap2;
} }
jfs_info("jfs_mount: ipimap:0x%p", ipimap); jfs_info("jfs_mount: ipimap:0x%p", ipimap);
@ -178,41 +178,34 @@ int jfs_mount(struct super_block *sb)
/* initialize fileset inode allocation map */ /* initialize fileset inode allocation map */
if ((rc = diMount(ipimap))) { if ((rc = diMount(ipimap))) {
jfs_err("jfs_mount: diMount failed w/rc = %d", rc); jfs_err("jfs_mount: diMount failed w/rc = %d", rc);
goto errout41; goto err_ipimap;
} }
goto out; return rc;
/* /*
* unwind on error * unwind on error
*/ */
errout41: /* close fileset inode allocation map inode */ err_ipimap:
/* close fileset inode allocation map inode */
diFreeSpecial(ipimap); diFreeSpecial(ipimap);
err_umount_ipaimap2:
errout40: /* fileset closed */
/* close secondary aggregate inode allocation map */ /* close secondary aggregate inode allocation map */
if (ipaimap2) { if (ipaimap2)
diUnmount(ipaimap2, 1); diUnmount(ipaimap2, 1);
err_ipaimap2:
/* close aggregate inodes */
if (ipaimap2)
diFreeSpecial(ipaimap2); diFreeSpecial(ipaimap2);
} err_umount_ipbmap: /* close aggregate block allocation map */
errout35:
/* close aggregate block allocation map */
dbUnmount(ipbmap, 1); dbUnmount(ipbmap, 1);
err_ipbmap: /* close aggregate inodes */
diFreeSpecial(ipbmap); diFreeSpecial(ipbmap);
err_umount_ipaimap: /* close aggregate inode allocation map */
errout22: /* close aggregate inode allocation map */
diUnmount(ipaimap, 1); diUnmount(ipaimap, 1);
err_ipaimap: /* close aggregate inodes */
errout21: /* close aggregate inodes */
diFreeSpecial(ipaimap); diFreeSpecial(ipaimap);
errout20: /* aggregate closed */ out:
out:
if (rc) if (rc)
jfs_err("Mount JFS Failure: %d", rc); jfs_err("Mount JFS Failure: %d", rc);