From: Joel Becker <jlbec@evilplan.org>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2
Date: Thu, 17 Nov 2011 01:52:04 -0800 [thread overview]
Message-ID: <20111117095203.GF7319@noexit.corp.google.com> (raw)
In-Reply-To: <1318988059-18289-1-git-send-email-xiaowei.hu@oracle.com>
On Wed, Oct 19, 2011 at 09:34:19AM +0800, xiaowei.hu at oracle.com wrote:
> From: Xiaowei.Hu <xiaowei.hu@oracle.com>
>
> With indexed_dir enabled, ocfs2 maintains a list of dirblocks having
> space.
>
> The credit calculation in ocfs2_link_credits() did not correctly account
> for adding an entry that exactly fills a dirblock that triggers removing
> that dirblock by changing the pointer in the previous block in the list.
> The credit calculation did not account for that previous block.
>
> To expose, do:
>
> mkfs.ocfs2 -b 512 -M local /dev/sdX
> mount /dev/sdX /ocfs2
> mkdir /ocfs2/linkdir
> touch /ocfs2/linkdir/file1
> for i in `seq 1 29` ; do link /ocfs2/linkdir/file1
> /ocfs2/linkdir/linklinklinklinklinklink$i; done
> rm -f /ocfs2/linkdir/linklinklinklinklinklink10
> sleep 8
> link /ocfs2/linkdir/file1
> /ocfs2/linkdir/linklinklinklinklinklinkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>
> Note:
> The link names have been crafted for a 512 byte blocksize. Reproducing
> with a larger blocksize will require longer (or more) links. The sleep
> is important. We want jbd2 to commit the transaction so that the missing
> block does not piggy back on account of the previous transaction.
>
> Signed-off-by: XiaoweiHu <xiaowei.hu@oracle.com>
> Reviewed-by: WengangWang <wen.gang.wang@oracle.com>
> Reviewed-by: Sunil.Mushran <sunil.mushran@oracle.com>
This patch is now in the 'fixes' branch of ocfs2.git.
Joel
> ---
> fs/ocfs2/journal.h | 5 +++--
> 1 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h
> index 68cf2f6..a3385b6 100644
> --- a/fs/ocfs2/journal.h
> +++ b/fs/ocfs2/journal.h
> @@ -441,10 +441,11 @@ static inline int ocfs2_mknod_credits(struct super_block *sb, int is_dir,
> #define OCFS2_SIMPLE_DIR_EXTEND_CREDITS (2)
>
> /* file update (nlink, etc) + directory mtime/ctime + dir entry block + quota
> - * update on dir + index leaf + dx root update for free list */
> + * update on dir + index leaf + dx root update for free list +
> + * previous dirblock update in the free list */
> static inline int ocfs2_link_credits(struct super_block *sb)
> {
> - return 2*OCFS2_INODE_UPDATE_CREDITS + 3 +
> + return 2*OCFS2_INODE_UPDATE_CREDITS + 4 +
> ocfs2_quota_trans_credits(sb);
> }
>
> --
> 1.7.4.4
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
--
"I inject pure kryptonite into my brain.
It improves my kung fu, and it eases the pain."
http://www.jlbec.org/
jlbec at evilplan.org
prev parent reply other threads:[~2011-11-17 9:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-19 1:34 [Ocfs2-devel] [PATCH] ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2 xiaowei.hu at oracle.com
2011-11-17 9:52 ` Joel Becker [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=20111117095203.GF7319@noexit.corp.google.com \
--to=jlbec@evilplan.org \
--cc=ocfs2-devel@oss.oracle.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.