[Ocfs2-devel] [PATCH] ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2

Joel Becker jlbec at evilplan.org
Thu Nov 17 01:52:04 PST 2011


On Wed, Oct 19, 2011 at 09:34:19AM +0800, xiaowei.hu at oracle.com wrote:
> From: Xiaowei.Hu <xiaowei.hu at 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 at oracle.com>
> Reviewed-by: WengangWang <wen.gang.wang at oracle.com>
> Reviewed-by: Sunil.Mushran <sunil.mushran at 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



More information about the Ocfs2-devel mailing list