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