From: "Vladimir V. Saveliev" <vs@namesys.botik.ru>
To: Chris Mason <mason@suse.com>
Cc: reiserfs-list@namesys.com, linux-kernel@vger.kernel.org
Subject: Re: [reiserfs-list] [PATCH] reiserfs fix for null bytes in small files
Date: Fri, 16 Feb 2001 21:38:03 +0300 [thread overview]
Message-ID: <3A8D738B.C0999C72@namesys.botik.ru> (raw)
In-Reply-To: <823240000.982335757@tiny>
Hi
Chris Mason wrote:
> Hello everyone,
>
> I think Alexander Zarochentcev and I have finally figured out
> cause for null bytes in small reiserfs files. reiserfs stores
> parts of these files packed together in the tree, and the
> packed bytes can shift around as the tree is balanced.
>
> When converting from the packed bytes to a full block, the
> full block is inserted, and the packed bytes are removed. If
> the packed bytes are split between two tree blocks, and then
> merged by a different process balancing the tree, the conversion
> code might remove too many bytes from the file. This creates
> a hole in the file, which is why people see null bytes.
>
> If anyone wants more details, drop a line to me or the reiserfs
> list ;-) This patch against 2.4.1 (will work on any 2.4.1ac or
> 2.4.2pre as well) should fix it, please try it on your
> non-production machines, we are still running it through tests
> here.
>
Just to make things clear:
reiserfs for 2.2 does not have this bug, so there is nothing to fix.
Thanks,
vs
>
> -chris
>
> --- linux/fs/reiserfs/tail_conversion.c.old Thu Feb 15 13:16:47 2001
> +++ linux/fs/reiserfs/tail_conversion.c Thu Feb 15 13:10:23 2001
> @@ -92,7 +92,7 @@
> /* Move bytes from the direct items to the new unformatted node
> and delete them. */
> while (1) {
> - int item_len, first_direct;
> + int tail_size;
>
> /* end_key.k_offset is set so, that we will always have found
> last item of the file */
> @@ -103,13 +103,11 @@
> #ifdef CONFIG_REISERFS_CHECK
> if (!is_direct_le_ih (p_le_ih))
> reiserfs_panic (sb, "vs-14055: direct2indirect: "
> - "direct item expected, found %h", p_le_ih);
> + "direct item expected(%k), found %h",
> + &end_key, p_le_ih);
> #endif
> - if ((le_ih_k_offset (p_le_ih) & (n_blk_size - 1)) == 1)
> - first_direct = 1;
> - else
> - first_direct = 0;
> - item_len = le16_to_cpu (p_le_ih->ih_item_len);
> + tail_size = (le_ih_k_offset (p_le_ih) & (n_blk_size - 1))
> + + ih_item_len(p_le_ih) - 1;
>
> /* we only send the unbh pointer if the buffer is not up to date.
> ** this avoids overwriting good data from writepage() with old data
> @@ -123,7 +121,7 @@
> n_retval = reiserfs_delete_item (th, path, &end_key, inode,
> up_to_date_bh) ;
>
> - if (first_direct && item_len == n_retval)
> + if (tail_size == n_retval)
> // done: file does not have direct items anymore
> break;
>
prev parent reply other threads:[~2001-02-16 18:41 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-16 15:02 Chris Mason
2001-02-16 16:01 ` [reiserfs-list] " Xuan Baldauf
2001-02-16 16:07 ` Chris Mason
2001-02-16 18:38 ` 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=3A8D738B.C0999C72@namesys.botik.ru \
--to=vs@namesys.botik.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=mason@suse.com \
--cc=reiserfs-list@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®