[Cluster-devel] [PATCH 4/4] GFS2: Allow caching of rindex glock
From: Bob Peterson rpete...@redhat.com This patch allows caching of the rindex glock. We were previously setting the GL_NOCACHE bit when the glock was released. That forced the rindex inode to be invalidated, which caused us to re-read rindex at the next access. However, it caused the glock to be unnecessarily bounced around the cluster. This patch allows the glock to remain cached, but it still causes the rindex to be re-read once it has been written to by gfs2_grow. Ben and I have tested single-node gfs2_grow cases and I've tested clustered gfs2_grow cases on my four-node cluster. Signed-off-by: Bob Peterson rpete...@redhat.com Signed-off-by: Steven Whitehouse swhit...@redhat.com diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c index 38b7a74..9b2ff0e 100644 --- a/fs/gfs2/aops.c +++ b/fs/gfs2/aops.c @@ -807,7 +807,7 @@ static int gfs2_stuffed_write_end(struct inode *inode, struct buffer_head *dibh, if (inode == sdp-sd_rindex) { adjust_fs_space(inode); - ip-i_gh.gh_flags |= GL_NOCACHE; + sdp-sd_rindex_uptodate = 0; } brelse(dibh); @@ -873,7 +873,7 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping, if (inode == sdp-sd_rindex) { adjust_fs_space(inode); - ip-i_gh.gh_flags |= GL_NOCACHE; + sdp-sd_rindex_uptodate = 0; } brelse(dibh); -- 1.7.4
[Cluster-devel] GFS2: Pre-pull patch posting (fixes)
Hi, Here are four fixes for issues that have come up since the last merge window, Steve.
[Cluster-devel] [PATCH 3/4] GFS2: Make sure rindex is uptodate before starting transactions
From: Bob Peterson rpete...@redhat.com This patch removes the call from gfs2_blk2rgrd to function gfs2_rindex_update and replaces it with individual calls. The former way turned out to be too problematic. Signed-off-by: Bob Peterson rpete...@redhat.com Signed-off-by: Steven Whitehouse swhit...@redhat.com diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 197c5c4..03c04fe 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -724,7 +724,11 @@ static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh, int metadata; unsigned int revokes = 0; int x; - int error = 0; + int error; + + error = gfs2_rindex_update(sdp); + if (error) + return error; if (!*top) sm-sm_first = 0; diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c index c35573a..a836056 100644 --- a/fs/gfs2/dir.c +++ b/fs/gfs2/dir.c @@ -1844,6 +1844,10 @@ static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, unsigned int x, size = len * sizeof(u64); int error; + error = gfs2_rindex_update(sdp); + if (error) + return error; + memset(rlist, 0, sizeof(struct gfs2_rgrp_list)); ht = kzalloc(size, GFP_NOFS); diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index c98a60e..a9ba244 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -1031,7 +1031,13 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) struct buffer_head *bh; struct gfs2_holder ghs[3]; struct gfs2_rgrpd *rgd; - int error = -EROFS; + int error; + + error = gfs2_rindex_update(sdp); + if (error) + return error; + + error = -EROFS; gfs2_holder_init(dip-i_gl, LM_ST_EXCLUSIVE, 0, ghs); gfs2_holder_init(ip-i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); @@ -1224,6 +1230,10 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, return 0; } + error = gfs2_rindex_update(sdp); + if (error) + return error; + if (odip != ndip) { error = gfs2_glock_nq_init(sdp-sd_rename_gl, LM_ST_EXCLUSIVE, 0, r_gh); @@ -1345,7 +1355,6 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, error = alloc_required; if (error 0) goto out_gunlock; - error = 0; if (alloc_required) { struct gfs2_qadata *qa = gfs2_qadata_get(ndip); diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 19354a2..3df65c9 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -332,9 +332,6 @@ struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk, bool exact) struct rb_node *n, *next; struct gfs2_rgrpd *cur; - if (gfs2_rindex_update(sdp)) - return NULL; - spin_lock(sdp-sd_rindex_spin); n = sdp-sd_rindex_tree.rb_node; while (n) { @@ -928,6 +925,10 @@ int gfs2_fitrim(struct file *filp, void __user *argp) } else if (copy_from_user(r, argp, sizeof(r))) return -EFAULT; + ret = gfs2_rindex_update(sdp); + if (ret) + return ret; + rgd = gfs2_blk2rgrpd(sdp, r.start, 0); rgd_end = gfs2_blk2rgrpd(sdp, r.start + r.len, 0); diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c index 2e5ba42..927f4df 100644 --- a/fs/gfs2/xattr.c +++ b/fs/gfs2/xattr.c @@ -238,6 +238,10 @@ static int ea_dealloc_unstuffed(struct gfs2_inode *ip, struct buffer_head *bh, unsigned int x; int error; + error = gfs2_rindex_update(sdp); + if (error) + return error; + if (GFS2_EA_IS_STUFFED(ea)) return 0; @@ -1330,6 +1334,10 @@ static int ea_dealloc_indirect(struct gfs2_inode *ip) unsigned int x; int error; + error = gfs2_rindex_update(sdp); + if (error) + return error; + memset(rlist, 0, sizeof(struct gfs2_rgrp_list)); error = gfs2_meta_read(ip-i_gl, ip-i_eattr, DIO_WAIT, indbh); @@ -1439,6 +1447,10 @@ static int ea_dealloc_block(struct gfs2_inode *ip) struct gfs2_holder gh; int error; + error = gfs2_rindex_update(sdp); + if (error) + return error; + rgd = gfs2_blk2rgrpd(sdp, ip-i_eattr, 1); if (!rgd) { gfs2_consist_inode(ip); -- 1.7.4
[Cluster-devel] [PATCH 2/4] GFS2: use depends instead of select in kconfig
From: Benjamin Poirier bpoir...@suse.de Avoids having to duplicate the dependencies of what is 'select'ed (and on down...) Those dependencies are currently incomplete, leading to broken builds with GFS2_FS_LOCKING_DLM=y and IP_SCTP=n. Signed-off-by: Benjamin Poirier bpoir...@suse.de Signed-off-by: Steven Whitehouse swhit...@redhat.com diff --git a/fs/gfs2/Kconfig b/fs/gfs2/Kconfig index c465ae0..eb08c9e 100644 --- a/fs/gfs2/Kconfig +++ b/fs/gfs2/Kconfig @@ -1,10 +1,6 @@ config GFS2_FS tristate GFS2 file system support depends on (64BIT || LBDAF) - select DLM if GFS2_FS_LOCKING_DLM - select CONFIGFS_FS if GFS2_FS_LOCKING_DLM - select SYSFS if GFS2_FS_LOCKING_DLM - select IP_SCTP if DLM_SCTP select FS_POSIX_ACL select CRC32 select QUOTACTL @@ -29,7 +25,8 @@ config GFS2_FS config GFS2_FS_LOCKING_DLM bool GFS2 DLM locking - depends on (GFS2_FS!=n) NET INET (IPV6 || IPV6=n) HOTPLUG + depends on (GFS2_FS!=n) NET INET (IPV6 || IPV6=n) \ + HOTPLUG DLM CONFIGFS_FS SYSFS help Multiple node locking module for GFS2 -- 1.7.4
[Cluster-devel] GFS2: Pull request (fixes)
[Apologies - I don't think the first message got signed as it should have. Here is a second attempt...] Hi, Please consider pulling the following patches, Steve. -- The following changes since commit dd775ae2549217d3ae09363e3edb305d0fa19928: Linux 3.4-rc1 (2012-03-31 16:24:09 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes.git master Benjamin Poirier (1): GFS2: use depends instead of select in kconfig Bob Peterson (3): GFS2: put glock reference in error patch of read_rindex_entry GFS2: Make sure rindex is uptodate before starting transactions GFS2: Allow caching of rindex glock fs/gfs2/Kconfig |7 ++- fs/gfs2/aops.c |4 ++-- fs/gfs2/bmap.c |6 +- fs/gfs2/dir.c |4 fs/gfs2/inode.c | 13 +++-- fs/gfs2/rgrp.c |8 +--- fs/gfs2/xattr.c | 12 7 files changed, 41 insertions(+), 13 deletions(-) signature.asc Description: This is a digitally signed message part
[Cluster-devel] [GFS2 PATCH 1/5] GFS2: Rename function gfs2_close to gfs2_release
Hi, This patch renames function gfs2_close to gfs2_release. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson rpete...@redhat.com --- From: Bob Peterson rpete...@redhat.com Date: Mon, 12 Mar 2012 10:56:01 -0500 Subject: [PATCH 1/5] GFS2: Rename function gfs2_close to gfs2_release VFS now calls a release function where it used to call a close function. This patch renames gfs2_close to gfs2_release so that it makes more sense to someone reading the code. --- fs/gfs2/file.c | 12 ++-- 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 7683458..916490f 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -559,14 +559,14 @@ fail: } /** - * gfs2_close - called to close a struct file + * gfs2_release - called to close a struct file * @inode: the inode the struct file belongs to * @file: the struct file being closed * * Returns: errno */ -static int gfs2_close(struct inode *inode, struct file *file) +static int gfs2_release(struct inode *inode, struct file *file) { struct gfs2_sbd *sdp = inode-i_sb-s_fs_info; struct gfs2_file *fp; @@ -1006,7 +1006,7 @@ const struct file_operations gfs2_file_fops = { .unlocked_ioctl = gfs2_ioctl, .mmap = gfs2_mmap, .open = gfs2_open, - .release= gfs2_close, + .release= gfs2_release, .fsync = gfs2_fsync, .lock = gfs2_lock, .flock = gfs2_flock, @@ -1020,7 +1020,7 @@ const struct file_operations gfs2_dir_fops = { .readdir= gfs2_readdir, .unlocked_ioctl = gfs2_ioctl, .open = gfs2_open, - .release= gfs2_close, + .release= gfs2_release, .fsync = gfs2_fsync, .lock = gfs2_lock, .flock = gfs2_flock, @@ -1038,7 +1038,7 @@ const struct file_operations gfs2_file_fops_nolock = { .unlocked_ioctl = gfs2_ioctl, .mmap = gfs2_mmap, .open = gfs2_open, - .release= gfs2_close, + .release= gfs2_release, .fsync = gfs2_fsync, .splice_read= generic_file_splice_read, .splice_write = generic_file_splice_write, @@ -1050,7 +1050,7 @@ const struct file_operations gfs2_dir_fops_nolock = { .readdir= gfs2_readdir, .unlocked_ioctl = gfs2_ioctl, .open = gfs2_open, - .release= gfs2_close, + .release= gfs2_release, .fsync = gfs2_fsync, .llseek = default_llseek, }; -- 1.7.7.6
[Cluster-devel] [GFS2 PATCH 3/5] GFS2: Use slab for block reservation memory
Hi, This patch changes block reservations so it uses slab storage. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson rpete...@redhat.com -- From: Bob Peterson rpete...@redhat.com Date: Mon, 12 Mar 2012 12:35:57 -0500 Subject: [PATCH 3/5] GFS2: Use slab for block reservation memory This patch changes block reservation memory to use slab storage rather than kmalloc/kfree. --- fs/gfs2/main.c | 10 ++ fs/gfs2/rgrp.c | 19 +++ fs/gfs2/util.c |1 + fs/gfs2/util.h |1 + 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index 754426b..ce17944 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c @@ -143,6 +143,12 @@ static int __init init_gfs2_fs(void) if (!gfs2_quotad_cachep) goto fail; + gfs2_rsrv_cachep = kmem_cache_create(gfs2_mblk, +sizeof(struct gfs2_blkreserv), + 0, 0, NULL); + if (!gfs2_rsrv_cachep) + goto fail; + register_shrinker(qd_shrinker); error = register_filesystem(gfs2_fs_type); @@ -186,6 +192,9 @@ fail: unregister_shrinker(qd_shrinker); gfs2_glock_exit(); + if (gfs2_rsrv_cachep) + kmem_cache_destroy(gfs2_rsrv_cachep); + if (gfs2_quotad_cachep) kmem_cache_destroy(gfs2_quotad_cachep); @@ -226,6 +235,7 @@ static void __exit exit_gfs2_fs(void) rcu_barrier(); mempool_destroy(gfs2_bh_pool); + kmem_cache_destroy(gfs2_rsrv_cachep); kmem_cache_destroy(gfs2_quotad_cachep); kmem_cache_destroy(gfs2_rgrpd_cachep); kmem_cache_destroy(gfs2_bufdata_cachep); diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 19bde40..0354f2c 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -1000,11 +1000,13 @@ struct gfs2_qadata *gfs2_qadata_get(struct gfs2_inode *ip) * Returns: the struct gfs2_qadata */ -static struct gfs2_blkreserv *gfs2_blkrsv_get(struct gfs2_inode *ip) +static int gfs2_blkrsv_get(struct gfs2_inode *ip) { BUG_ON(ip-i_res != NULL); - ip-i_res = kzalloc(sizeof(struct gfs2_blkreserv), GFP_NOFS); - return ip-i_res; + ip-i_res = kmem_cache_zalloc(gfs2_rsrv_cachep, GFP_NOFS); + if (!ip-i_res) + return -ENOMEM; + return 0; } /** @@ -1162,7 +1164,7 @@ static int get_local_rgrp(struct gfs2_inode *ip, u64 *last_unlinked) static void gfs2_blkrsv_put(struct gfs2_inode *ip) { BUG_ON(ip-i_res == NULL); - kfree(ip-i_res); + kmem_cache_free(gfs2_rsrv_cachep, ip-i_res); ip-i_res = NULL; } @@ -1177,14 +1179,15 @@ int gfs2_inplace_reserve(struct gfs2_inode *ip, u32 requested) { struct gfs2_sbd *sdp = GFS2_SB(ip-i_inode); struct gfs2_blkreserv *rs; - int error = 0; + int error; u64 last_unlinked = NO_BLOCK; int tries = 0; - rs = gfs2_blkrsv_get(ip); - if (!rs) - return -ENOMEM; + error = gfs2_blkrsv_get(ip); + if (error) + return error; + rs = ip-i_res; rs-rs_requested = requested; if (gfs2_assert_warn(sdp, requested)) { error = -EINVAL; diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c index 9e7765e..3afc6ac 100644 --- a/fs/gfs2/util.c +++ b/fs/gfs2/util.c @@ -25,6 +25,7 @@ struct kmem_cache *gfs2_inode_cachep __read_mostly; struct kmem_cache *gfs2_bufdata_cachep __read_mostly; struct kmem_cache *gfs2_rgrpd_cachep __read_mostly; struct kmem_cache *gfs2_quotad_cachep __read_mostly; +struct kmem_cache *gfs2_rsrv_cachep __read_mostly; mempool_t *gfs2_bh_pool __read_mostly; void gfs2_assert_i(struct gfs2_sbd *sdp) diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h index a4ce76c..8fbe6cf 100644 --- a/fs/gfs2/util.h +++ b/fs/gfs2/util.h @@ -152,6 +152,7 @@ extern struct kmem_cache *gfs2_inode_cachep; extern struct kmem_cache *gfs2_bufdata_cachep; extern struct kmem_cache *gfs2_rgrpd_cachep; extern struct kmem_cache *gfs2_quotad_cachep; +extern struct kmem_cache *gfs2_rsrv_cachep; extern mempool_t *gfs2_bh_pool; static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt, -- 1.7.7.6
[Cluster-devel] [GFS2 PATCH 4/5] GFS2: Eliminate offset parameter to gfs2_setbit
Hi, This patch eliminates a redundant parameter. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson rpete...@redhat.com --- From: Bob Peterson rpete...@redhat.com Date: Mon, 12 Mar 2012 13:03:22 -0500 Subject: [PATCH 4/5] GFS2: Eliminate offset parameter to gfs2_setbit Since we are now passing the bitmap pointer to function gfs2_setbit we no longer need to pass the bi_offset. We can reference it directly. This patch implements that, plus fixes the parameter comments. --- fs/gfs2/rgrp.c | 23 --- 1 files changed, 12 insertions(+), 11 deletions(-) diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 0354f2c..c90ad60 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -70,24 +70,25 @@ static u32 rgblk_search(struct gfs2_rgrpd *rgd, u32 goal, /** * gfs2_setbit - Set a bit in the bitmaps - * @buffer: the buffer that holds the bitmaps - * @buflen: the length (in bytes) of the buffer + * @rgd: the resource group descriptor + * @buf1: the primary buffer that holds the bitmaps + * @buf2: the clone buffer that holds the bitmaps + * @bi: the bitmap structure * @block: the block to set * @new_state: the new state of the block * */ static inline void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buf1, - unsigned char *buf2, unsigned int offset, - struct gfs2_bitmap *bi, u32 block, - unsigned char new_state) + unsigned char *buf2, struct gfs2_bitmap *bi, + u32 block, unsigned char new_state) { unsigned char *byte1, *byte2, *end, cur_state; unsigned int buflen = bi-bi_len; const unsigned int bit = (block % GFS2_NBBY) * GFS2_BIT_SIZE; - byte1 = buf1 + offset + (block / GFS2_NBBY); - end = buf1 + offset + buflen; + byte1 = buf1 + bi-bi_offset + (block / GFS2_NBBY); + end = buf1 + bi-bi_offset + buflen; BUG_ON(byte1 = end); @@ -110,7 +111,7 @@ static inline void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buf1, *byte1 ^= (cur_state ^ new_state) bit; if (buf2) { - byte2 = buf2 + offset + (block / GFS2_NBBY); + byte2 = buf2 + bi-bi_offset + (block / GFS2_NBBY); cur_state = (*byte2 bit) GFS2_BIT_MASK; *byte2 ^= (cur_state ^ new_state) bit; } @@ -1368,7 +1369,7 @@ static u64 gfs2_alloc_extent(struct gfs2_rgrpd *rgd, struct gfs2_bitmap *bi, *n = 0; buffer = bi-bi_bh-b_data + bi-bi_offset; gfs2_trans_add_bh(rgd-rd_gl, bi-bi_bh, 1); - gfs2_setbit(rgd, bi-bi_bh-b_data, bi-bi_clone, bi-bi_offset, + gfs2_setbit(rgd, bi-bi_bh-b_data, bi-bi_clone, bi, blk, dinode ? GFS2_BLKST_DINODE : GFS2_BLKST_USED); (*n)++; goal = blk; @@ -1379,7 +1380,7 @@ static u64 gfs2_alloc_extent(struct gfs2_rgrpd *rgd, struct gfs2_bitmap *bi, if (gfs2_testbit(rgd, buffer, bi-bi_len, goal) != GFS2_BLKST_FREE) break; - gfs2_setbit(rgd, bi-bi_bh-b_data, bi-bi_clone, bi-bi_offset, + gfs2_setbit(rgd, bi-bi_bh-b_data, bi-bi_clone, bi, goal, GFS2_BLKST_USED); (*n)++; } @@ -1437,7 +1438,7 @@ static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart, bi-bi_len); } gfs2_trans_add_bh(rgd-rd_gl, bi-bi_bh, 1); - gfs2_setbit(rgd, bi-bi_bh-b_data, NULL, bi-bi_offset, + gfs2_setbit(rgd, bi-bi_bh-b_data, NULL, bi, buf_blk, new_state); } -- 1.7.7.6
[Cluster-devel] [GFS2 PATCH 5/5] GFS2: Fix function parameter comments in rgrp.c
Hi, This patch just fixes a bunch of function parameter comments. Slowly, over the years, the comments have gotten out of date (mostly my fault, as I haven't been good at keeping them up to date). This patch rectifies some of that. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson rpete...@redhat.com --- From: Bob Peterson rpete...@redhat.com Date: Mon, 12 Mar 2012 13:33:33 -0500 Subject: [PATCH 5/5] GFS2: Fix function parameter comments in rgrp.c This patch fixes the function comments in rgrp.c that describe parameter passing to represent what's really passed. --- fs/gfs2/rgrp.c | 28 1 files changed, 16 insertions(+), 12 deletions(-) diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index c90ad60..6712dac 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -119,6 +119,7 @@ static inline void gfs2_setbit(struct gfs2_rgrpd *rgd, unsigned char *buf1, /** * gfs2_testbit - test a bit in the bitmaps + * @rgd: the resource group descriptor * @buffer: the buffer that holds the bitmaps * @buflen: the length (in bytes) of the buffer * @block: the block to read @@ -180,7 +181,7 @@ static inline u64 gfs2_bit_search(const __le64 *ptr, u64 mask, u8 state) /** * gfs2_bitfit - Search an rgrp's bitmap buffer to find a bit-pair representing * a block in a given allocation state. - * @buffer: the buffer that holds the bitmaps + * @buf: the buffer that holds the bitmaps * @len: the length (in bytes) of the buffer * @goal: start search at this block's bit-pair (within @buffer) * @state: GFS2_BLKST_XXX the state of the block we're looking for. @@ -232,6 +233,7 @@ static u32 gfs2_bitfit(const u8 *buf, const unsigned int len, /** * gfs2_bitcount - count the number of bits in a certain state + * @rgd: the resource group descriptor * @buffer: the buffer that holds the bitmaps * @buflen: the length (in bytes) of the buffer * @state: the state of the block we're looking for @@ -265,7 +267,6 @@ static u32 gfs2_bitcount(struct gfs2_rgrpd *rgd, const u8 *buffer, /** * gfs2_rgrp_verify - Verify that a resource group is consistent - * @sdp: the filesystem * @rgd: the rgrp * */ @@ -323,7 +324,8 @@ static inline int rgrp_contains_block(struct gfs2_rgrpd *rgd, u64 block) /** * gfs2_blk2rgrpd - Find resource group for a given data/meta block number * @sdp: The GFS2 superblock - * @n: The data block number + * @blk: The data block number + * @exact: True if this needs to be an exact match * * Returns: The resource group, or NULL if not found */ @@ -384,7 +386,7 @@ struct gfs2_rgrpd *gfs2_rgrpd_get_first(struct gfs2_sbd *sdp) /** * gfs2_rgrpd_get_next - get the next RG - * @rgd: A RG + * @rgd: the resource group descriptor * * Returns: The next rgrp */ @@ -533,6 +535,7 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd) /** * gfs2_ri_total - Total up the file system space, according to the rindex. + * @sdp: the filesystem * */ u64 gfs2_ri_total(struct gfs2_sbd *sdp) @@ -586,7 +589,8 @@ static int rgd_insert(struct gfs2_rgrpd *rgd) /** * read_rindex_entry - Pull in a new resource index entry from the disk - * @gl: The glock covering the rindex inode + * @ip: The GFS2 inode + * @ra_state: The read-ahead state * * Returns: 0 on success, 0 on EOF, error code otherwise */ @@ -744,7 +748,7 @@ static void gfs2_rgrp_out(struct gfs2_rgrpd *rgd, void *buf) /** * gfs2_rgrp_go_lock - Read in a RG's header and bitmaps - * @rgd: the struct gfs2_rgrpd describing the RG to read in + * @gh: The glock holder for the resource group * * Read in all of a Resource Group's header and bitmap blocks. * Caller must eventually call gfs2_rgrp_relse() to free the bitmaps. @@ -804,7 +808,7 @@ fail: /** * gfs2_rgrp_go_unlock - Release RG bitmaps read in with gfs2_rgrp_bh_get() - * @rgd: the struct gfs2_rgrpd describing the RG to read in + * @gh: The glock holder for the resource group * */ @@ -1039,6 +1043,8 @@ static inline u32 gfs2_bi2rgd_blk(struct gfs2_bitmap *bi, u32 blk) /** * try_rgrp_unlink - Look for any unlinked, allocated, but unused inodes * @rgd: The rgrp + * @last_unlinked: block address of the last dinode we unlinked + * @skip: block address we should explicitly not unlink * * Returns: 0 if no error * The inode, if one has been found, in inode. @@ -1103,7 +1109,7 @@ static void try_rgrp_unlink(struct gfs2_rgrpd *rgd, u64 *last_unlinked, u64 skip /** * get_local_rgrp - Choose and lock a rgrp for allocation * @ip: the inode to reserve space for - * @rgp: the chosen and locked rgrp + * @last_unlinked: the last unlinked block * * Try to acquire rgrp in way which avoids contending with others. * @@ -1172,6 +1178,7 @@ static void gfs2_blkrsv_put(struct gfs2_inode *ip) /** * gfs2_inplace_reserve - Reserve space in the filesystem * @ip: the inode to reserve space for + * @requested: the number of blocks to be reserved * * Returns: errno */ @@