const char *name)
{
errcode_t retval;
- struct ext2_inode inode;
+ struct ext2_inode parent_inode, inode;
ino_t ino = inum;
ino_t scratch_ino;
blk_t blk;
goto cleanup;
/*
+ * Get the parent's inode, if necessary
+ */
+ if (parent != ino) {
+ retval = ext2fs_read_inode(fs, parent, &parent_inode);
+ if (retval)
+ goto cleanup;
+ } else
+ memset(&parent_inode, 0, sizeof(parent_inode));
+
+ /*
* Create the inode structure....
*/
memset(&inode, 0, sizeof(struct ext2_inode));
* Update parent inode's counts
*/
if (parent != ino) {
- retval = ext2fs_read_inode(fs, parent, &inode);
- if (retval)
- goto cleanup;
- inode.i_links_count++;
- retval = ext2fs_write_inode(fs, parent, &inode);
+ parent_inode.i_links_count++;
+ retval = ext2fs_write_inode(fs, parent, &parent_inode);
if (retval)
goto cleanup;
}