示例#1
0
文件: fsync.c 项目: dmgerman/original
static int sync_tindirect(struct inode *inode, u32 *tiblockp, int convert,
			  int wait)
{
	int i;
	struct buffer_head * tind_bh;
	int rc, err = 0;
	struct super_block * sb;

	rc = sync_iblock (inode, tiblockp, convert, &tind_bh, wait);
	if (rc || !tind_bh)
		return rc;

	sb = inode->i_sb;
	for (i = 0; i < sb->sv_ind_per_block; i++) {
		rc = sync_dindirect (inode,
				     ((u32 *) tind_bh->b_data) + i, sb->sv_convert,
				     wait);
		if (rc > 0)
			break;
		if (rc)
			err = rc;
	}
	brelse(tind_bh);
	return err;
}
示例#2
0
文件: fsync.c 项目: rohsaini/mkunity
static int sync_indirect (struct inode * inode, u32 * iblock, int wait)
{
	int i;
	struct buffer_head * ind_bh;
	int rc, err = 0;

	rc = sync_iblock (inode, iblock, &ind_bh, wait);
	if (rc || !ind_bh)
		return rc;
	
	for (i = 0; i < addr_per_block; i++) {
		rc = sync_block (inode, 
				 ((u32 *) ind_bh->b_data) + i,
				 wait);
		if (rc > 0)
			break;
		if (rc)
			err = rc;
	}
	brelse (ind_bh);
	return err;
}
示例#3
0
static int sync_dindirect(struct inode *inode, unsigned short *diblock,
                          int wait)
{
    int i;
    struct buffer_head *dind_bh;
    int rc, err = 0;

    rc = sync_iblock(inode, diblock, &dind_bh, wait);
    if (rc || !dind_bh)
        return rc;

    for (i = 0; i < 512; i++) {
        rc = sync_indirect(inode,
                           ((unsigned short *) dind_bh->b_data) + i,
                           wait);
        if (rc > 0)
            break;
        if (rc)
            err = rc;
    }
    brelse(dind_bh);
    return err;
}