Loading fs/freevxfs/vxfs_extern.h +3 −5 Original line number Diff line number Diff line Loading @@ -54,10 +54,8 @@ extern int vxfs_read_fshead(struct super_block *); extern const struct address_space_operations vxfs_immed_aops; extern struct kmem_cache *vxfs_inode_cachep; extern void vxfs_dumpi(struct vxfs_inode_info *, ino_t); extern struct inode * vxfs_get_fake_inode(struct super_block *, struct vxfs_inode_info *); extern struct vxfs_inode_info * vxfs_blkiget(struct super_block *, u_long, ino_t); extern struct vxfs_inode_info * vxfs_stiget(struct super_block *, ino_t); extern struct inode *vxfs_blkiget(struct super_block *, u_long, ino_t); extern struct inode *vxfs_stiget(struct super_block *, ino_t); extern struct inode *vxfs_iget(struct super_block *, ino_t); extern void vxfs_evict_inode(struct inode *); Loading fs/freevxfs/vxfs_fshead.c +8 −25 Original line number Diff line number Diff line Loading @@ -108,31 +108,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"); Loading @@ -153,15 +148,10 @@ vxfs_read_fshead(struct super_block *sbp) vxfs_dumpfsh(pfp); #endif tip = vxfs_blkiget(sbp, infp->vsi_iext, infp->vsi_stilist = vxfs_blkiget(sbp, infp->vsi_iext, fs32_to_cpu(infp, sfp->fsh_ilistino[0])); if (!tip) goto out_free_pfp; infp->vsi_stilist = vxfs_get_fake_inode(sbp, tip); 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))) { Loading @@ -170,13 +160,9 @@ vxfs_read_fshead(struct super_block *sbp) goto out_iput_stilist; } tip = vxfs_stiget(sbp, fs32_to_cpu(infp, 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))) { Loading @@ -198,7 +184,4 @@ vxfs_read_fshead(struct super_block *sbp) out_iput_fship: iput(infp->vsi_fship); return -EINVAL; out_free_fship: kfree(vip); return -EINVAL; } fs/freevxfs/vxfs_inode.c +20 −7 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ struct kmem_cache *vxfs_inode_cachep; static struct inode * vxfs_get_fake_inode(struct super_block *, struct vxfs_inode_info *); #ifdef DIAGNOSTIC /* Loading Loading @@ -112,10 +114,11 @@ static inline void dip2vip_cpy(struct vxfs_sb_info *sbi, * buffercache. This function should not be used outside the * read_super() method, otherwise the data may be incoherent. */ struct vxfs_inode_info * struct inode * vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) { struct buffer_head *bp; struct inode *inode; u_long block, offset; block = extent + ((ino * VXFS_ISIZE) / sbp->s_blocksize); Loading @@ -134,7 +137,11 @@ vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) vxfs_dumpi(vip, ino); #endif brelse(bp); return (vip); inode = vxfs_get_fake_inode(sbp, vip); if (!inode) kmem_cache_free(vxfs_inode_cachep, vip); return inode; } fail: Loading @@ -152,7 +159,7 @@ vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) * Description: * Search the for inode number @ino in the filesystem * described by @sbp. Use the specified inode table (@ilistp). * Returns the matching VxFS inode on success, else an error code. * Returns the matching inode on success, else an error code. */ static struct vxfs_inode_info * __vxfs_iget(ino_t ino, struct inode *ilistp) Loading Loading @@ -196,15 +203,21 @@ __vxfs_iget(ino_t ino, struct inode *ilistp) * Description: * Find inode @ino in the filesystem described by @sbp using * the structural inode list. * Returns the matching VxFS inode on success, else a NULL pointer. * Returns the matching inode on success, else a NULL pointer. */ struct vxfs_inode_info * struct inode * vxfs_stiget(struct super_block *sbp, ino_t ino) { struct vxfs_inode_info *vip; struct inode *inode; vip = __vxfs_iget(ino, VXFS_SBI(sbp)->vsi_stilist); return IS_ERR(vip) ? NULL : vip; if (IS_ERR(vip)) return NULL; inode = vxfs_get_fake_inode(sbp, vip); if (!inode) kmem_cache_free(vxfs_inode_cachep, vip); return inode; } /** Loading Loading @@ -282,7 +295,7 @@ vxfs_iinit(struct inode *ip, struct vxfs_inode_info *vip) * superblock, vxfs_inode pair. * Returns the filled VFS inode. */ struct inode * static struct inode * vxfs_get_fake_inode(struct super_block *sbp, struct vxfs_inode_info *vip) { struct inode *ip = NULL; Loading Loading
fs/freevxfs/vxfs_extern.h +3 −5 Original line number Diff line number Diff line Loading @@ -54,10 +54,8 @@ extern int vxfs_read_fshead(struct super_block *); extern const struct address_space_operations vxfs_immed_aops; extern struct kmem_cache *vxfs_inode_cachep; extern void vxfs_dumpi(struct vxfs_inode_info *, ino_t); extern struct inode * vxfs_get_fake_inode(struct super_block *, struct vxfs_inode_info *); extern struct vxfs_inode_info * vxfs_blkiget(struct super_block *, u_long, ino_t); extern struct vxfs_inode_info * vxfs_stiget(struct super_block *, ino_t); extern struct inode *vxfs_blkiget(struct super_block *, u_long, ino_t); extern struct inode *vxfs_stiget(struct super_block *, ino_t); extern struct inode *vxfs_iget(struct super_block *, ino_t); extern void vxfs_evict_inode(struct inode *); Loading
fs/freevxfs/vxfs_fshead.c +8 −25 Original line number Diff line number Diff line Loading @@ -108,31 +108,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"); Loading @@ -153,15 +148,10 @@ vxfs_read_fshead(struct super_block *sbp) vxfs_dumpfsh(pfp); #endif tip = vxfs_blkiget(sbp, infp->vsi_iext, infp->vsi_stilist = vxfs_blkiget(sbp, infp->vsi_iext, fs32_to_cpu(infp, sfp->fsh_ilistino[0])); if (!tip) goto out_free_pfp; infp->vsi_stilist = vxfs_get_fake_inode(sbp, tip); 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))) { Loading @@ -170,13 +160,9 @@ vxfs_read_fshead(struct super_block *sbp) goto out_iput_stilist; } tip = vxfs_stiget(sbp, fs32_to_cpu(infp, 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))) { Loading @@ -198,7 +184,4 @@ vxfs_read_fshead(struct super_block *sbp) out_iput_fship: iput(infp->vsi_fship); return -EINVAL; out_free_fship: kfree(vip); return -EINVAL; }
fs/freevxfs/vxfs_inode.c +20 −7 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ struct kmem_cache *vxfs_inode_cachep; static struct inode * vxfs_get_fake_inode(struct super_block *, struct vxfs_inode_info *); #ifdef DIAGNOSTIC /* Loading Loading @@ -112,10 +114,11 @@ static inline void dip2vip_cpy(struct vxfs_sb_info *sbi, * buffercache. This function should not be used outside the * read_super() method, otherwise the data may be incoherent. */ struct vxfs_inode_info * struct inode * vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) { struct buffer_head *bp; struct inode *inode; u_long block, offset; block = extent + ((ino * VXFS_ISIZE) / sbp->s_blocksize); Loading @@ -134,7 +137,11 @@ vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) vxfs_dumpi(vip, ino); #endif brelse(bp); return (vip); inode = vxfs_get_fake_inode(sbp, vip); if (!inode) kmem_cache_free(vxfs_inode_cachep, vip); return inode; } fail: Loading @@ -152,7 +159,7 @@ vxfs_blkiget(struct super_block *sbp, u_long extent, ino_t ino) * Description: * Search the for inode number @ino in the filesystem * described by @sbp. Use the specified inode table (@ilistp). * Returns the matching VxFS inode on success, else an error code. * Returns the matching inode on success, else an error code. */ static struct vxfs_inode_info * __vxfs_iget(ino_t ino, struct inode *ilistp) Loading Loading @@ -196,15 +203,21 @@ __vxfs_iget(ino_t ino, struct inode *ilistp) * Description: * Find inode @ino in the filesystem described by @sbp using * the structural inode list. * Returns the matching VxFS inode on success, else a NULL pointer. * Returns the matching inode on success, else a NULL pointer. */ struct vxfs_inode_info * struct inode * vxfs_stiget(struct super_block *sbp, ino_t ino) { struct vxfs_inode_info *vip; struct inode *inode; vip = __vxfs_iget(ino, VXFS_SBI(sbp)->vsi_stilist); return IS_ERR(vip) ? NULL : vip; if (IS_ERR(vip)) return NULL; inode = vxfs_get_fake_inode(sbp, vip); if (!inode) kmem_cache_free(vxfs_inode_cachep, vip); return inode; } /** Loading Loading @@ -282,7 +295,7 @@ vxfs_iinit(struct inode *ip, struct vxfs_inode_info *vip) * superblock, vxfs_inode pair. * Returns the filled VFS inode. */ struct inode * static struct inode * vxfs_get_fake_inode(struct super_block *sbp, struct vxfs_inode_info *vip) { struct inode *ip = NULL; Loading