X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Freiserfs%2Fnamei.c;fp=fs%2Freiserfs%2Fnamei.c;h=c2f21c5f122f07c494e38216f40346491a145b01;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=92b4fca72770ff88a6886aade1d919a07058e506;hpb=e3f6fb6212a7102bdb56ba38fa1e98fe72950475;p=linux-2.6.git diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c index 92b4fca72..c2f21c5f1 100644 --- a/fs/reiserfs/namei.c +++ b/fs/reiserfs/namei.c @@ -355,7 +355,7 @@ static struct dentry * reiserfs_lookup (struct inode * dir, struct dentry * dent /* Propogate the priv_object flag so we know we're in the priv tree */ if (is_reiserfs_priv_object (dir)) - REISERFS_I(inode)->i_flags |= i_priv_object; + reiserfs_mark_inode_private (inode); } reiserfs_write_unlock(dir->i_sb); if ( retval == IO_ERROR ) { @@ -578,6 +578,7 @@ static int new_inode_init(struct inode *inode, struct inode *dir, int mode) { } else { inode->i_gid = current->fsgid; } + inode->i_xid = vx_current_fsxid(inode->i_sb); DQUOT_INIT(inode); return 0 ; } @@ -610,7 +611,7 @@ static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode, goto out_failed; } - retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode); + retval = reiserfs_new_inode (&th, dir, mode, NULL, 0/*i_size*/, dentry, inode); if (retval) goto out_failed; @@ -1257,7 +1258,6 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, return retval; } - /* add new entry (or find the existing one) */ retval = reiserfs_add_entry (&th, new_dir, new_dentry->d_name.name, new_dentry->d_name.len, old_inode, 0); @@ -1285,8 +1285,13 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, while (1) { // look for old name using corresponding entry key (found by reiserfs_find_entry) - if (search_by_entry_key (new_dir->i_sb, &old_de.de_entry_key, &old_entry_path, &old_de) != NAME_FOUND) - BUG (); + if ((retval = search_by_entry_key (new_dir->i_sb, &old_de.de_entry_key, + &old_entry_path, &old_de)) != NAME_FOUND) { + pathrelse(&old_entry_path); + journal_end(&th, old_dir->i_sb, jbegin_count); + reiserfs_write_unlock(old_dir->i_sb); + return -EIO; + } copy_item_head(&old_entry_ih, get_ih(&old_entry_path)) ; @@ -1298,16 +1303,28 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, &new_entry_path, &new_de); // reiserfs_add_entry should not return IO_ERROR, because it is called with essentially same parameters from // reiserfs_add_entry above, and we'll catch any i/o errors before we get here. - if (retval != NAME_FOUND_INVISIBLE && retval != NAME_FOUND) - BUG (); + if (retval != NAME_FOUND_INVISIBLE && retval != NAME_FOUND) { + pathrelse(&new_entry_path); + pathrelse(&old_entry_path); + journal_end(&th, old_dir->i_sb, jbegin_count); + reiserfs_write_unlock(old_dir->i_sb); + return -EIO; + } copy_item_head(&new_entry_ih, get_ih(&new_entry_path)) ; reiserfs_prepare_for_journal(old_inode->i_sb, new_de.de_bh, 1) ; if (S_ISDIR(old_inode->i_mode)) { - if (search_by_entry_key (new_dir->i_sb, &dot_dot_de.de_entry_key, &dot_dot_entry_path, &dot_dot_de) != NAME_FOUND) - BUG (); + if ((retval = search_by_entry_key (new_dir->i_sb, &dot_dot_de.de_entry_key, + &dot_dot_entry_path, &dot_dot_de)) != NAME_FOUND) { + pathrelse(&dot_dot_entry_path); + pathrelse(&new_entry_path); + pathrelse(&old_entry_path); + journal_end(&th, old_dir->i_sb, jbegin_count); + reiserfs_write_unlock(old_dir->i_sb); + return -EIO; + } copy_item_head(&dot_dot_ih, get_ih(&dot_dot_entry_path)) ; // node containing ".." gets into transaction reiserfs_prepare_for_journal(old_inode->i_sb, dot_dot_de.de_bh, 1) ;