From: "Vladimir V. Saveliev" <vs@namesys.com>
To: reiserfs-list@namesys.com
Cc: Alexander Zarochentsev <zam@namesys.com>,
Alex Efros <powerman-asdf@yandex.ru>
Subject: Re: Need help retrieving data
Date: Mon, 4 Sep 2006 17:56:28 +0400 [thread overview]
Message-ID: <200609041756.28694.vs@namesys.com> (raw)
In-Reply-To: <200609021526.05313.zam@namesys.com>
[-- Attachment #1: Type: text/plain, Size: 2115 bytes --]
Hello
On Saturday 02 September 2006 15:26, Alexander Zarochentsev wrote:
> On 2 September 2006 13:32, Alex Efros wrote:
> > Hi!
> >
> > So, I did everything correctly to fix it? --rebuild-tree doesn't
> > broke anything?
>
> usually not.
>
> but reiserfsck --rebuild-tree is a complex operation. It has a possibility
> to insert wrong blocks into the tree if your fs was used to store another
> reiserfs image. and you have a chance to hit new reiserfsck bug.
>
> > > unfortunately no fix for fsck is available yet.
I think it is not fsck bug. When hash code is unknown - it can be defined on
mount. The attached patch is supposed to fix broken hash detection.
> >
> > If you provide fixed reiserfsck version, I can run it on my image to
> > test it and confirm image become mountabe after --rebuild-sb. But I
> > can't leave this 3GB image on my drive for months, so if you wish
>
> to make the partition mountable again it is enough to change
> one byte in the super block from 0 (hash is not set) to 3 (r5 hash).
> It can be done by a hex editor.
>
> hexdump -C of block #16 (reiserfs uses 4k-size blocks, numbers start with
> 0):
>
> ...
> 00000030 06 00 01 00 52 65 49 73 45 72 32 46 73 00 00 00
> |....ReIsEr2Fs...| 00000040 03 00 00 00 05 00 c6 04 02 00 00 00 89 28 00
> 00 |......ф.....┴(..| ^^
> this byte.
> ...
>
> according with:
>
> struct reiserfs_super_block_v1 {
> ...
> char s_magic[10]; /* reiserfs magic string indicates that
> * file system is reiserfs:
> * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs"
> */ __le16 s_fs_state; /* it is set to used by fsck to mark which *
> phase of rebuilding is done */
> __le32 s_hash_function_code; /* indicate, what hash function is
> being use ...
>
> > this testing from me - please provide fixed version in about 7-10
> >
> > days or at least notify me when it will be ready - if your need more
> > time I probably move it to DVD-RW.
>
> I already have a broken fs to experiment with.
[-- Attachment #2: reiserfs-fix-fill_super.patch --]
[-- Type: text/x-diff, Size: 3177 bytes --]
diff -puN fs/reiserfs/super.c~reiserfs-fix-fill_super fs/reiserfs/super.c
--- linux-2.6.18-rc4-mm1/fs/reiserfs/super.c~reiserfs-fix-fill_super 2006-09-01 21:13:02.000000000 +0400
+++ linux-2.6.18-rc4-mm1-vs/fs/reiserfs/super.c 2006-09-03 11:33:12.000000000 +0400
@@ -1384,7 +1384,7 @@ static __u32 find_hash_out(struct super_
do { // Some serious "goto"-hater was there ;)
u32 teahash, r5hash, yurahash;
- make_cpu_key(&key, inode, ~0, TYPE_DIRENTRY, 3);
+ make_cpu_key(&key, inode, LLONG_MAX, TYPE_DIRENTRY, 3);
retval = search_by_entry_key(s, &key, &path, &de);
if (retval == IO_ERROR) {
pathrelse(&path);
@@ -1549,7 +1549,7 @@ static int reiserfs_fill_super(struct su
struct reiserfs_super_block *rs;
char *jdev_name;
struct reiserfs_sb_info *sbi;
- int errval = -EINVAL;
+ int errval;
sbi = kmalloc(sizeof(struct reiserfs_sb_info), GFP_KERNEL);
if (!sbi) {
@@ -1576,12 +1576,14 @@ static int reiserfs_fill_super(struct su
if (reiserfs_parse_options
(s, (char *)data, &(sbi->s_mount_opt), &blocks, &jdev_name,
&commit_max_age) == 0) {
+ errval = -EINVAL;
goto error;
}
if (blocks) {
SWARN(silent, s, "jmacd-7: reiserfs_fill_super: resize option "
"for remount only");
+ errval = -EINVAL;
goto error;
}
@@ -1593,6 +1595,7 @@ static int reiserfs_fill_super(struct su
SWARN(silent, s,
"sh-2021: reiserfs_fill_super: can not find reiserfs on %s",
reiserfs_bdevname(s));
+ errval = -EINVAL;
goto error;
}
@@ -1610,6 +1613,7 @@ static int reiserfs_fill_super(struct su
"You may need to run fsck or increase size of your LVM partition");
SWARN(silent, s,
"Or may be you forgot to reboot after fdisk when it told you to");
+ errval = -EINVAL;
goto error;
}
@@ -1649,6 +1653,7 @@ static int reiserfs_fill_super(struct su
if (journal_init(s, jdev_name, old_format, commit_max_age)) {
SWARN(silent, s,
"sh-2022: reiserfs_fill_super: unable to initialize journal space");
+ errval = -ENODEV;
goto error;
} else {
jinit_done = 1; /* once this is set, journal_release must be called
@@ -1658,11 +1663,14 @@ static int reiserfs_fill_super(struct su
if (reread_meta_blocks(s)) {
SWARN(silent, s,
"jmacd-9: reiserfs_fill_super: unable to reread meta blocks after journal init");
+ errval = -ENODEV;
goto error;
}
- if (replay_only(s))
+ if (replay_only(s)) {
+ errval = -EINVAL;
goto error;
+ }
if (bdev_read_only(s->s_bdev) && !(s->s_flags & MS_RDONLY)) {
SWARN(silent, s,
@@ -1677,6 +1685,7 @@ static int reiserfs_fill_super(struct su
if (!root_inode) {
SWARN(silent, s,
"jmacd-10: reiserfs_fill_super: get root inode failed");
+ errval = -ENODEV;
goto error;
}
@@ -1688,6 +1697,7 @@ static int reiserfs_fill_super(struct su
s->s_root = d_alloc_root(root_inode);
if (!s->s_root) {
iput(root_inode);
+ errval = -ENOMEM;
goto error;
}
// define and initialize hash function
@@ -1695,6 +1705,7 @@ static int reiserfs_fill_super(struct su
if (sbi->s_hash_function == NULL) {
dput(s->s_root);
s->s_root = NULL;
+ errval = -ENODEV;
goto error;
}
_
prev parent reply other threads:[~2006-09-04 13:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-24 17:43 Need help retrieving data Brian Davis
2006-08-24 20:43 ` Hans Reiser
2006-08-25 14:22 ` Brian Davis
2006-08-25 16:02 ` Bernd Schubert
2006-09-01 10:30 ` Alex Efros
2006-09-01 11:45 ` Alexander Zarochentsev
2006-09-02 9:32 ` Alex Efros
2006-09-02 11:26 ` Alexander Zarochentsev
2006-09-04 13:56 ` Vladimir V. Saveliev [this message]
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=200609041756.28694.vs@namesys.com \
--to=vs@namesys.com \
--cc=powerman-asdf@yandex.ru \
--cc=reiserfs-list@namesys.com \
--cc=zam@namesys.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.