* [Cluster-devel] [GFS2] Some fixes
@ 2008-06-24 20:20 swhiteho
2008-06-24 20:20 ` [Cluster-devel] [PATCH 1/2] [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 swhiteho
0 siblings, 1 reply; 3+ messages in thread
From: swhiteho @ 2008-06-24 20:20 UTC (permalink / raw)
To: cluster-devel.redhat.com
The following two patches fix a couple of regressions introduced in the
last merge window. They are fairly small and both fix important bugs,
Steve.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Cluster-devel] [PATCH 1/2] [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000
2008-06-24 20:20 [Cluster-devel] [GFS2] Some fixes swhiteho
@ 2008-06-24 20:20 ` swhiteho
2008-06-24 20:20 ` [Cluster-devel] [PATCH 2/2] [GFS2] fix gfs2 block allocation (cleaned up) swhiteho
0 siblings, 1 reply; 3+ messages in thread
From: swhiteho @ 2008-06-24 20:20 UTC (permalink / raw)
To: cluster-devel.redhat.com
From: Bob Peterson <rpeterso@redhat.com>
This patch fixes bugzilla bug bz448866: gfs2: BUG: unable to
handle kernel paging request at ffff81002690e000.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 6387523..3401628 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -195,7 +195,7 @@ ulong_aligned:
depending on architecture. I've experimented with several ways
of writing this section such as using an else before the goto
but this one seems to be the fastest. */
- while ((unsigned char *)plong < end - 1) {
+ while ((unsigned char *)plong < end - sizeof(unsigned long)) {
prefetch(plong + 1);
if (((*plong) & LBITMASK) != lskipval)
break;
--
1.5.1.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Cluster-devel] [PATCH 2/2] [GFS2] fix gfs2 block allocation (cleaned up)
2008-06-24 20:20 ` [Cluster-devel] [PATCH 1/2] [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 swhiteho
@ 2008-06-24 20:20 ` swhiteho
0 siblings, 0 replies; 3+ messages in thread
From: swhiteho @ 2008-06-24 20:20 UTC (permalink / raw)
To: cluster-devel.redhat.com
From: Benjamin Marzinski <bmarzins@redhat.com>
This patch fixes bz 450641.
This patch changes the computation for zero_metapath_length(), which it
renames to metapath_branch_start(). When you are extending the metadata
tree, The indirect blocks that point to the new data block must either
diverge from the existing tree either at the inode, or at the first
indirect block. They can diverge at the first indirect block because the
inode has room for 483 pointers while the indirect blocks have room for
509 pointers, so when the tree is grown, there is some free space in the
first indirect block. What metapath_branch_start() now computes is the
height where the first indirect block for the new data block is located.
It can either be 1 (if the indirect block diverges from the inode) or 2
(if it diverges from the first indirect block).
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index c19184f..bec76b1 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -246,15 +246,11 @@ static void find_metapath(const struct gfs2_sbd *sdp, u64 block,
}
-static inline unsigned int zero_metapath_length(const struct metapath *mp,
- unsigned height)
+static inline unsigned int metapath_branch_start(const struct metapath *mp)
{
- unsigned int i;
- for (i = 0; i < height - 1; i++) {
- if (mp->mp_list[i] != 0)
- return i;
- }
- return height;
+ if (mp->mp_list[0] == 0)
+ return 2;
+ return 1;
}
/**
@@ -436,7 +432,7 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock,
struct gfs2_sbd *sdp = GFS2_SB(inode);
struct buffer_head *dibh = mp->mp_bh[0];
u64 bn, dblock = 0;
- unsigned n, i, blks, alloced = 0, iblks = 0, zmpl = 0;
+ unsigned n, i, blks, alloced = 0, iblks = 0, branch_start = 0;
unsigned dblks = 0;
unsigned ptrs_per_blk;
const unsigned end_of_metadata = height - 1;
@@ -471,9 +467,8 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock,
/* Building up tree height */
state = ALLOC_GROW_HEIGHT;
iblks = height - ip->i_height;
- zmpl = zero_metapath_length(mp, height);
- iblks -= zmpl;
- iblks += height;
+ branch_start = metapath_branch_start(mp);
+ iblks += (height - branch_start);
}
}
@@ -509,13 +504,13 @@ static int gfs2_bmap_alloc(struct inode *inode, const sector_t lblock,
sizeof(struct gfs2_meta_header));
*ptr = zero_bn;
state = ALLOC_GROW_DEPTH;
- for(i = zmpl; i < height; i++) {
+ for(i = branch_start; i < height; i++) {
if (mp->mp_bh[i] == NULL)
break;
brelse(mp->mp_bh[i]);
mp->mp_bh[i] = NULL;
}
- i = zmpl;
+ i = branch_start;
}
if (n == 0)
break;
--
1.5.1.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-06-24 20:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-24 20:20 [Cluster-devel] [GFS2] Some fixes swhiteho
2008-06-24 20:20 ` [Cluster-devel] [PATCH 1/2] [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 swhiteho
2008-06-24 20:20 ` [Cluster-devel] [PATCH 2/2] [GFS2] fix gfs2 block allocation (cleaned up) swhiteho
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).