/** * vxfs_getfsh - read fileset header into memory * @ip: the (fake) fileset header inode * @which: 0 for the structural, 1 for the primary fsh. * * Description: * vxfs_getfsh reads either the structural or primary fileset header * described by @ip into memory. * * Returns: * The fileset header structure on success, else Zero.
*/ staticstruct vxfs_fsh *
vxfs_getfsh(struct inode *ip, int which)
{ struct buffer_head *bp;
bp = vxfs_bread(ip, which); if (bp) { struct vxfs_fsh *fhp;
if (!(fhp = kmalloc(sizeof(*fhp), GFP_KERNEL))) goto out;
memcpy(fhp, bp->b_data, sizeof(*fhp));
/** * vxfs_read_fshead - read the fileset headers * @sbp: superblock to which the fileset belongs * * Description: * vxfs_read_fshead will fill the inode and structural inode list in @sb. * * Returns: * Zero on success, else a negative error code (-EINVAL).
*/ int
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;
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_iput_fship;
}
sfp = vxfs_getfsh(infp->vsi_fship, 0); if (!sfp) {
printk(KERN_ERR "vxfs: unable to get structural fsh\n"); goto out_iput_fship;
}
#ifdef DIAGNOSTIC
vxfs_dumpfsh(sfp); #endif
pfp = vxfs_getfsh(infp->vsi_fship, 1); if (!pfp) {
printk(KERN_ERR "vxfs: unable to get primary fsh\n"); goto out_free_sfp;
}
#ifdef DIAGNOSTIC
vxfs_dumpfsh(pfp); #endif
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"); goto out_free_pfp;
} if (!VXFS_ISILT(VXFS_INO(infp->vsi_stilist))) {
printk(KERN_ERR "vxfs: structural list inode is of wrong type (%x)\n",
VXFS_INO(infp->vsi_stilist)->vii_mode & VXFS_TYPE_MASK); goto out_iput_stilist;
}
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"); goto out_iput_stilist;
} if (!VXFS_ISILT(VXFS_INO(infp->vsi_ilist))) {
printk(KERN_ERR "vxfs: inode list inode is of wrong type (%x)\n",
VXFS_INO(infp->vsi_ilist)->vii_mode & VXFS_TYPE_MASK); goto out_iput_ilist;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.