[Cluster-devel] cluster/gfs/libgfs libgfs.h super.c
rpeterso at sourceware.org
rpeterso at sourceware.org
Fri Jul 14 19:25:09 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rpeterso at sourceware.org 2006-07-14 19:25:08
Modified files:
gfs/libgfs : libgfs.h super.c
Log message:
Split read_sb into read_sb and compute_constants like libgfs2.
That enables programs that do not read the superblock (like mkfs)
to get the constants they need.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/libgfs/libgfs.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/libgfs/super.c.diff?cvsroot=cluster&r1=1.1&r2=1.2
--- cluster/gfs/libgfs/libgfs.h 2006/07/10 23:28:11 1.2
+++ cluster/gfs/libgfs/libgfs.h 2006/07/14 19:25:08 1.3
@@ -386,6 +386,7 @@
int write_sb(int disk_fd, struct gfs_sbd *sdp);
int set_block_ranges(int disk_fd, struct gfs_sbd *sdp);
int read_super_block(int disk_fd, struct gfs_sbd *sdp);
+int compute_constants(struct gfs_sbd *sdp);
/* ------------------------------------------------------------------------- */
/* formerly rgrp.h: */
--- cluster/gfs/libgfs/super.c 2006/05/15 18:56:07 1.1
+++ cluster/gfs/libgfs/super.c 2006/07/14 19:25:08 1.2
@@ -73,40 +73,19 @@
return error;
}
-
/*
- * read_sb: read the super block from disk
- * sdp: in-core super block
- *
- * This function reads in the super block from disk and
- * initializes various constants maintained in the super
- * block
+ * compute_constants: compute constants for the superblock
*
- * Returns: 0 on success, -1 on failure.
+ * assumes:
+ * sb_bsize_shift is set either from the ondisk superblock or otherwise.
+ * sb_bsize is set either from the ondisk superblock or otherwise.
*/
-int read_sb(int disk_fd, struct gfs_sbd *sdp)
+int compute_constants(struct gfs_sbd *sdp)
{
- osi_buf_t *bh;
- uint64 space = 0;
unsigned int x;
- int error;
- error = get_and_read_buf(disk_fd, 512, /* assume 512 block size at first */
- GFS_SB_ADDR >> sdp->sd_fsb2bb_shift, &bh, 0);
- if (error){
- log_crit("Unable to read superblock\n");
- goto out;
- }
-
- gfs_sb_in(&sdp->sd_sb, BH_DATA(bh));
-
- relse_buf(bh);
-
- error = check_sb(sdp, &sdp->sd_sb);
- if (error)
- goto out;
+ uint64 space = 0;
+ int error = 0;
-/* FIXME: Need to verify all this */
- /* FIXME: What's this 9? */
sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift - 9;
sdp->sd_diptrs =
(sdp->sd_sb.sb_bsize-sizeof(struct gfs_dinode)) /
@@ -115,7 +94,6 @@
(sdp->sd_sb.sb_bsize-sizeof(struct gfs_indirect)) /
sizeof(uint64);
sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs_meta_header);
- /* FIXME: Why is this /2 */
sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2;
sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(uint64);
sdp->sd_heightsize[0] = sdp->sd_sb.sb_bsize -
@@ -133,7 +111,7 @@
if(sdp->sd_max_height > GFS_MAX_META_HEIGHT){
log_err("Bad max metadata height.\n");
error = -1;
- goto out;
+ return error;
}
sdp->sd_jheightsize[0] = sdp->sd_sb.sb_bsize -
@@ -151,6 +129,39 @@
log_err("Bad max jheight.\n");
error = -1;
}
+ return error;
+}
+
+/*
+ * read_sb: read the super block from disk
+ * sdp: in-core super block
+ *
+ * This function reads in the super block from disk and
+ * initializes various constants maintained in the super
+ * block
+ *
+ * Returns: 0 on success, -1 on failure.
+ */
+int read_sb(int disk_fd, struct gfs_sbd *sdp)
+{
+ osi_buf_t *bh;
+ int error;
+ error = get_and_read_buf(disk_fd, 512, /* assume 512 block size at first */
+ GFS_SB_ADDR >> sdp->sd_fsb2bb_shift, &bh, 0);
+ if (error){
+ log_crit("Unable to read superblock\n");
+ goto out;
+ }
+
+ gfs_sb_in(&sdp->sd_sb, BH_DATA(bh));
+
+ relse_buf(bh);
+
+ error = check_sb(sdp, &sdp->sd_sb);
+ if (error)
+ goto out;
+
+ compute_constants(sdp);
out:
More information about the Cluster-devel
mailing list