aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/rgrp.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-01-30 13:34:10 -0500
committerSteven Whitehouse <swhiteho@redhat.com>2006-01-30 13:34:10 -0500
commitf42faf4fa4eaf7e108dd60f3f2ca5c6e9b45352c (patch)
tree23bf95db3b941a4b14f8b90f98a8aaa663ed6c81 /fs/gfs2/rgrp.c
parentfd2ee6bb1ef02dfe1f1e1f5b44322e0854596e9a (diff)
[GFS2] Add gfs2_internal_read()
Add the new external read function. Its temporarily in jdata.c even though the protoype is in ops_file.h - this will change shortly. The current implementation will change to a page cache one when that happens. In order to effect the above changes, the various internal inodes now have Linux inodes attached to them. We keep the references to the Linux inodes, rather than the gfs2_inodes in the super block. In order to get everything to work correctly I've had to reorder the init sequence on mount (which I should probably have done earlier when .gfs2_admin was made visible). Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/rgrp.c')
-rw-r--r--fs/gfs2/rgrp.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 87c80bbce1cf..758cc565813a 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -12,19 +12,20 @@
12#include <linux/spinlock.h> 12#include <linux/spinlock.h>
13#include <linux/completion.h> 13#include <linux/completion.h>
14#include <linux/buffer_head.h> 14#include <linux/buffer_head.h>
15#include <linux/fs.h>
15#include <asm/semaphore.h> 16#include <asm/semaphore.h>
16 17
17#include "gfs2.h" 18#include "gfs2.h"
18#include "bits.h" 19#include "bits.h"
19#include "glock.h" 20#include "glock.h"
20#include "glops.h" 21#include "glops.h"
21#include "jdata.h"
22#include "lops.h" 22#include "lops.h"
23#include "meta_io.h" 23#include "meta_io.h"
24#include "quota.h" 24#include "quota.h"
25#include "rgrp.h" 25#include "rgrp.h"
26#include "super.h" 26#include "super.h"
27#include "trans.h" 27#include "trans.h"
28#include "ops_file.h"
28 29
29/** 30/**
30 * gfs2_rgrp_verify - Verify that a resource group is consistent 31 * gfs2_rgrp_verify - Verify that a resource group is consistent
@@ -268,8 +269,10 @@ static int compute_bitstructs(struct gfs2_rgrpd *rgd)
268static int gfs2_ri_update(struct gfs2_inode *ip) 269static int gfs2_ri_update(struct gfs2_inode *ip)
269{ 270{
270 struct gfs2_sbd *sdp = ip->i_sbd; 271 struct gfs2_sbd *sdp = ip->i_sbd;
272 struct inode *inode = ip->i_vnode;
271 struct gfs2_rgrpd *rgd; 273 struct gfs2_rgrpd *rgd;
272 char buf[sizeof(struct gfs2_rindex)]; 274 char buf[sizeof(struct gfs2_rindex)];
275 struct file_ra_state ra_state;
273 uint64_t junk = ip->i_di.di_size; 276 uint64_t junk = ip->i_di.di_size;
274 int error; 277 int error;
275 278
@@ -280,10 +283,10 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
280 283
281 clear_rgrpdi(sdp); 284 clear_rgrpdi(sdp);
282 285
286 file_ra_state_init(&ra_state, inode->i_mapping);
283 for (sdp->sd_rgrps = 0;; sdp->sd_rgrps++) { 287 for (sdp->sd_rgrps = 0;; sdp->sd_rgrps++) {
284 error = gfs2_jdata_read_mem(ip, buf, 288 loff_t pos = sdp->sd_rgrps * sizeof(struct gfs2_rindex);
285 sdp->sd_rgrps * 289 error = gfs2_internal_read(ip, &ra_state, buf, &pos,
286 sizeof(struct gfs2_rindex),
287 sizeof(struct gfs2_rindex)); 290 sizeof(struct gfs2_rindex));
288 if (!error) 291 if (!error)
289 break; 292 break;
@@ -350,7 +353,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
350 353
351int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh) 354int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh)
352{ 355{
353 struct gfs2_inode *ip = sdp->sd_rindex; 356 struct gfs2_inode *ip = get_v2ip(sdp->sd_rindex);
354 struct gfs2_glock *gl = ip->i_gl; 357 struct gfs2_glock *gl = ip->i_gl;
355 int error; 358 int error;
356 359