void e2fsck_write_inode_full(e2fsck_t ctx, unsigned long ino, struct ext2_inode * inode, int bufsize, const char *proc) { errcode_t retval; retval = ext2fs_write_inode_full(ctx->fs, ino, inode, bufsize); if (retval) { com_err("ext2fs_write_inode", retval, _("while writing inode %lu in %s"), ino, proc); fatal_error(ctx, 0); } }
/* * This function should be called when writing a new inode. It makes * sure that extra part of large inodes is initialized properly. */ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode) { struct ext2_inode *buf; int size = EXT2_INODE_SIZE(fs->super); struct ext2_inode_large *large_inode; errcode_t retval; __u32 t = fs->now ? fs->now : time(NULL); if (!inode->i_ctime) inode->i_ctime = t; if (!inode->i_mtime) inode->i_mtime = t; if (!inode->i_atime) inode->i_atime = t; if (size == sizeof(struct ext2_inode)) return ext2fs_write_inode_full(fs, ino, inode, sizeof(struct ext2_inode)); buf = malloc(size); if (!buf) return ENOMEM; memset(buf, 0, size); *buf = *inode; large_inode = (struct ext2_inode_large *) buf; large_inode->i_extra_isize = sizeof(struct ext2_inode_large) - EXT2_GOOD_OLD_INODE_SIZE; if (!large_inode->i_crtime) large_inode->i_crtime = t; retval = ext2fs_write_inode_full(fs, ino, buf, size); free(buf); return retval; }
int debugfs_write_inode_full(ext2_ino_t ino, struct ext2_inode *inode, const char *cmd, int bufsize) { int retval; retval = ext2fs_write_inode_full(current_fs, ino, inode, bufsize); if (retval) { com_err(cmd, retval, "while writing inode %u", ino); return 1; } return 0; }
static errcode_t update_path(ext2_extent_handle_t handle) { blk64_t blk; errcode_t retval; struct ext3_extent_idx *ix; if (handle->level == 0) { retval = ext2fs_write_inode_full(handle->fs, handle->ino, handle->inode, EXT2_INODE_SIZE(handle->fs->super)); } else { ix = handle->path[handle->level - 1].curr; blk = ext2fs_le32_to_cpu(ix->ei_leaf) + ((__u64) ext2fs_le16_to_cpu(ix->ei_leaf_hi) << 32); retval = io_channel_write_blk(handle->fs->io, blk, 1, handle->path[handle->level].buf); } return retval; }
errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode) { return ext2fs_write_inode_full(fs, ino, inode, sizeof(struct ext2_inode)); }