aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-10-02 11:49:41 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2006-10-02 11:49:41 -0400
commit3cf1e7bed4681bdb1c14b6e146ae9c0afb6c1552 (patch)
treeef994734707067f4d254219048e5fbc923fb61e3 /fs
parent2e565bb69ce2184eabf4f43e64afc79c46f46204 (diff)
[GFS2] Remove duplicate sb reading code
For some reason we had two different sets of code for reading in the superblock. This removes one of them in favour of the other. Also we don't need the temporary buffer for the sb since we already have one in the gfs2 sb itself. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/gfs2/ops_fstype.c41
-rw-r--r--fs/gfs2/super.c4
-rw-r--r--fs/gfs2/super.h1
3 files changed, 16 insertions, 30 deletions
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index a9aa2edd756f..178b33911843 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -116,7 +116,7 @@ static void init_vfs(struct super_block *sb, unsigned noatime)
116 116
117static int init_names(struct gfs2_sbd *sdp, int silent) 117static int init_names(struct gfs2_sbd *sdp, int silent)
118{ 118{
119 struct gfs2_sb *sb = NULL; 119 struct page *page;
120 char *proto, *table; 120 char *proto, *table;
121 int error = 0; 121 int error = 0;
122 122
@@ -126,37 +126,23 @@ static int init_names(struct gfs2_sbd *sdp, int silent)
126 /* Try to autodetect */ 126 /* Try to autodetect */
127 127
128 if (!proto[0] || !table[0]) { 128 if (!proto[0] || !table[0]) {
129 struct buffer_head *bh; 129 struct gfs2_sb *sb;
130 bh = sb_getblk(sdp->sd_vfs, 130 page = gfs2_read_super(sdp->sd_vfs, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift);
131 GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift); 131 if (!page)
132 lock_buffer(bh); 132 return -ENOBUFS;
133 clear_buffer_uptodate(bh); 133 sb = kmap(page);
134 clear_buffer_dirty(bh); 134 gfs2_sb_in(&sdp->sd_sb, sb);
135 unlock_buffer(bh); 135 kunmap(page);
136 ll_rw_block(READ, 1, &bh); 136 __free_page(page);
137 wait_on_buffer(bh); 137
138 138 error = gfs2_check_sb(sdp, &sdp->sd_sb, silent);
139 if (!buffer_uptodate(bh)) {
140 brelse(bh);
141 return -EIO;
142 }
143
144 sb = kmalloc(sizeof(struct gfs2_sb), GFP_KERNEL);
145 if (!sb) {
146 brelse(bh);
147 return -ENOMEM;
148 }
149 gfs2_sb_in(sb, bh->b_data);
150 brelse(bh);
151
152 error = gfs2_check_sb(sdp, sb, silent);
153 if (error) 139 if (error)
154 goto out; 140 goto out;
155 141
156 if (!proto[0]) 142 if (!proto[0])
157 proto = sb->sb_lockproto; 143 proto = sdp->sd_sb.sb_lockproto;
158 if (!table[0]) 144 if (!table[0])
159 table = sb->sb_locktable; 145 table = sdp->sd_sb.sb_locktable;
160 } 146 }
161 147
162 if (!table[0]) 148 if (!table[0])
@@ -166,7 +152,6 @@ static int init_names(struct gfs2_sbd *sdp, int silent)
166 snprintf(sdp->sd_table_name, GFS2_FSNAME_LEN, "%s", table); 152 snprintf(sdp->sd_table_name, GFS2_FSNAME_LEN, "%s", table);
167 153
168out: 154out:
169 kfree(sb);
170 return error; 155 return error;
171} 156}
172 157
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index f6ce5e4eaf7e..6a78b1b32e25 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -180,7 +180,7 @@ static int end_bio_io_page(struct bio *bio, unsigned int bytes_done, int error)
180 return 0; 180 return 0;
181} 181}
182 182
183static struct page *gfs2_read_super(struct super_block *sb, sector_t sector) 183struct page *gfs2_read_super(struct super_block *sb, sector_t sector)
184{ 184{
185 struct page *page; 185 struct page *page;
186 struct bio *bio; 186 struct bio *bio;
@@ -205,7 +205,7 @@ static struct page *gfs2_read_super(struct super_block *sb, sector_t sector)
205 205
206 bio->bi_end_io = end_bio_io_page; 206 bio->bi_end_io = end_bio_io_page;
207 bio->bi_private = page; 207 bio->bi_private = page;
208 submit_bio(READ_SYNC, bio); 208 submit_bio(READ_SYNC | (1 << BIO_RW_META), bio);
209 wait_on_page_locked(page); 209 wait_on_page_locked(page);
210 bio_put(bio); 210 bio_put(bio);
211 if (!PageUptodate(page)) { 211 if (!PageUptodate(page)) {
diff --git a/fs/gfs2/super.h b/fs/gfs2/super.h
index 5fa5119cfba6..5bb443ae0f59 100644
--- a/fs/gfs2/super.h
+++ b/fs/gfs2/super.h
@@ -16,6 +16,7 @@ void gfs2_tune_init(struct gfs2_tune *gt);
16 16
17int gfs2_check_sb(struct gfs2_sbd *sdp, struct gfs2_sb *sb, int silent); 17int gfs2_check_sb(struct gfs2_sbd *sdp, struct gfs2_sb *sb, int silent);
18int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent); 18int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent);
19struct page *gfs2_read_super(struct super_block *sb, sector_t sector);
19 20
20static inline unsigned int gfs2_jindex_size(struct gfs2_sbd *sdp) 21static inline unsigned int gfs2_jindex_size(struct gfs2_sbd *sdp)
21{ 22{