void jfs_clear_inode(struct inode *inode) { struct jfs_inode_info *ji = JFS_IP(inode); if (is_bad_inode(inode)) /* * We free the fs-dependent structure before making the * inode bad */ return; jfs_info("jfs_clear_inode called ip = 0x%p", inode); if (ji->active_ag != -1) { struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; atomic_dec(&bmap->db_active[ji->active_ag]); } ASSERT(list_empty(&ji->anon_inode_list)); if (ji->atlhead) { jfs_err("jfs_clear_inode: inode %p has anonymous tlocks", inode); jfs_err("i_state = 0x%lx, cflag = 0x%lx", inode->i_state, ji->cflag); } free_jfs_inode(inode); }
void jfs_read_inode(struct inode *inode) { int rc; rc = alloc_jfs_inode(inode); if (rc) { jfs_warn("In jfs_read_inode, alloc_jfs_inode failed"); goto bad_inode; } jfs_info("In jfs_read_inode, inode = 0x%p", inode); if (diRead(inode)) goto bad_inode_free; if (S_ISREG(inode->i_mode)) { inode->i_op = &jfs_file_inode_operations; inode->i_fop = &jfs_file_operations; inode->i_mapping->a_ops = &jfs_aops; } else if (S_ISDIR(inode->i_mode)) { inode->i_op = &jfs_dir_inode_operations; inode->i_fop = &jfs_dir_operations; inode->i_mapping->a_ops = &jfs_aops; inode->i_mapping->gfp_mask = GFP_NOFS; } else if (S_ISLNK(inode->i_mode)) { if (inode->i_size >= IDATASIZE) { inode->i_op = &page_symlink_inode_operations; inode->i_mapping->a_ops = &jfs_aops; } else inode->i_op = &jfs_symlink_inode_operations; } else { inode->i_op = &jfs_file_inode_operations; init_special_inode(inode, inode->i_mode, kdev_t_to_nr(inode->i_rdev)); } return; bad_inode_free: free_jfs_inode(inode); bad_inode: make_bad_inode(inode); }
void jfs_clear_inode(struct inode *inode) { struct jfs_inode_info *ji = JFS_IP(inode); if (is_bad_inode(inode)) /* * We free the fs-dependent structure before making the * inode bad */ return; jfs_info("jfs_clear_inode called ip = 0x%p", inode); if (ji->active_ag != -1) { struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap; atomic_dec(&bmap->db_active[ji->active_ag]); } ASSERT(list_empty(&ji->anon_inode_list)); #ifdef CONFIG_JFS_POSIX_ACL if (ji->i_acl != JFS_ACL_NOT_CACHED) { posix_acl_release(ji->i_acl); ji->i_acl = JFS_ACL_NOT_CACHED; } if (ji->i_default_acl != JFS_ACL_NOT_CACHED) { posix_acl_release(ji->i_default_acl); ji->i_default_acl = JFS_ACL_NOT_CACHED; } #endif if (ji->atlhead) { jfs_err("jfs_clear_inode: inode %p has anonymous tlocks", inode); jfs_err("i_state = 0x%lx, cflag = 0x%lx", inode->i_state, ji->cflag); } free_jfs_inode(inode); }
/* * NAME: ialloc() * * FUNCTION: Allocate a new inode * */ struct inode *ialloc(struct inode *parent, umode_t mode) { struct super_block *sb = parent->i_sb; struct inode *inode; struct jfs_inode_info *jfs_inode; int rc; inode = new_inode(sb); if (!inode) { jERROR(1, ("ialloc: new_inode returned NULL!\n")); return inode; } rc = alloc_jfs_inode(inode); if (rc) { make_bad_inode(inode); iput(inode); return NULL; } jfs_inode = JFS_IP(inode); rc = diAlloc(parent, S_ISDIR(mode), inode); if (rc) { jERROR(1, ("ialloc: diAlloc returned %d!\n", rc)); free_jfs_inode(inode); make_bad_inode(inode); iput(inode); return NULL; } inode->i_uid = current->fsuid; if (parent->i_mode & S_ISGID) { inode->i_gid = parent->i_gid; if (S_ISDIR(mode)) mode |= S_ISGID; } else inode->i_gid = current->fsgid; inode->i_mode = mode; if (S_ISDIR(mode)) jfs_inode->mode2 = IDIRECTORY | mode; else jfs_inode->mode2 = INLINEEA | ISPARSE | mode; inode->i_blksize = sb->s_blocksize; inode->i_blocks = 0; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; jfs_inode->otime = inode->i_ctime; inode->i_generation = JFS_SBI(sb)->gengen++; jfs_inode->cflag = 0; set_cflag(COMMIT_New, inode); /* Zero remaining fields */ memset(&jfs_inode->acl, 0, sizeof(dxd_t)); memset(&jfs_inode->ea, 0, sizeof(dxd_t)); jfs_inode->next_index = 0; jfs_inode->acltype = 0; jfs_inode->btorder = 0; jfs_inode->btindex = 0; jfs_inode->bxflag = 0; jfs_inode->blid = 0; jfs_inode->atlhead = 0; jfs_inode->atltail = 0; jfs_inode->xtlid = 0; jFYI(1, ("ialloc returns inode = 0x%p\n", inode)); return inode; }