diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-05-21 12:03:22 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2008-06-27 04:39:22 -0400 |
commit | 6802e3400ff4549525930ee744030c36fce9cc73 (patch) | |
tree | db889bf5337c1d3bb12ebbf571c3c1cad1040496 /fs/gfs2/meta_io.c | |
parent | 543cf4cb3fe6f6cae3651ba918b9c56200b257d0 (diff) |
[GFS2] Clean up the glock core
This patch implements a number of cleanups to the core of the
GFS2 glock code. As a result a lot of code is removed. It looks
like a really big change, but actually a large part of this patch
is either removing or moving existing code.
There are some new bits too though, such as the new run_queue()
function which is considerably streamlined. Highlights of this
patch include:
o Fixes a cluster coherency bug during SH -> EX lock conversions
o Removes the "glmutex" code in favour of a single bit lock
o Removes the ->go_xmote_bh() for inodes since it was duplicating
->go_lock()
o We now only use the ->lm_lock() function for both locks and
unlocks (i.e. unlock is a lock with target mode LM_ST_UNLOCKED)
o The fast path is considerably shortly, giving performance gains
especially with lock_nolock
o The glock_workqueue is now used for all the callbacks from the DLM
which allows us to simplify the lock_dlm module (see following patch)
o The way is now open to make further changes such as eliminating the two
threads (gfs2_glockd and gfs2_scand) in favour of a more efficient
scheme.
This patch has undergone extensive testing with various test suites
so it should be pretty stable by now.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Cc: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2/meta_io.c')
-rw-r--r-- | fs/gfs2/meta_io.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index 78d75f892f82..09853620c951 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c | |||
@@ -129,7 +129,7 @@ void gfs2_meta_sync(struct gfs2_glock *gl) | |||
129 | } | 129 | } |
130 | 130 | ||
131 | /** | 131 | /** |
132 | * getbuf - Get a buffer with a given address space | 132 | * gfs2_getbuf - Get a buffer with a given address space |
133 | * @gl: the glock | 133 | * @gl: the glock |
134 | * @blkno: the block number (filesystem scope) | 134 | * @blkno: the block number (filesystem scope) |
135 | * @create: 1 if the buffer should be created | 135 | * @create: 1 if the buffer should be created |
@@ -137,7 +137,7 @@ void gfs2_meta_sync(struct gfs2_glock *gl) | |||
137 | * Returns: the buffer | 137 | * Returns: the buffer |
138 | */ | 138 | */ |
139 | 139 | ||
140 | static struct buffer_head *getbuf(struct gfs2_glock *gl, u64 blkno, int create) | 140 | struct buffer_head *gfs2_getbuf(struct gfs2_glock *gl, u64 blkno, int create) |
141 | { | 141 | { |
142 | struct address_space *mapping = gl->gl_aspace->i_mapping; | 142 | struct address_space *mapping = gl->gl_aspace->i_mapping; |
143 | struct gfs2_sbd *sdp = gl->gl_sbd; | 143 | struct gfs2_sbd *sdp = gl->gl_sbd; |
@@ -205,7 +205,7 @@ static void meta_prep_new(struct buffer_head *bh) | |||
205 | struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno) | 205 | struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno) |
206 | { | 206 | { |
207 | struct buffer_head *bh; | 207 | struct buffer_head *bh; |
208 | bh = getbuf(gl, blkno, CREATE); | 208 | bh = gfs2_getbuf(gl, blkno, CREATE); |
209 | meta_prep_new(bh); | 209 | meta_prep_new(bh); |
210 | return bh; | 210 | return bh; |
211 | } | 211 | } |
@@ -223,7 +223,7 @@ struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno) | |||
223 | int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags, | 223 | int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags, |
224 | struct buffer_head **bhp) | 224 | struct buffer_head **bhp) |
225 | { | 225 | { |
226 | *bhp = getbuf(gl, blkno, CREATE); | 226 | *bhp = gfs2_getbuf(gl, blkno, CREATE); |
227 | if (!buffer_uptodate(*bhp)) { | 227 | if (!buffer_uptodate(*bhp)) { |
228 | ll_rw_block(READ_META, 1, bhp); | 228 | ll_rw_block(READ_META, 1, bhp); |
229 | if (flags & DIO_WAIT) { | 229 | if (flags & DIO_WAIT) { |
@@ -346,7 +346,7 @@ void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen) | |||
346 | struct buffer_head *bh; | 346 | struct buffer_head *bh; |
347 | 347 | ||
348 | while (blen) { | 348 | while (blen) { |
349 | bh = getbuf(ip->i_gl, bstart, NO_CREATE); | 349 | bh = gfs2_getbuf(ip->i_gl, bstart, NO_CREATE); |
350 | if (bh) { | 350 | if (bh) { |
351 | lock_buffer(bh); | 351 | lock_buffer(bh); |
352 | gfs2_log_lock(sdp); | 352 | gfs2_log_lock(sdp); |
@@ -421,7 +421,7 @@ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen) | |||
421 | if (extlen > max_ra) | 421 | if (extlen > max_ra) |
422 | extlen = max_ra; | 422 | extlen = max_ra; |
423 | 423 | ||
424 | first_bh = getbuf(gl, dblock, CREATE); | 424 | first_bh = gfs2_getbuf(gl, dblock, CREATE); |
425 | 425 | ||
426 | if (buffer_uptodate(first_bh)) | 426 | if (buffer_uptodate(first_bh)) |
427 | goto out; | 427 | goto out; |
@@ -432,7 +432,7 @@ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen) | |||
432 | extlen--; | 432 | extlen--; |
433 | 433 | ||
434 | while (extlen) { | 434 | while (extlen) { |
435 | bh = getbuf(gl, dblock, CREATE); | 435 | bh = gfs2_getbuf(gl, dblock, CREATE); |
436 | 436 | ||
437 | if (!buffer_uptodate(bh) && !buffer_locked(bh)) | 437 | if (!buffer_uptodate(bh) && !buffer_locked(bh)) |
438 | ll_rw_block(READA, 1, &bh); | 438 | ll_rw_block(READA, 1, &bh); |