[GFS2] Clean up invalidatepage/releasepage
[powerpc.git] / fs / gfs2 / ops_fstype.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9
10 #include <linux/sched.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/blkdev.h>
16 #include <linux/kthread.h>
17 #include <linux/namei.h>
18 #include <linux/mount.h>
19 #include <linux/gfs2_ondisk.h>
20 #include <linux/lm_interface.h>
21
22 #include "gfs2.h"
23 #include "incore.h"
24 #include "daemon.h"
25 #include "glock.h"
26 #include "glops.h"
27 #include "inode.h"
28 #include "lm.h"
29 #include "mount.h"
30 #include "ops_fstype.h"
31 #include "ops_dentry.h"
32 #include "ops_super.h"
33 #include "recovery.h"
34 #include "rgrp.h"
35 #include "super.h"
36 #include "sys.h"
37 #include "util.h"
38 #include "log.h"
39
40 #define DO 0
41 #define UNDO 1
42
43 static struct gfs2_sbd *init_sbd(struct super_block *sb)
44 {
45         struct gfs2_sbd *sdp;
46
47         sdp = kzalloc(sizeof(struct gfs2_sbd), GFP_KERNEL);
48         if (!sdp)
49                 return NULL;
50
51         sb->s_fs_info = sdp;
52         sdp->sd_vfs = sb;
53
54         gfs2_tune_init(&sdp->sd_tune);
55
56         INIT_LIST_HEAD(&sdp->sd_reclaim_list);
57         spin_lock_init(&sdp->sd_reclaim_lock);
58         init_waitqueue_head(&sdp->sd_reclaim_wq);
59
60         mutex_init(&sdp->sd_inum_mutex);
61         spin_lock_init(&sdp->sd_statfs_spin);
62         mutex_init(&sdp->sd_statfs_mutex);
63
64         spin_lock_init(&sdp->sd_rindex_spin);
65         mutex_init(&sdp->sd_rindex_mutex);
66         INIT_LIST_HEAD(&sdp->sd_rindex_list);
67         INIT_LIST_HEAD(&sdp->sd_rindex_mru_list);
68         INIT_LIST_HEAD(&sdp->sd_rindex_recent_list);
69
70         INIT_LIST_HEAD(&sdp->sd_jindex_list);
71         spin_lock_init(&sdp->sd_jindex_spin);
72         mutex_init(&sdp->sd_jindex_mutex);
73
74         INIT_LIST_HEAD(&sdp->sd_quota_list);
75         spin_lock_init(&sdp->sd_quota_spin);
76         mutex_init(&sdp->sd_quota_mutex);
77
78         spin_lock_init(&sdp->sd_log_lock);
79
80         INIT_LIST_HEAD(&sdp->sd_log_le_gl);
81         INIT_LIST_HEAD(&sdp->sd_log_le_buf);
82         INIT_LIST_HEAD(&sdp->sd_log_le_revoke);
83         INIT_LIST_HEAD(&sdp->sd_log_le_rg);
84         INIT_LIST_HEAD(&sdp->sd_log_le_databuf);
85
86         mutex_init(&sdp->sd_log_reserve_mutex);
87         INIT_LIST_HEAD(&sdp->sd_ail1_list);
88         INIT_LIST_HEAD(&sdp->sd_ail2_list);
89
90         init_rwsem(&sdp->sd_log_flush_lock);
91         INIT_LIST_HEAD(&sdp->sd_log_flush_list);
92
93         INIT_LIST_HEAD(&sdp->sd_revoke_list);
94
95         mutex_init(&sdp->sd_freeze_lock);
96
97         return sdp;
98 }
99
100 static void init_vfs(struct super_block *sb, unsigned noatime)
101 {
102         struct gfs2_sbd *sdp = sb->s_fs_info;
103
104         sb->s_magic = GFS2_MAGIC;
105         sb->s_op = &gfs2_super_ops;
106         sb->s_export_op = &gfs2_export_ops;
107         sb->s_time_gran = 1;
108         sb->s_maxbytes = MAX_LFS_FILESIZE;
109
110         if (sb->s_flags & (MS_NOATIME | MS_NODIRATIME))
111                 set_bit(noatime, &sdp->sd_flags);
112
113         /* Don't let the VFS update atimes.  GFS2 handles this itself. */
114         sb->s_flags |= MS_NOATIME | MS_NODIRATIME;
115 }
116
117 static int init_names(struct gfs2_sbd *sdp, int silent)
118 {
119         char *proto, *table;
120         int error = 0;
121
122         proto = sdp->sd_args.ar_lockproto;
123         table = sdp->sd_args.ar_locktable;
124
125         /*  Try to autodetect  */
126
127         if (!proto[0] || !table[0]) {
128                 error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift);
129                 if (error)
130                         return error;
131
132                 error = gfs2_check_sb(sdp, &sdp->sd_sb, silent);
133                 if (error)
134                         goto out;
135
136                 if (!proto[0])
137                         proto = sdp->sd_sb.sb_lockproto;
138                 if (!table[0])
139                         table = sdp->sd_sb.sb_locktable;
140         }
141
142         if (!table[0])
143                 table = sdp->sd_vfs->s_id;
144
145         snprintf(sdp->sd_proto_name, GFS2_FSNAME_LEN, "%s", proto);
146         snprintf(sdp->sd_table_name, GFS2_FSNAME_LEN, "%s", table);
147
148         table = sdp->sd_table_name;
149         while ((table = strchr(table, '/')))
150                 *table = '_';
151
152 out:
153         return error;
154 }
155
156 static int init_locking(struct gfs2_sbd *sdp, struct gfs2_holder *mount_gh,
157                         int undo)
158 {
159         struct task_struct *p;
160         int error = 0;
161
162         if (undo)
163                 goto fail_trans;
164
165         for (sdp->sd_glockd_num = 0;
166              sdp->sd_glockd_num < sdp->sd_args.ar_num_glockd;
167              sdp->sd_glockd_num++) {
168                 p = kthread_run(gfs2_glockd, sdp, "gfs2_glockd");
169                 error = IS_ERR(p);
170                 if (error) {
171                         fs_err(sdp, "can't start glockd thread: %d\n", error);
172                         goto fail;
173                 }
174                 sdp->sd_glockd_process[sdp->sd_glockd_num] = p;
175         }
176
177         error = gfs2_glock_nq_num(sdp,
178                                   GFS2_MOUNT_LOCK, &gfs2_nondisk_glops,
179                                   LM_ST_EXCLUSIVE, LM_FLAG_NOEXP | GL_NOCACHE,
180                                   mount_gh);
181         if (error) {
182                 fs_err(sdp, "can't acquire mount glock: %d\n", error);
183                 goto fail;
184         }
185
186         error = gfs2_glock_nq_num(sdp,
187                                   GFS2_LIVE_LOCK, &gfs2_nondisk_glops,
188                                   LM_ST_SHARED,
189                                   LM_FLAG_NOEXP | GL_EXACT,
190                                   &sdp->sd_live_gh);
191         if (error) {
192                 fs_err(sdp, "can't acquire live glock: %d\n", error);
193                 goto fail_mount;
194         }
195
196         error = gfs2_glock_get(sdp, GFS2_RENAME_LOCK, &gfs2_nondisk_glops,
197                                CREATE, &sdp->sd_rename_gl);
198         if (error) {
199                 fs_err(sdp, "can't create rename glock: %d\n", error);
200                 goto fail_live;
201         }
202
203         error = gfs2_glock_get(sdp, GFS2_TRANS_LOCK, &gfs2_trans_glops,
204                                CREATE, &sdp->sd_trans_gl);
205         if (error) {
206                 fs_err(sdp, "can't create transaction glock: %d\n", error);
207                 goto fail_rename;
208         }
209         set_bit(GLF_STICKY, &sdp->sd_trans_gl->gl_flags);
210
211         return 0;
212
213 fail_trans:
214         gfs2_glock_put(sdp->sd_trans_gl);
215 fail_rename:
216         gfs2_glock_put(sdp->sd_rename_gl);
217 fail_live:
218         gfs2_glock_dq_uninit(&sdp->sd_live_gh);
219 fail_mount:
220         gfs2_glock_dq_uninit(mount_gh);
221 fail:
222         while (sdp->sd_glockd_num--)
223                 kthread_stop(sdp->sd_glockd_process[sdp->sd_glockd_num]);
224
225         return error;
226 }
227
228 static inline struct inode *gfs2_lookup_root(struct super_block *sb,
229                                              u64 no_addr)
230 {
231         return gfs2_inode_lookup(sb, DT_DIR, no_addr, 0);
232 }
233
234 static int init_sb(struct gfs2_sbd *sdp, int silent, int undo)
235 {
236         struct super_block *sb = sdp->sd_vfs;
237         struct gfs2_holder sb_gh;
238         u64 no_addr;
239         struct inode *inode;
240         int error = 0;
241
242         if (undo) {
243                 if (sb->s_root) {
244                         dput(sb->s_root);
245                         sb->s_root = NULL;
246                 }
247                 return 0;
248         }
249
250         error = gfs2_glock_nq_num(sdp, GFS2_SB_LOCK, &gfs2_meta_glops,
251                                  LM_ST_SHARED, 0, &sb_gh);
252         if (error) {
253                 fs_err(sdp, "can't acquire superblock glock: %d\n", error);
254                 return error;
255         }
256
257         error = gfs2_read_sb(sdp, sb_gh.gh_gl, silent);
258         if (error) {
259                 fs_err(sdp, "can't read superblock: %d\n", error);
260                 goto out;
261         }
262
263         /* Set up the buffer cache and SB for real */
264         if (sdp->sd_sb.sb_bsize < bdev_hardsect_size(sb->s_bdev)) {
265                 error = -EINVAL;
266                 fs_err(sdp, "FS block size (%u) is too small for device "
267                        "block size (%u)\n",
268                        sdp->sd_sb.sb_bsize, bdev_hardsect_size(sb->s_bdev));
269                 goto out;
270         }
271         if (sdp->sd_sb.sb_bsize > PAGE_SIZE) {
272                 error = -EINVAL;
273                 fs_err(sdp, "FS block size (%u) is too big for machine "
274                        "page size (%u)\n",
275                        sdp->sd_sb.sb_bsize, (unsigned int)PAGE_SIZE);
276                 goto out;
277         }
278         sb_set_blocksize(sb, sdp->sd_sb.sb_bsize);
279
280         /* Get the root inode */
281         no_addr = sdp->sd_sb.sb_root_dir.no_addr;
282         if (sb->s_type == &gfs2meta_fs_type)
283                 no_addr = sdp->sd_sb.sb_master_dir.no_addr;
284         inode = gfs2_lookup_root(sb, no_addr);
285         if (IS_ERR(inode)) {
286                 error = PTR_ERR(inode);
287                 fs_err(sdp, "can't read in root inode: %d\n", error);
288                 goto out;
289         }
290
291         sb->s_root = d_alloc_root(inode);
292         if (!sb->s_root) {
293                 fs_err(sdp, "can't get root dentry\n");
294                 error = -ENOMEM;
295                 iput(inode);
296         } else
297                 sb->s_root->d_op = &gfs2_dops;
298         
299 out:
300         gfs2_glock_dq_uninit(&sb_gh);
301         return error;
302 }
303
304 static int init_journal(struct gfs2_sbd *sdp, int undo)
305 {
306         struct gfs2_holder ji_gh;
307         struct task_struct *p;
308         struct gfs2_inode *ip;
309         int jindex = 1;
310         int error = 0;
311
312         if (undo) {
313                 jindex = 0;
314                 goto fail_recoverd;
315         }
316
317         sdp->sd_jindex = gfs2_lookup_simple(sdp->sd_master_dir, "jindex");
318         if (IS_ERR(sdp->sd_jindex)) {
319                 fs_err(sdp, "can't lookup journal index: %d\n", error);
320                 return PTR_ERR(sdp->sd_jindex);
321         }
322         ip = GFS2_I(sdp->sd_jindex);
323         set_bit(GLF_STICKY, &ip->i_gl->gl_flags);
324
325         /* Load in the journal index special file */
326
327         error = gfs2_jindex_hold(sdp, &ji_gh);
328         if (error) {
329                 fs_err(sdp, "can't read journal index: %d\n", error);
330                 goto fail;
331         }
332
333         error = -EINVAL;
334         if (!gfs2_jindex_size(sdp)) {
335                 fs_err(sdp, "no journals!\n");
336                 goto fail_jindex;
337         }
338
339         if (sdp->sd_args.ar_spectator) {
340                 sdp->sd_jdesc = gfs2_jdesc_find(sdp, 0);
341                 sdp->sd_log_blks_free = sdp->sd_jdesc->jd_blocks;
342         } else {
343                 if (sdp->sd_lockstruct.ls_jid >= gfs2_jindex_size(sdp)) {
344                         fs_err(sdp, "can't mount journal #%u\n",
345                                sdp->sd_lockstruct.ls_jid);
346                         fs_err(sdp, "there are only %u journals (0 - %u)\n",
347                                gfs2_jindex_size(sdp),
348                                gfs2_jindex_size(sdp) - 1);
349                         goto fail_jindex;
350                 }
351                 sdp->sd_jdesc = gfs2_jdesc_find(sdp, sdp->sd_lockstruct.ls_jid);
352
353                 error = gfs2_glock_nq_num(sdp, sdp->sd_lockstruct.ls_jid,
354                                           &gfs2_journal_glops,
355                                           LM_ST_EXCLUSIVE, LM_FLAG_NOEXP,
356                                           &sdp->sd_journal_gh);
357                 if (error) {
358                         fs_err(sdp, "can't acquire journal glock: %d\n", error);
359                         goto fail_jindex;
360                 }
361
362                 ip = GFS2_I(sdp->sd_jdesc->jd_inode);
363                 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED,
364                                            LM_FLAG_NOEXP | GL_EXACT | GL_NOCACHE,
365                                            &sdp->sd_jinode_gh);
366                 if (error) {
367                         fs_err(sdp, "can't acquire journal inode glock: %d\n",
368                                error);
369                         goto fail_journal_gh;
370                 }
371
372                 error = gfs2_jdesc_check(sdp->sd_jdesc);
373                 if (error) {
374                         fs_err(sdp, "my journal (%u) is bad: %d\n",
375                                sdp->sd_jdesc->jd_jid, error);
376                         goto fail_jinode_gh;
377                 }
378                 sdp->sd_log_blks_free = sdp->sd_jdesc->jd_blocks;
379         }
380
381         if (sdp->sd_lockstruct.ls_first) {
382                 unsigned int x;
383                 for (x = 0; x < sdp->sd_journals; x++) {
384                         error = gfs2_recover_journal(gfs2_jdesc_find(sdp, x));
385                         if (error) {
386                                 fs_err(sdp, "error recovering journal %u: %d\n",
387                                        x, error);
388                                 goto fail_jinode_gh;
389                         }
390                 }
391
392                 gfs2_lm_others_may_mount(sdp);
393         } else if (!sdp->sd_args.ar_spectator) {
394                 error = gfs2_recover_journal(sdp->sd_jdesc);
395                 if (error) {
396                         fs_err(sdp, "error recovering my journal: %d\n", error);
397                         goto fail_jinode_gh;
398                 }
399         }
400
401         set_bit(SDF_JOURNAL_CHECKED, &sdp->sd_flags);
402         gfs2_glock_dq_uninit(&ji_gh);
403         jindex = 0;
404
405         p = kthread_run(gfs2_recoverd, sdp, "gfs2_recoverd");
406         error = IS_ERR(p);
407         if (error) {
408                 fs_err(sdp, "can't start recoverd thread: %d\n", error);
409                 goto fail_jinode_gh;
410         }
411         sdp->sd_recoverd_process = p;
412
413         return 0;
414
415 fail_recoverd:
416         kthread_stop(sdp->sd_recoverd_process);
417 fail_jinode_gh:
418         if (!sdp->sd_args.ar_spectator)
419                 gfs2_glock_dq_uninit(&sdp->sd_jinode_gh);
420 fail_journal_gh:
421         if (!sdp->sd_args.ar_spectator)
422                 gfs2_glock_dq_uninit(&sdp->sd_journal_gh);
423 fail_jindex:
424         gfs2_jindex_free(sdp);
425         if (jindex)
426                 gfs2_glock_dq_uninit(&ji_gh);
427 fail:
428         iput(sdp->sd_jindex);
429         return error;
430 }
431
432
433 static int init_inodes(struct gfs2_sbd *sdp, int undo)
434 {
435         int error = 0;
436         struct gfs2_inode *ip;
437         struct inode *inode;
438
439         if (undo)
440                 goto fail_qinode;
441
442         inode = gfs2_lookup_root(sdp->sd_vfs, sdp->sd_sb.sb_master_dir.no_addr);
443         if (IS_ERR(inode)) {
444                 error = PTR_ERR(inode);
445                 fs_err(sdp, "can't read in master directory: %d\n", error);
446                 goto fail;
447         }
448         sdp->sd_master_dir = inode;
449
450         error = init_journal(sdp, undo);
451         if (error)
452                 goto fail_master;
453
454         /* Read in the master inode number inode */
455         sdp->sd_inum_inode = gfs2_lookup_simple(sdp->sd_master_dir, "inum");
456         if (IS_ERR(sdp->sd_inum_inode)) {
457                 error = PTR_ERR(sdp->sd_inum_inode);
458                 fs_err(sdp, "can't read in inum inode: %d\n", error);
459                 goto fail_journal;
460         }
461
462
463         /* Read in the master statfs inode */
464         sdp->sd_statfs_inode = gfs2_lookup_simple(sdp->sd_master_dir, "statfs");
465         if (IS_ERR(sdp->sd_statfs_inode)) {
466                 error = PTR_ERR(sdp->sd_statfs_inode);
467                 fs_err(sdp, "can't read in statfs inode: %d\n", error);
468                 goto fail_inum;
469         }
470
471         /* Read in the resource index inode */
472         sdp->sd_rindex = gfs2_lookup_simple(sdp->sd_master_dir, "rindex");
473         if (IS_ERR(sdp->sd_rindex)) {
474                 error = PTR_ERR(sdp->sd_rindex);
475                 fs_err(sdp, "can't get resource index inode: %d\n", error);
476                 goto fail_statfs;
477         }
478         ip = GFS2_I(sdp->sd_rindex);
479         set_bit(GLF_STICKY, &ip->i_gl->gl_flags);
480         sdp->sd_rindex_vn = ip->i_gl->gl_vn - 1;
481
482         /* Read in the quota inode */
483         sdp->sd_quota_inode = gfs2_lookup_simple(sdp->sd_master_dir, "quota");
484         if (IS_ERR(sdp->sd_quota_inode)) {
485                 error = PTR_ERR(sdp->sd_quota_inode);
486                 fs_err(sdp, "can't get quota file inode: %d\n", error);
487                 goto fail_rindex;
488         }
489         return 0;
490
491 fail_qinode:
492         iput(sdp->sd_quota_inode);
493 fail_rindex:
494         gfs2_clear_rgrpd(sdp);
495         iput(sdp->sd_rindex);
496 fail_statfs:
497         iput(sdp->sd_statfs_inode);
498 fail_inum:
499         iput(sdp->sd_inum_inode);
500 fail_journal:
501         init_journal(sdp, UNDO);
502 fail_master:
503         iput(sdp->sd_master_dir);
504 fail:
505         return error;
506 }
507
508 static int init_per_node(struct gfs2_sbd *sdp, int undo)
509 {
510         struct inode *pn = NULL;
511         char buf[30];
512         int error = 0;
513         struct gfs2_inode *ip;
514
515         if (sdp->sd_args.ar_spectator)
516                 return 0;
517
518         if (undo)
519                 goto fail_qc_gh;
520
521         pn = gfs2_lookup_simple(sdp->sd_master_dir, "per_node");
522         if (IS_ERR(pn)) {
523                 error = PTR_ERR(pn);
524                 fs_err(sdp, "can't find per_node directory: %d\n", error);
525                 return error;
526         }
527
528         sprintf(buf, "inum_range%u", sdp->sd_jdesc->jd_jid);
529         sdp->sd_ir_inode = gfs2_lookup_simple(pn, buf);
530         if (IS_ERR(sdp->sd_ir_inode)) {
531                 error = PTR_ERR(sdp->sd_ir_inode);
532                 fs_err(sdp, "can't find local \"ir\" file: %d\n", error);
533                 goto fail;
534         }
535
536         sprintf(buf, "statfs_change%u", sdp->sd_jdesc->jd_jid);
537         sdp->sd_sc_inode = gfs2_lookup_simple(pn, buf);
538         if (IS_ERR(sdp->sd_sc_inode)) {
539                 error = PTR_ERR(sdp->sd_sc_inode);
540                 fs_err(sdp, "can't find local \"sc\" file: %d\n", error);
541                 goto fail_ir_i;
542         }
543
544         sprintf(buf, "quota_change%u", sdp->sd_jdesc->jd_jid);
545         sdp->sd_qc_inode = gfs2_lookup_simple(pn, buf);
546         if (IS_ERR(sdp->sd_qc_inode)) {
547                 error = PTR_ERR(sdp->sd_qc_inode);
548                 fs_err(sdp, "can't find local \"qc\" file: %d\n", error);
549                 goto fail_ut_i;
550         }
551
552         iput(pn);
553         pn = NULL;
554
555         ip = GFS2_I(sdp->sd_ir_inode);
556         error = gfs2_glock_nq_init(ip->i_gl,
557                                    LM_ST_EXCLUSIVE, 0,
558                                    &sdp->sd_ir_gh);
559         if (error) {
560                 fs_err(sdp, "can't lock local \"ir\" file: %d\n", error);
561                 goto fail_qc_i;
562         }
563
564         ip = GFS2_I(sdp->sd_sc_inode);
565         error = gfs2_glock_nq_init(ip->i_gl,
566                                    LM_ST_EXCLUSIVE, 0,
567                                    &sdp->sd_sc_gh);
568         if (error) {
569                 fs_err(sdp, "can't lock local \"sc\" file: %d\n", error);
570                 goto fail_ir_gh;
571         }
572
573         ip = GFS2_I(sdp->sd_qc_inode);
574         error = gfs2_glock_nq_init(ip->i_gl,
575                                    LM_ST_EXCLUSIVE, 0,
576                                    &sdp->sd_qc_gh);
577         if (error) {
578                 fs_err(sdp, "can't lock local \"qc\" file: %d\n", error);
579                 goto fail_ut_gh;
580         }
581
582         return 0;
583
584 fail_qc_gh:
585         gfs2_glock_dq_uninit(&sdp->sd_qc_gh);
586 fail_ut_gh:
587         gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
588 fail_ir_gh:
589         gfs2_glock_dq_uninit(&sdp->sd_ir_gh);
590 fail_qc_i:
591         iput(sdp->sd_qc_inode);
592 fail_ut_i:
593         iput(sdp->sd_sc_inode);
594 fail_ir_i:
595         iput(sdp->sd_ir_inode);
596 fail:
597         if (pn)
598                 iput(pn);
599         return error;
600 }
601
602 static int init_threads(struct gfs2_sbd *sdp, int undo)
603 {
604         struct task_struct *p;
605         int error = 0;
606
607         if (undo)
608                 goto fail_quotad;
609
610         sdp->sd_log_flush_time = jiffies;
611         sdp->sd_jindex_refresh_time = jiffies;
612
613         p = kthread_run(gfs2_logd, sdp, "gfs2_logd");
614         error = IS_ERR(p);
615         if (error) {
616                 fs_err(sdp, "can't start logd thread: %d\n", error);
617                 return error;
618         }
619         sdp->sd_logd_process = p;
620
621         sdp->sd_statfs_sync_time = jiffies;
622         sdp->sd_quota_sync_time = jiffies;
623
624         p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad");
625         error = IS_ERR(p);
626         if (error) {
627                 fs_err(sdp, "can't start quotad thread: %d\n", error);
628                 goto fail;
629         }
630         sdp->sd_quotad_process = p;
631
632         return 0;
633
634
635 fail_quotad:
636         kthread_stop(sdp->sd_quotad_process);
637 fail:
638         kthread_stop(sdp->sd_logd_process);
639         return error;
640 }
641
642 /**
643  * fill_super - Read in superblock
644  * @sb: The VFS superblock
645  * @data: Mount options
646  * @silent: Don't complain if it's not a GFS2 filesystem
647  *
648  * Returns: errno
649  */
650
651 static int fill_super(struct super_block *sb, void *data, int silent)
652 {
653         struct gfs2_sbd *sdp;
654         struct gfs2_holder mount_gh;
655         int error;
656
657         sdp = init_sbd(sb);
658         if (!sdp) {
659                 printk(KERN_WARNING "GFS2: can't alloc struct gfs2_sbd\n");
660                 return -ENOMEM;
661         }
662
663         error = gfs2_mount_args(sdp, (char *)data, 0);
664         if (error) {
665                 printk(KERN_WARNING "GFS2: can't parse mount arguments\n");
666                 goto fail;
667         }
668
669         init_vfs(sb, SDF_NOATIME);
670
671         /* Set up the buffer cache and fill in some fake block size values
672            to allow us to read-in the on-disk superblock. */
673         sdp->sd_sb.sb_bsize = sb_min_blocksize(sb, GFS2_BASIC_BLOCK);
674         sdp->sd_sb.sb_bsize_shift = sb->s_blocksize_bits;
675         sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift -
676                                GFS2_BASIC_BLOCK_SHIFT;
677         sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift;
678
679         error = init_names(sdp, silent);
680         if (error)
681                 goto fail;
682
683         gfs2_create_debugfs_file(sdp);
684
685         error = gfs2_sys_fs_add(sdp);
686         if (error)
687                 goto fail;
688
689         error = gfs2_lm_mount(sdp, silent);
690         if (error)
691                 goto fail_sys;
692
693         error = init_locking(sdp, &mount_gh, DO);
694         if (error)
695                 goto fail_lm;
696
697         error = init_sb(sdp, silent, DO);
698         if (error)
699                 goto fail_locking;
700
701         error = init_inodes(sdp, DO);
702         if (error)
703                 goto fail_sb;
704
705         error = init_per_node(sdp, DO);
706         if (error)
707                 goto fail_inodes;
708
709         error = gfs2_statfs_init(sdp);
710         if (error) {
711                 fs_err(sdp, "can't initialize statfs subsystem: %d\n", error);
712                 goto fail_per_node;
713         }
714
715         error = init_threads(sdp, DO);
716         if (error)
717                 goto fail_per_node;
718
719         if (!(sb->s_flags & MS_RDONLY)) {
720                 error = gfs2_make_fs_rw(sdp);
721                 if (error) {
722                         fs_err(sdp, "can't make FS RW: %d\n", error);
723                         goto fail_threads;
724                 }
725         }
726
727         gfs2_glock_dq_uninit(&mount_gh);
728
729         return 0;
730
731 fail_threads:
732         init_threads(sdp, UNDO);
733 fail_per_node:
734         init_per_node(sdp, UNDO);
735 fail_inodes:
736         init_inodes(sdp, UNDO);
737 fail_sb:
738         init_sb(sdp, 0, UNDO);
739 fail_locking:
740         init_locking(sdp, &mount_gh, UNDO);
741 fail_lm:
742         gfs2_gl_hash_clear(sdp, WAIT);
743         gfs2_lm_unmount(sdp);
744         while (invalidate_inodes(sb))
745                 yield();
746 fail_sys:
747         gfs2_sys_fs_del(sdp);
748 fail:
749         gfs2_delete_debugfs_file(sdp);
750         kfree(sdp);
751         sb->s_fs_info = NULL;
752         return error;
753 }
754
755 static int gfs2_get_sb(struct file_system_type *fs_type, int flags,
756                 const char *dev_name, void *data, struct vfsmount *mnt)
757 {
758         struct super_block *sb;
759         struct gfs2_sbd *sdp;
760         int error = get_sb_bdev(fs_type, flags, dev_name, data, fill_super, mnt);
761         if (error)
762                 goto out;
763         sb = mnt->mnt_sb;
764         sdp = sb->s_fs_info;
765         sdp->sd_gfs2mnt = mnt;
766 out:
767         return error;
768 }
769
770 static int fill_super_meta(struct super_block *sb, struct super_block *new,
771                            void *data, int silent)
772 {
773         struct gfs2_sbd *sdp = sb->s_fs_info;
774         struct inode *inode;
775         int error = 0;
776
777         new->s_fs_info = sdp;
778         sdp->sd_vfs_meta = sb;
779
780         init_vfs(new, SDF_NOATIME);
781
782         /* Get the master inode */
783         inode = igrab(sdp->sd_master_dir);
784
785         new->s_root = d_alloc_root(inode);
786         if (!new->s_root) {
787                 fs_err(sdp, "can't get root dentry\n");
788                 error = -ENOMEM;
789                 iput(inode);
790         } else
791                 new->s_root->d_op = &gfs2_dops;
792
793         return error;
794 }
795
796 static int set_bdev_super(struct super_block *s, void *data)
797 {
798         s->s_bdev = data;
799         s->s_dev = s->s_bdev->bd_dev;
800         return 0;
801 }
802
803 static int test_bdev_super(struct super_block *s, void *data)
804 {
805         return s->s_bdev == data;
806 }
807
808 static struct super_block* get_gfs2_sb(const char *dev_name)
809 {
810         struct kstat stat;
811         struct nameidata nd;
812         struct file_system_type *fstype;
813         struct super_block *sb = NULL, *s;
814         int error;
815
816         error = path_lookup(dev_name, LOOKUP_FOLLOW, &nd);
817         if (error) {
818                 printk(KERN_WARNING "GFS2: path_lookup on %s returned error\n",
819                        dev_name);
820                 goto out;
821         }
822         error = vfs_getattr(nd.mnt, nd.dentry, &stat);
823
824         fstype = get_fs_type("gfs2");
825         list_for_each_entry(s, &fstype->fs_supers, s_instances) {
826                 if ((S_ISBLK(stat.mode) && s->s_dev == stat.rdev) ||
827                     (S_ISDIR(stat.mode) && s == nd.dentry->d_inode->i_sb)) {
828                         sb = s;
829                         goto free_nd;
830                 }
831         }
832
833         printk(KERN_WARNING "GFS2: Unrecognized block device or "
834                "mount point %s\n", dev_name);
835
836 free_nd:
837         path_release(&nd);
838 out:
839         return sb;
840 }
841
842 static int gfs2_get_sb_meta(struct file_system_type *fs_type, int flags,
843                             const char *dev_name, void *data, struct vfsmount *mnt)
844 {
845         int error = 0;
846         struct super_block *sb = NULL, *new;
847         struct gfs2_sbd *sdp;
848
849         sb = get_gfs2_sb(dev_name);
850         if (!sb) {
851                 printk(KERN_WARNING "GFS2: gfs2 mount does not exist\n");
852                 error = -ENOENT;
853                 goto error;
854         }
855         sdp = sb->s_fs_info;
856         if (sdp->sd_vfs_meta) {
857                 printk(KERN_WARNING "GFS2: gfs2meta mount already exists\n");
858                 error = -EBUSY;
859                 goto error;
860         }
861         down(&sb->s_bdev->bd_mount_sem);
862         new = sget(fs_type, test_bdev_super, set_bdev_super, sb->s_bdev);
863         up(&sb->s_bdev->bd_mount_sem);
864         if (IS_ERR(new)) {
865                 error = PTR_ERR(new);
866                 goto error;
867         }
868         module_put(fs_type->owner);
869         new->s_flags = flags;
870         strlcpy(new->s_id, sb->s_id, sizeof(new->s_id));
871         sb_set_blocksize(new, sb->s_blocksize);
872         error = fill_super_meta(sb, new, data, flags & MS_SILENT ? 1 : 0);
873         if (error) {
874                 up_write(&new->s_umount);
875                 deactivate_super(new);
876                 goto error;
877         }
878
879         new->s_flags |= MS_ACTIVE;
880
881         /* Grab a reference to the gfs2 mount point */
882         atomic_inc(&sdp->sd_gfs2mnt->mnt_count);
883         return simple_set_mnt(mnt, new);
884 error:
885         return error;
886 }
887
888 static void gfs2_kill_sb(struct super_block *sb)
889 {
890         gfs2_delete_debugfs_file(sb->s_fs_info);
891         gfs2_meta_syncfs(sb->s_fs_info);
892         kill_block_super(sb);
893 }
894
895 static void gfs2_kill_sb_meta(struct super_block *sb)
896 {
897         struct gfs2_sbd *sdp = sb->s_fs_info;
898         generic_shutdown_super(sb);
899         sdp->sd_vfs_meta = NULL;
900         atomic_dec(&sdp->sd_gfs2mnt->mnt_count);
901 }
902
903 struct file_system_type gfs2_fs_type = {
904         .name = "gfs2",
905         .fs_flags = FS_REQUIRES_DEV,
906         .get_sb = gfs2_get_sb,
907         .kill_sb = gfs2_kill_sb,
908         .owner = THIS_MODULE,
909 };
910
911 struct file_system_type gfs2meta_fs_type = {
912         .name = "gfs2meta",
913         .fs_flags = FS_REQUIRES_DEV,
914         .get_sb = gfs2_get_sb_meta,
915         .kill_sb = gfs2_kill_sb_meta,
916         .owner = THIS_MODULE,
917 };
918