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; }
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; }
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; }