From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] Re: [PATCH GFS2] gfs2_stuffed_write_end modifying source buffer?
Date: Thu, 01 Oct 2009 13:41:24 +0100 [thread overview]
Message-ID: <1254400884.6052.480.camel@localhost.localdomain> (raw)
In-Reply-To: <2007607020.523221253742494331.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
Hi,
I'm not convinced there is a bug here...
On Wed, 2009-09-23 at 17:48 -0400, Bob Peterson wrote:
> Hi,
>
> Maybe I'm wrong, but this looks like a bug to me: It looks like
> GFS2's function gfs2_stuffed_write_end is zeroing out portions
> of the source buffer. So if I create a character array and
> filled it with "X" then wrote only one byte to a very
> small file, all the other X's in my buffer would get nuked.
> Just a theory at this point but perhaps Steve Whitehouse can tell.
>
> Regards,
>
> Bob Peterson
> Red Hat File Systems
> --
> fs/gfs2/aops.c | 1 -
> 1 files changed, 0 insertions(+), 1 deletions(-)
>
> diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
> index 7ebae9a..6a23ba2 100644
> --- a/fs/gfs2/aops.c
> +++ b/fs/gfs2/aops.c
> @@ -801,7 +801,6 @@ static int gfs2_stuffed_write_end(struct inode *inode, struct buffer_head *dibh,
> BUG_ON((pos + len) > (dibh->b_size - sizeof(struct gfs2_dinode)));
> kaddr = kmap_atomic(page, KM_USER0);
> memcpy(buf + pos, kaddr + pos, copied);
> - memset(kaddr + pos + copied, 0, len - copied);
pos is the current file offset (which since its stuffed is also a byte
offset into this (first) page of the file)
copied is the number of bytes that were copied
len is the number of bytes that we wanted to copy (so for a successful
copy, its equal to copied and thus the memset() is a no-op
> flush_dcache_page(page);
> kunmap_atomic(kaddr, KM_USER0);
>
The purpose of that memset() is to deal with the situation where the
copy has failed part way though (source page inaccessible) and thus we
couldn't complete the operation. If the write was not an extending
write, we cannot truncate off the bit which wasn't copied, so it gets
zeroed out instead.
Steve.
prev parent reply other threads:[~2009-10-01 12:41 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <652851863.523171253742277925.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
2009-09-23 21:48 ` [Cluster-devel] [PATCH GFS2] gfs2_stuffed_write_end modifying source buffer? Bob Peterson
2009-10-01 12:41 ` Steven Whitehouse [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=1254400884.6052.480.camel@localhost.localdomain \
--to=swhiteho@redhat.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;
as well as URLs for NNTP newsgroup(s).