From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 11 May 2012 10:56:47 +0100 Subject: [Cluster-devel] [GFS2 Patch][TRY 2] GFS2: Add rgrp information to block_alloc trace point In-Reply-To: <0e06b350-256a-4511-8a66-90f246090dbf@zmail12.collab.prod.int.phx2.redhat.com> References: <0e06b350-256a-4511-8a66-90f246090dbf@zmail12.collab.prod.int.phx2.redhat.com> Message-ID: <1336730207.2740.8.camel@menhir> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Now in the -nmw git tree. Thanks, Steve. On Wed, 2012-05-09 at 12:11 -0400, Bob Peterson wrote: > Hi, > > This is a second attempt at a patch that adds rgrp information to the > block allocation trace point for GFS2. As suggested, the patch was > modified to list the rgrp information _after_ the fields that exist today. > > Again, the reason for this patch is to allow us to trace and debug > problems with the block reservations patch, which is still in the works. > We can debug problems with reservations if we can see what block allocations > result from the block reservations. It may also be handy in figuring out > if there are problems in rgrp free space accounting. In other words, > we can use it to track the rgrp and its free space along side the allocations > that are taking place. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > --- > Author: Bob Peterson > Date: Thu Apr 12 08:32:45 2012 -0500 > > GFS2: Add rgrp information to block_alloc trace point > > This patch adds resource group information to the block allocation > trace point for GFS2. This makes it easier to debug problems with > resource groups, such as management of the number of free blocks. > > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index 645c16f..f74fb9b 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -1556,7 +1556,7 @@ int gfs2_alloc_blocks(struct gfs2_inode *ip, u64 *bn, unsigned int *nblocks, > ip->i_inode.i_gid); > > rgd->rd_free_clone -= *nblocks; > - trace_gfs2_block_alloc(ip, block, *nblocks, > + trace_gfs2_block_alloc(ip, rgd, block, *nblocks, > dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED); > *bn = block; > return 0; > @@ -1583,7 +1583,7 @@ void __gfs2_free_blocks(struct gfs2_inode *ip, u64 bstart, u32 blen, int meta) > rgd = rgblk_free(sdp, bstart, blen, GFS2_BLKST_FREE); > if (!rgd) > return; > - trace_gfs2_block_alloc(ip, bstart, blen, GFS2_BLKST_FREE); > + trace_gfs2_block_alloc(ip, rgd, bstart, blen, GFS2_BLKST_FREE); > rgd->rd_free += blen; > rgd->rd_flags &= ~GFS2_RGF_TRIMMED; > gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); > @@ -1621,7 +1621,7 @@ void gfs2_unlink_di(struct inode *inode) > rgd = rgblk_free(sdp, blkno, 1, GFS2_BLKST_UNLINKED); > if (!rgd) > return; > - trace_gfs2_block_alloc(ip, blkno, 1, GFS2_BLKST_UNLINKED); > + trace_gfs2_block_alloc(ip, rgd, blkno, 1, GFS2_BLKST_UNLINKED); > gfs2_trans_add_bh(rgd->rd_gl, rgd->rd_bits[0].bi_bh, 1); > gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); > } > @@ -1651,7 +1651,7 @@ static void gfs2_free_uninit_di(struct gfs2_rgrpd *rgd, u64 blkno) > void gfs2_free_di(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip) > { > gfs2_free_uninit_di(rgd, ip->i_no_addr); > - trace_gfs2_block_alloc(ip, ip->i_no_addr, 1, GFS2_BLKST_FREE); > + trace_gfs2_block_alloc(ip, rgd, ip->i_no_addr, 1, GFS2_BLKST_FREE); > gfs2_quota_change(ip, -1, ip->i_inode.i_uid, ip->i_inode.i_gid); > gfs2_meta_wipe(ip, ip->i_no_addr, 1); > } > diff --git a/fs/gfs2/trace_gfs2.h b/fs/gfs2/trace_gfs2.h > index dfa89cd..1b8b815 100644 > --- a/fs/gfs2/trace_gfs2.h > +++ b/fs/gfs2/trace_gfs2.h > @@ -457,10 +457,10 @@ TRACE_EVENT(gfs2_bmap, > /* Keep track of blocks as they are allocated/freed */ > TRACE_EVENT(gfs2_block_alloc, > > - TP_PROTO(const struct gfs2_inode *ip, u64 block, unsigned len, > - u8 block_state), > + TP_PROTO(const struct gfs2_inode *ip, struct gfs2_rgrpd *rgd, > + u64 block, unsigned len, u8 block_state), > > - TP_ARGS(ip, block, len, block_state), > + TP_ARGS(ip, rgd, block, len, block_state), > > TP_STRUCT__entry( > __field( dev_t, dev ) > @@ -468,6 +468,8 @@ TRACE_EVENT(gfs2_block_alloc, > __field( u64, inum ) > __field( u32, len ) > __field( u8, block_state ) > + __field( u64, rd_addr ) > + __field( u32, rd_free_clone ) > ), > > TP_fast_assign( > @@ -476,14 +478,18 @@ TRACE_EVENT(gfs2_block_alloc, > __entry->inum = ip->i_no_addr; > __entry->len = len; > __entry->block_state = block_state; > + __entry->rd_addr = rgd->rd_addr; > + __entry->rd_free_clone = rgd->rd_free_clone; > ), > > - TP_printk("%u,%u bmap %llu alloc %llu/%lu %s", > + TP_printk("%u,%u bmap %llu alloc %llu/%lu %s rg:%llu rf:%u", > MAJOR(__entry->dev), MINOR(__entry->dev), > (unsigned long long)__entry->inum, > (unsigned long long)__entry->start, > (unsigned long)__entry->len, > - block_state_name(__entry->block_state)) > + block_state_name(__entry->block_state), > + (unsigned long long)__entry->rd_addr, > + __entry->rd_free_clone) > ); > > #endif /* _TRACE_GFS2_H */ >