コード例 #1
0
ファイル: inode.c プロジェクト: nhanh0/hah
/* all filling in of inodes postponed until lookup */
static void coda_read_inode(struct inode *inode)
{
	struct coda_sb_info *sbi = coda_sbp(inode->i_sb);
	struct coda_inode_info *cii;

        if (!sbi) BUG();

#if 0
	/* check if the inode is already initialized */
	if (inode->u.generic_ip) {
            printk("coda_read_inode: initialized inode");
            return;
        }

	inode->u.generic_ip = cii_alloc();
	if (!inode->u.generic_ip) {
		CDEBUG(D_CNODE, "coda_read_inode: failed to allocate inode info\n");
		make_bad_inode(inode);
		return;
	}
	memset(inode->u.generic_ip, 0, sizeof(struct coda_inode_info));
#endif

	cii = ITOC(inode);
	if (!coda_isnullfid(&cii->c_fid)) {
            printk("coda_read_inode: initialized inode");
            return;
        }

	list_add(&cii->c_cilist, &sbi->sbi_cihead);
}
コード例 #2
0
ファイル: cnode.c プロジェクト: iwangv/edimax-br-6528n
struct inode * coda_iget(struct super_block * sb, ViceFid * fid,
			 struct coda_vattr * attr)
{
	struct inode *inode;
	struct coda_inode_info *cii;
	ino_t ino = coda_f2i(fid);

	inode = iget4(sb, ino, coda_inocmp, fid);

	if ( !inode ) { 
		CDEBUG(D_CNODE, "coda_iget: no inode\n");
		return ERR_PTR(-ENOMEM);
	}

	/* check if the inode is already initialized */
	cii = ITOC(inode);
	if (coda_isnullfid(&cii->c_fid))
		/* new, empty inode found... initializing */
		cii->c_fid = *fid;

	/* we shouldnt see inode collisions anymore */
	if (!coda_fideq(fid, &cii->c_fid)) BUG();

	/* always replace the attributes, type might have changed */
	coda_fill_inode(inode, attr);
	return inode;
}
コード例 #3
0
ファイル: inode.c プロジェクト: JBTech/ralink_rt5350
/* all filling in of inodes postponed until lookup */
static void coda_read_inode(struct inode *inode)
{
	struct coda_sb_info *sbi = coda_sbp(inode->i_sb);
	struct coda_inode_info *cii;

        if (!sbi) BUG();

	cii = ITOC(inode);
	if (!coda_isnullfid(&cii->c_fid)) {
            printk("coda_read_inode: initialized inode");
            return;
        }

	cii->c_mapcount = 0;
	list_add(&cii->c_cilist, &sbi->sbi_cihead);
}
コード例 #4
0
ファイル: cnode.c プロジェクト: iwangv/edimax-br-6528n
/* convert a fid to an inode. */
struct inode *coda_fid_to_inode(ViceFid *fid, struct super_block *sb) 
{
	ino_t nr;
	struct inode *inode;
	struct coda_inode_info *cii;

	if ( !sb ) {
		printk("coda_fid_to_inode: no sb!\n");
		return NULL;
	}

	CDEBUG(D_INODE, "%s\n", coda_f2s(fid));

	nr = coda_f2i(fid);
	inode = iget4(sb, nr, coda_inocmp, fid);
	if ( !inode ) {
		printk("coda_fid_to_inode: null from iget, sb %p, nr %ld.\n",
		       sb, (long)nr);
		return NULL;
	}

	cii = ITOC(inode);

	/* The inode could already be purged due to memory pressure */
	if (coda_isnullfid(&cii->c_fid)) {
		inode->i_nlink = 0;
		iput(inode);
		return NULL;
	}

	/* we shouldn't see inode collisions anymore */
	if ( !coda_fideq(fid, &cii->c_fid) ) BUG();

        CDEBUG(D_INODE, "found %ld\n", inode->i_ino);
        return inode;
}