This message generated a parse failure. Raw output follows here. Please use 'back' to navigate. From devnull@lkml.org Fri Apr 26 07:33:39 2024 Received: from spaans.ds9a.nl (adsl-xs4all.ds9a.nl [213.84.159.51]) by kylie.puddingonline.com (8.11.6/8.11.6) with SMTP id g8IHCNX02185 for ; Wed, 18 Sep 2002 19:12:27 +0200 Received: (qmail 25423 invoked from network); 18 Sep 2002 07:26:19 -0000 Received: from unknown (HELO spaans.ds9a.nl) (3ffe:8280:10:360:202:44ff:fe2a:a1dd) by mayo.ipv6.ds9a.nl with SMTP; 18 Sep 2002 07:26:19 -0000 Received: (qmail 7156 invoked by uid 1000); 17 Sep 2002 21:10:07 -0000 Received: (maildatabase); juh Received: (qmail 30136 invoked by alias); 18 Jan 2002 15:02:07 -0000 Received: (qmail 30133 invoked from network); 18 Jan 2002 15:02:07 -0000 Received: from unknown (HELO dipsaus.ds9a.tudelft.nl) (::ffff:10.0.0.202) by spaans.ds9a.nl with SMTP; 18 Jan 2002 15:02:07 -0000 Received: (qmail 13817 invoked from network); 18 Jan 2002 15:01:33 -0000 Received: from unknown (HELO vger.kernel.org) (::ffff:12.107.208.194) by adsl-xs4all.ds9a.nl with SMTP; 18 Jan 2002 15:01:33 -0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Fri, 18 Jan 2002 09:55:37 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Fri, 18 Jan 2002 09:55:28 -0500 Received: from thebsh.namesys.com ([212.16.7.65]:30481 "HELO thebsh.namesys.com") by vger.kernel.org with SMTP id ; Fri, 18 Jan 2002 09:55:13 -0500 Received: (qmail 7189 invoked from network); 18 Jan 2002 14:55:12 -0000 Received: from unknown (HELO namesys.com) (212.16.7.95) by thebsh.namesys.com with SMTP; 18 Jan 2002 14:55:12 -0000 Message-Id: <3C48366D.20502@namesys.com> Date: Fri, 18 Jan 2002 17:51:25 +0300 From: Hans Reiser User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.7) Gecko/20011221 X-Accept-Language: en-us Mime-Version: 1.0 To: linux-kernel@vger.kernel.org, reiserfs-list@namesys.com, Oleg Drokin Subject: [Fwd: [PATCH] rename bug patch] Content-Type: multipart/mixed; boundary="------------020304040301040001010408" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org X-Spam-Status: No, hits=0 required=5 tests= Lines: 153 This is a multi-part message in MIME format. --------------020304040301040001010408 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Others besides Marcelo are likely to be interested in this. I think this might be the fix to a longtime eluding us bug. Hans --------------020304040301040001010408 Content-Type: message/rfc822; name="[PATCH] rename bug patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="[PATCH] rename bug patch" From - Fri Jan 18 14:41:10 2002 X-Mozilla-Status2: 00000000 Message-ID: <3C4809D6.8040908@namesys.com> Date: Fri, 18 Jan 2002 14:41:10 +0300 From: Hans Reiser User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.7) Gecko/20011221 X-Accept-Language: en-us MIME-Version: 1.0 To: Marcelo Tosatti Subject: [PATCH] rename bug patch Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Please apply and credit Oleg. It is tested by three persons and read/reviewed by Saveliev, so it should be good. Hans Hello! A-rename_stale_item_bug-1.diff This patch fixes 2 bugs in reiserfs_rename(). First one being attempt to access item before verifying it was not moved since last access. Second is a window, where old filename may be written to disk with 'visible' flag unset without these changes be journaled. Bye, Oleg --- linux/fs/reiserfs/namei.c.orig Thu Jan 17 14:05:11 2002 +++ linux/fs/reiserfs/namei.c Thu Jan 17 17:09:23 2002 @@ -1057,7 +1057,7 @@ INITIALIZE_PATH (old_entry_path); INITIALIZE_PATH (new_entry_path); INITIALIZE_PATH (dot_dot_entry_path); - struct item_head new_entry_ih, old_entry_ih ; + struct item_head new_entry_ih, old_entry_ih, dot_dot_ih ; struct reiserfs_dir_entry old_de, new_de, dot_dot_de; struct inode * old_inode, * new_inode; int windex ; @@ -1151,6 +1151,8 @@ copy_item_head(&old_entry_ih, get_ih(&old_entry_path)) ; + reiserfs_prepare_for_journal(old_inode->i_sb, old_de.de_bh, 1) ; + // look for new name by reiserfs_find_entry new_de.de_gen_number_bit_string = 0; retval = reiserfs_find_entry (new_dir, new_dentry->d_name.name, new_dentry->d_name.len, @@ -1167,6 +1169,7 @@ 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 (); + 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) ; } @@ -1183,23 +1186,33 @@ ** of the above checks could have scheduled. We have to be ** sure our items haven't been shifted by another process. */ - if (!entry_points_to_object(new_dentry->d_name.name, + if (item_moved(&new_entry_ih, &new_entry_path) || + !entry_points_to_object(new_dentry->d_name.name, new_dentry->d_name.len, &new_de, new_inode) || - item_moved(&new_entry_ih, &new_entry_path) || item_moved(&old_entry_ih, &old_entry_path) || !entry_points_to_object (old_dentry->d_name.name, old_dentry->d_name.len, &old_de, old_inode)) { reiserfs_restore_prepared_buffer (old_inode->i_sb, new_de.de_bh); + reiserfs_restore_prepared_buffer (old_inode->i_sb, old_de.de_bh); if (S_ISDIR(old_inode->i_mode)) reiserfs_restore_prepared_buffer (old_inode->i_sb, dot_dot_de.de_bh); continue; } + if (S_ISDIR(old_inode->i_mode)) { + if ( item_moved(&dot_dot_ih, &dot_dot_entry_path) || + !entry_points_to_object ( "..", 2, &dot_dot_de, old_dir) ) { + reiserfs_restore_prepared_buffer (old_inode->i_sb, old_de.de_bh); + reiserfs_restore_prepared_buffer (old_inode->i_sb, new_de.de_bh); + reiserfs_restore_prepared_buffer (old_inode->i_sb, dot_dot_de.de_bh); + continue; + } + } + RFALSE( S_ISDIR(old_inode->i_mode) && - (!entry_points_to_object ("..", 2, &dot_dot_de, old_dir) || - !reiserfs_buffer_prepared(dot_dot_de.de_bh)), "" ); + !reiserfs_buffer_prepared(dot_dot_de.de_bh), "" ); break; } @@ -1212,6 +1225,7 @@ journal_mark_dirty (&th, old_dir->i_sb, new_de.de_bh); mark_de_hidden (old_de.de_deh + old_de.de_entry_num); + journal_mark_dirty (&th, old_dir->i_sb, old_de.de_bh); old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME; new_dir->i_ctime = new_dir->i_mtime = CURRENT_TIME; --------------020304040301040001010408-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/