Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/audit
[deliverable/linux.git] / fs / freevxfs / vxfs_fshead.c
index c9a6a94e58e9cd289ea14a689d9344c7e291bdd4..a4610a77649e59120ad3011207e4b448dbd4849a 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2000-2001 Christoph Hellwig.
+ * Copyright (c) 2016 Krzysztof Blaszkowski
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -108,31 +109,26 @@ vxfs_read_fshead(struct super_block *sbp)
 {
        struct vxfs_sb_info             *infp = VXFS_SBI(sbp);
        struct vxfs_fsh                 *pfp, *sfp;
-       struct vxfs_inode_info          *vip, *tip;
+       struct vxfs_inode_info          *vip;
 
-       vip = vxfs_blkiget(sbp, infp->vsi_iext, infp->vsi_fshino);
-       if (!vip) {
+       infp->vsi_fship = vxfs_blkiget(sbp, infp->vsi_iext, infp->vsi_fshino);
+       if (!infp->vsi_fship) {
                printk(KERN_ERR "vxfs: unable to read fsh inode\n");
                return -EINVAL;
        }
+
+       vip = VXFS_INO(infp->vsi_fship);
        if (!VXFS_ISFSH(vip)) {
                printk(KERN_ERR "vxfs: fsh list inode is of wrong type (%x)\n",
                                vip->vii_mode & VXFS_TYPE_MASK); 
-               goto out_free_fship;
+               goto out_iput_fship;
        }
 
-
 #ifdef DIAGNOSTIC
        printk("vxfs: fsh inode dump:\n");
        vxfs_dumpi(vip, infp->vsi_fshino);
 #endif
 
-       infp->vsi_fship = vxfs_get_fake_inode(sbp, vip);
-       if (!infp->vsi_fship) {
-               printk(KERN_ERR "vxfs: unable to get fsh inode\n");
-               goto out_free_fship;
-       }
-
        sfp = vxfs_getfsh(infp->vsi_fship, 0);
        if (!sfp) {
                printk(KERN_ERR "vxfs: unable to get structural fsh\n");
@@ -153,14 +149,10 @@ vxfs_read_fshead(struct super_block *sbp)
        vxfs_dumpfsh(pfp);
 #endif
 
-       tip = vxfs_blkiget(sbp, infp->vsi_iext, sfp->fsh_ilistino[0]);
-       if (!tip)
-               goto out_free_pfp;
-
-       infp->vsi_stilist = vxfs_get_fake_inode(sbp, tip);
+       infp->vsi_stilist = vxfs_blkiget(sbp, infp->vsi_iext,
+                       fs32_to_cpu(infp, sfp->fsh_ilistino[0]));
        if (!infp->vsi_stilist) {
                printk(KERN_ERR "vxfs: unable to get structural list inode\n");
-               kfree(tip);
                goto out_free_pfp;
        }
        if (!VXFS_ISILT(VXFS_INO(infp->vsi_stilist))) {
@@ -169,13 +161,9 @@ vxfs_read_fshead(struct super_block *sbp)
                goto out_iput_stilist;
        }
 
-       tip = vxfs_stiget(sbp, pfp->fsh_ilistino[0]);
-       if (!tip)
-               goto out_iput_stilist;
-       infp->vsi_ilist = vxfs_get_fake_inode(sbp, tip);
+       infp->vsi_ilist = vxfs_stiget(sbp, fs32_to_cpu(infp, pfp->fsh_ilistino[0]));
        if (!infp->vsi_ilist) {
                printk(KERN_ERR "vxfs: unable to get inode list inode\n");
-               kfree(tip);
                goto out_iput_stilist;
        }
        if (!VXFS_ISILT(VXFS_INO(infp->vsi_ilist))) {
@@ -184,6 +172,8 @@ vxfs_read_fshead(struct super_block *sbp)
                goto out_iput_ilist;
        }
 
+       kfree(pfp);
+       kfree(sfp);
        return 0;
 
  out_iput_ilist:
@@ -197,7 +187,4 @@ vxfs_read_fshead(struct super_block *sbp)
  out_iput_fship:
        iput(infp->vsi_fship);
        return -EINVAL;
- out_free_fship:
-       kfree(vip);
-       return -EINVAL;
 }
This page took 0.026293 seconds and 5 git commands to generate.