From: Joel Becker <Joel.Becker@oracle.com>
To: Tao Ma <tao.ma@oracle.com>
Cc: Dave Chinner <david@fromorbit.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Linux Kernel <linux-kernel@vger.kernel.org>,
ocfs2-devel@oss.oracle.com, Dave Chinner <dchinner@redhat.com>,
Christoph Hellwig <hch@lst.de>, Mark Fasheh <mfasheh@suse.com>
Subject: Re: [PATCH 1/2] ocfs2: Zero the tail cluster when extending past i_size v2
Date: Tue, 6 Jul 2010 00:17:41 -0700 [thread overview]
Message-ID: <20100706071741.GF13023@mail.oracle.com> (raw)
In-Reply-To: <4C3156D0.5090001@oracle.com>
On Mon, Jul 05, 2010 at 11:51:44AM +0800, Tao Ma wrote:
> >+ /*
> >+ * If tail_blkno is in the cluster past i_size, we don't need
> >+ * to touch the cluster containing i_size at all.
> >+ */
> >+ tail_cpos = i_size_read(inode)>> osb->s_clustersize_bits;
> >+ if (ocfs2_blocks_to_clusters(inode->i_sb, tail_blkno)> tail_cpos)
> >+ tail_cpos = ocfs2_blocks_to_clusters(inode->i_sb,
> >+ tail_blkno);
> Can we always set tail_cpos in one line?
> tail_cpos = ocfs2_blocks_to_clusters(inode->i_sb, tail_blkno)?
> tail_cpos is either the same cluster as i_size or the next cluster
> and both works for tail_blkno I guess?
I had the same thought on Friday, but the current version passes
testing and I was wary of changing that.
> >+ /* Is there a cluster to zero? */
> >+ if (!p_cpos)
> >+ goto out;
> For unwritten extent, we also need to clear the pages? If yes, the
> solution doesn't complete if we have 2 unwritten extent, one
> contains i_size while one passes i_size. Here we only clear the
> pages for the 1st unwritten extent and leave the 2nd one untouched.
We probably don't need to zero unwritten extents. We cannot
have an extent past i_size, can we?
> From here to the call of CoW is a bit hard to understand. In 'if',
> num_clusters is set for CoW and in 'else', blocks_to_zero is set. So
> it isn't easy for the reader to tell why these 2 clauses are setting
> different values. So how about my code below? It looks more
> straightforward I think.
> >+ if ((tail_cpos + num_clusters)> pos_cpos) {
> >+ num_clusters = pos_cpos - tail_cpos;
> >+ if (pos_blkno>
> >+ ocfs2_clusters_to_blocks(inode->i_sb, pos_cpos))
> >+ num_clusters += 1;
> >+ } else {
> >+ blocks_to_zero =
> >+ ocfs2_clusters_to_blocks(inode->i_sb,
> >+ tail_cpos + num_clusters);
> >+ blocks_to_zero -= tail_blkno;
> >+ }
> >+
> >+ /* Now CoW the clusters we're about to zero */
> >+ if (ext_flags& OCFS2_EXT_REFCOUNTED) {
> >+ rc = ocfs2_refcount_cow(inode, di_bh, tail_cpos,
> >+ num_clusters, UINT_MAX);
> >+ if (rc) {
> >+ mlog_errno(rc);
> >+ goto out;
> >+ }
> >+ }
> /* Decrease blocks_to_zero if there is some hole after extent */
> if (tail_cpos + num_clusters <= pos_cpos) {
> blocks_to_zero =
> ocfs2_clusters_to_blocks(inode->i_sb,
> tail_cpos + num_clusters);
> blocks_to_zero -= tail_blkno;
> }
Not a bad split-out here.
> /* Now CoW if we have some refcounted clusters. */
> if (ext_flags & OCFS2_EXT_REFCOUNTED) {
> /*
> * We add one more cluster here since it will be
> * written shortly and if the pos_blkno isn't aligned
> * to the cluster size, we have to zero the blocks
> * before it.
> */
> if (tail_cpos + num_clusters > pos_cpos)
> num_clusters = pos_cpos - tail_cpos + 1;
But you dropped the check for pos_blkno alignment.
Unconditionally adding the +1 doesn't seem like a good idea.
Joel
--
"Where are my angels?
Where's my golden one?
And where is my hope
Now that my heroes are gone?"
Joel Becker
Consulting Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127
next prev parent reply other threads:[~2010-07-06 7:20 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-28 17:35 [PATCH] Revert "writeback: limit write_cache_pages integrity scanning to current EOF" Joel Becker
2010-06-29 0:24 ` Dave Chinner
2010-06-29 0:54 ` Joel Becker
2010-06-29 1:12 ` Linus Torvalds
2010-06-29 1:58 ` [Ocfs2-devel] " Joel Becker
2010-06-29 2:20 ` Linus Torvalds
2010-06-29 2:44 ` Dave Chinner
2010-06-29 8:16 ` Joel Becker
2010-06-30 1:30 ` Joel Becker
2010-07-06 19:06 ` Joel Becker
2010-06-29 1:56 ` Dave Chinner
2010-06-29 2:04 ` Joel Becker
2010-06-29 2:27 ` Dave Chinner
2010-06-29 7:18 ` Joel Becker
2010-07-02 22:49 ` [PATCH] ocfs2: Zero the tail cluster when extending past i_size Joel Becker
2010-07-03 21:32 ` [PATCH 1/2] ocfs2: Zero the tail cluster when extending past i_size v2 Joel Becker
2010-07-03 21:33 ` [PATCH 2/2] ocfs2: No need to zero pages past i_size. " Joel Becker
2010-07-04 15:13 ` Tao Ma
2010-07-05 1:38 ` Tao Ma
2010-07-06 7:10 ` Joel Becker
2010-07-06 7:09 ` Joel Becker
2010-07-06 18:39 ` [Ocfs2-devel] " Joel Becker
2010-07-05 3:51 ` [PATCH 1/2] ocfs2: Zero the tail cluster when extending past " Tao Ma
2010-07-06 7:17 ` Joel Becker [this message]
2010-07-06 7:54 ` Tao Ma
2010-07-06 11:58 ` Joel Becker
2010-07-07 0:42 ` Tao Ma
2010-07-07 2:03 ` Joel Becker
2010-07-06 18:48 ` Joel Becker
2010-07-06 18:57 ` Joel Becker
2010-07-07 11:16 ` [PATCH 0/3] ocfs2: Tail zeroing fixes Joel Becker
2010-07-12 22:45 ` [Ocfs2-devel] " Joel Becker
2010-07-07 11:16 ` [PATCH 1/3] ocfs2: When zero extending, do it by page Joel Becker
2010-07-07 15:19 ` Tao Ma
2010-07-07 20:04 ` Joel Becker
2010-07-08 3:44 ` Tao Ma
2010-07-08 9:51 ` Joel Becker
2010-07-07 11:16 ` [PATCH 2/3] ocfs2: Zero the tail cluster when extending past i_size Joel Becker
2010-07-07 11:16 ` [PATCH 3/3] ocfs2: No need to zero pages " Joel Becker
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=20100706071741.GF13023@mail.oracle.com \
--to=joel.becker@oracle.com \
--cc=david@fromorbit.com \
--cc=dchinner@redhat.com \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mfasheh@suse.com \
--cc=ocfs2-devel@oss.oracle.com \
--cc=tao.ma@oracle.com \
--cc=torvalds@linux-foundation.org \
/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