From: Hans Reiser <reiser@namesys.com>
To: torvalds@transmeta.com, linux-kernel@vger.kernel.org
Subject: [PATCH] ReiserFS bugfixes, the critical one of the thirteen, please apply, 12 of 13
Date: Wed, 10 Apr 2002 18:59:30 +0400 [thread overview]
Message-ID: <3CB45352.6030109@namesys.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: [PATCH] 2.5.8-pre3 patch 12 of 13 --]
[-- Type: message/rfc822, Size: 3134 bytes --]
From: Oleg Drokin <green@namesys.com>
To: reiser@namesys.com
Subject: [PATCH] 2.5.8-pre3 patch 12 of 13
Date: Wed, 10 Apr 2002 15:21:51 +0400
Message-ID: <20020410152151.A20916@namesys.com>
This patch fixes a problem that was created during inode structure
cleanup/ private parts separation. This fix was made by Chris Mason.
This is very critical bugfix. Without it, filesystem corruption
happens on savelinks processing and possibly in some other cases.
--- linux-2.5.8-pre2/fs/reiserfs/inode.c.orig Mon Apr 8 14:09:57 2002
+++ linux-2.5.8-pre2/fs/reiserfs/inode.c Mon Apr 8 14:23:15 2002
@@ -1111,8 +1111,19 @@
return;
}
+/* reiserfs_read_inode2 is called to read the inode off disk, and it
+** does a make_bad_inode when things go wrong. But, we need to make sure
+** and clear the key in the private portion of the inode, otherwise a
+** corresponding iput might try to delete whatever object the inode last
+** represented.
+*/
+static void reiserfs_make_bad_inode(struct inode *inode) {
+ memset(INODE_PKEY(inode), 0, KEY_SIZE);
+ make_bad_inode(inode);
+}
+
void reiserfs_read_inode(struct inode *inode) {
- make_bad_inode(inode) ;
+ reiserfs_make_bad_inode(inode) ;
}
@@ -1132,7 +1143,7 @@
int retval;
if (!p) {
- make_bad_inode(inode) ;
+ reiserfs_make_bad_inode(inode) ;
return;
}
@@ -1152,13 +1163,13 @@
reiserfs_warning ("vs-13070: reiserfs_read_inode2: "
"i/o failure occurred trying to find stat data of %K\n",
&key);
- make_bad_inode(inode) ;
+ reiserfs_make_bad_inode(inode) ;
return;
}
if (retval != ITEM_FOUND) {
/* a stale NFS handle can trigger this without it being an error */
pathrelse (&path_to_sd);
- make_bad_inode(inode) ;
+ reiserfs_make_bad_inode(inode) ;
inode->i_nlink = 0;
return;
}
@@ -1185,7 +1196,7 @@
"dead inode read from disk %K. "
"This is likely to be race with knfsd. Ignore\n",
&key );
- make_bad_inode( inode );
+ reiserfs_make_bad_inode( inode );
}
reiserfs_check_path(&path_to_sd) ; /* init inode should be relsing */
--- linux-2.5.8-pre2/fs/reiserfs/super.c.orig Mon Apr 8 14:00:50 2002
+++ linux-2.5.8-pre2/fs/reiserfs/super.c Mon Apr 8 14:23:15 2002
@@ -746,9 +746,8 @@
//
// ok, reiserfs signature (old or new) found in at the given offset
//
- brelse (bh);
-
sb_set_blocksize (s, sb_blocksize(rs));
+ brelse (bh);
bh = reiserfs_bread (s, offset / s->s_blocksize);
if (!bh) {
reply other threads:[~2002-04-10 15:06 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3CB45352.6030109@namesys.com \
--to=reiser@namesys.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox