From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joel Becker Date: Thu, 17 Nov 2011 01:52:04 -0800 Subject: [Ocfs2-devel] [PATCH] ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2 In-Reply-To: <1318988059-18289-1-git-send-email-xiaowei.hu@oracle.com> References: <1318988059-18289-1-git-send-email-xiaowei.hu@oracle.com> Message-ID: <20111117095203.GF7319@noexit.corp.google.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ocfs2-devel@oss.oracle.com On Wed, Oct 19, 2011 at 09:34:19AM +0800, xiaowei.hu at oracle.com wrote: > From: Xiaowei.Hu > > 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 > Reviewed-by: WengangWang > Reviewed-by: Sunil.Mushran 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