]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - fs/gfs2/ops_fstype.c
[GFS2] 80 Column audit of GFS2
[mirror_ubuntu-jammy-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