]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - fs/ocfs2/super.c
e27a0d47ea2b84d4992b46abe3000b404e9517f2
[linux-2.6-omap-h63xx.git] / fs / ocfs2 / super.c
1 /* -*- mode: c; c-basic-offset: 8; -*-
2  * vim: noexpandtab sw=8 ts=8 sts=0:
3  *
4  * super.c
5  *
6  * load/unload driver, mount/dismount volumes
7  *
8  * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public
21  * License along with this program; if not, write to the
22  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23  * Boston, MA 021110-1307, USA.
24  */
25
26 #include <linux/module.h>
27 #include <linux/fs.h>
28 #include <linux/types.h>
29 #include <linux/slab.h>
30 #include <linux/highmem.h>
31 #include <linux/utsname.h>
32 #include <linux/init.h>
33 #include <linux/random.h>
34 #include <linux/statfs.h>
35 #include <linux/moduleparam.h>
36 #include <linux/blkdev.h>
37 #include <linux/socket.h>
38 #include <linux/inet.h>
39 #include <linux/parser.h>
40 #include <linux/crc32.h>
41 #include <linux/debugfs.h>
42 #include <linux/mount.h>
43 #include <linux/seq_file.h>
44
45 #define MLOG_MASK_PREFIX ML_SUPER
46 #include <cluster/masklog.h>
47
48 #include "ocfs2.h"
49
50 /* this should be the only file to include a version 1 header */
51 #include "ocfs1_fs_compat.h"
52
53 #include "alloc.h"
54 #include "dlmglue.h"
55 #include "export.h"
56 #include "extent_map.h"
57 #include "heartbeat.h"
58 #include "inode.h"
59 #include "journal.h"
60 #include "localalloc.h"
61 #include "namei.h"
62 #include "slot_map.h"
63 #include "super.h"
64 #include "sysfile.h"
65 #include "uptodate.h"
66 #include "ver.h"
67
68 #include "buffer_head_io.h"
69
70 static struct kmem_cache *ocfs2_inode_cachep = NULL;
71
72 /* OCFS2 needs to schedule several differnt types of work which
73  * require cluster locking, disk I/O, recovery waits, etc. Since these
74  * types of work tend to be heavy we avoid using the kernel events
75  * workqueue and schedule on our own. */
76 struct workqueue_struct *ocfs2_wq = NULL;
77
78 static struct dentry *ocfs2_debugfs_root = NULL;
79
80 MODULE_AUTHOR("Oracle");
81 MODULE_LICENSE("GPL");
82
83 struct mount_options
84 {
85         unsigned long   commit_interval;
86         unsigned long   mount_opt;
87         unsigned int    atime_quantum;
88         signed short    slot;
89         unsigned int    localalloc_opt;
90 };
91
92 static int ocfs2_parse_options(struct super_block *sb, char *options,
93                                struct mount_options *mopt,
94                                int is_remount);
95 static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt);
96 static void ocfs2_put_super(struct super_block *sb);
97 static int ocfs2_mount_volume(struct super_block *sb);
98 static int ocfs2_remount(struct super_block *sb, int *flags, char *data);
99 static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err);
100 static int ocfs2_initialize_mem_caches(void);
101 static void ocfs2_free_mem_caches(void);
102 static void ocfs2_delete_osb(struct ocfs2_super *osb);
103
104 static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf);
105
106 static int ocfs2_sync_fs(struct super_block *sb, int wait);
107
108 static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb);
109 static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb);
110 static void ocfs2_release_system_inodes(struct ocfs2_super *osb);
111 static int ocfs2_check_volume(struct ocfs2_super *osb);
112 static int ocfs2_verify_volume(struct ocfs2_dinode *di,
113                                struct buffer_head *bh,
114                                u32 sectsize);
115 static int ocfs2_initialize_super(struct super_block *sb,
116                                   struct buffer_head *bh,
117                                   int sector_size);
118 static int ocfs2_get_sector(struct super_block *sb,
119                             struct buffer_head **bh,
120                             int block,
121                             int sect_size);
122 static void ocfs2_write_super(struct super_block *sb);
123 static struct inode *ocfs2_alloc_inode(struct super_block *sb);
124 static void ocfs2_destroy_inode(struct inode *inode);
125
126 static const struct super_operations ocfs2_sops = {
127         .statfs         = ocfs2_statfs,
128         .alloc_inode    = ocfs2_alloc_inode,
129         .destroy_inode  = ocfs2_destroy_inode,
130         .drop_inode     = ocfs2_drop_inode,
131         .clear_inode    = ocfs2_clear_inode,
132         .delete_inode   = ocfs2_delete_inode,
133         .sync_fs        = ocfs2_sync_fs,
134         .write_super    = ocfs2_write_super,
135         .put_super      = ocfs2_put_super,
136         .remount_fs     = ocfs2_remount,
137         .show_options   = ocfs2_show_options,
138 };
139
140 enum {
141         Opt_barrier,
142         Opt_err_panic,
143         Opt_err_ro,
144         Opt_intr,
145         Opt_nointr,
146         Opt_hb_none,
147         Opt_hb_local,
148         Opt_data_ordered,
149         Opt_data_writeback,
150         Opt_atime_quantum,
151         Opt_slot,
152         Opt_commit,
153         Opt_localalloc,
154         Opt_localflocks,
155         Opt_err,
156 };
157
158 static match_table_t tokens = {
159         {Opt_barrier, "barrier=%u"},
160         {Opt_err_panic, "errors=panic"},
161         {Opt_err_ro, "errors=remount-ro"},
162         {Opt_intr, "intr"},
163         {Opt_nointr, "nointr"},
164         {Opt_hb_none, OCFS2_HB_NONE},
165         {Opt_hb_local, OCFS2_HB_LOCAL},
166         {Opt_data_ordered, "data=ordered"},
167         {Opt_data_writeback, "data=writeback"},
168         {Opt_atime_quantum, "atime_quantum=%u"},
169         {Opt_slot, "preferred_slot=%u"},
170         {Opt_commit, "commit=%u"},
171         {Opt_localalloc, "localalloc=%d"},
172         {Opt_localflocks, "localflocks"},
173         {Opt_err, NULL}
174 };
175
176 /*
177  * write_super and sync_fs ripped right out of ext3.
178  */
179 static void ocfs2_write_super(struct super_block *sb)
180 {
181         if (mutex_trylock(&sb->s_lock) != 0)
182                 BUG();
183         sb->s_dirt = 0;
184 }
185
186 static int ocfs2_sync_fs(struct super_block *sb, int wait)
187 {
188         int status;
189         tid_t target;
190         struct ocfs2_super *osb = OCFS2_SB(sb);
191
192         sb->s_dirt = 0;
193
194         if (ocfs2_is_hard_readonly(osb))
195                 return -EROFS;
196
197         if (wait) {
198                 status = ocfs2_flush_truncate_log(osb);
199                 if (status < 0)
200                         mlog_errno(status);
201         } else {
202                 ocfs2_schedule_truncate_log_flush(osb, 0);
203         }
204
205         if (journal_start_commit(OCFS2_SB(sb)->journal->j_journal, &target)) {
206                 if (wait)
207                         log_wait_commit(OCFS2_SB(sb)->journal->j_journal,
208                                         target);
209         }
210         return 0;
211 }
212
213 static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb)
214 {
215         struct inode *new = NULL;
216         int status = 0;
217         int i;
218
219         mlog_entry_void();
220
221         new = ocfs2_iget(osb, osb->root_blkno, OCFS2_FI_FLAG_SYSFILE, 0);
222         if (IS_ERR(new)) {
223                 status = PTR_ERR(new);
224                 mlog_errno(status);
225                 goto bail;
226         }
227         osb->root_inode = new;
228
229         new = ocfs2_iget(osb, osb->system_dir_blkno, OCFS2_FI_FLAG_SYSFILE, 0);
230         if (IS_ERR(new)) {
231                 status = PTR_ERR(new);
232                 mlog_errno(status);
233                 goto bail;
234         }
235         osb->sys_root_inode = new;
236
237         for (i = OCFS2_FIRST_ONLINE_SYSTEM_INODE;
238              i <= OCFS2_LAST_GLOBAL_SYSTEM_INODE; i++) {
239                 new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
240                 if (!new) {
241                         ocfs2_release_system_inodes(osb);
242                         status = -EINVAL;
243                         mlog_errno(status);
244                         /* FIXME: Should ERROR_RO_FS */
245                         mlog(ML_ERROR, "Unable to load system inode %d, "
246                              "possibly corrupt fs?", i);
247                         goto bail;
248                 }
249                 // the array now has one ref, so drop this one
250                 iput(new);
251         }
252
253 bail:
254         mlog_exit(status);
255         return status;
256 }
257
258 static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb)
259 {
260         struct inode *new = NULL;
261         int status = 0;
262         int i;
263
264         mlog_entry_void();
265
266         for (i = OCFS2_LAST_GLOBAL_SYSTEM_INODE + 1;
267              i < NUM_SYSTEM_INODES;
268              i++) {
269                 new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
270                 if (!new) {
271                         ocfs2_release_system_inodes(osb);
272                         status = -EINVAL;
273                         mlog(ML_ERROR, "status=%d, sysfile=%d, slot=%d\n",
274                              status, i, osb->slot_num);
275                         goto bail;
276                 }
277                 /* the array now has one ref, so drop this one */
278                 iput(new);
279         }
280
281 bail:
282         mlog_exit(status);
283         return status;
284 }
285
286 static void ocfs2_release_system_inodes(struct ocfs2_super *osb)
287 {
288         int i;
289         struct inode *inode;
290
291         mlog_entry_void();
292
293         for (i = 0; i < NUM_SYSTEM_INODES; i++) {
294                 inode = osb->system_inodes[i];
295                 if (inode) {
296                         iput(inode);
297                         osb->system_inodes[i] = NULL;
298                 }
299         }
300
301         inode = osb->sys_root_inode;
302         if (inode) {
303                 iput(inode);
304                 osb->sys_root_inode = NULL;
305         }
306
307         inode = osb->root_inode;
308         if (inode) {
309                 iput(inode);
310                 osb->root_inode = NULL;
311         }
312
313         mlog_exit(0);
314 }
315
316 /* We're allocating fs objects, use GFP_NOFS */
317 static struct inode *ocfs2_alloc_inode(struct super_block *sb)
318 {
319         struct ocfs2_inode_info *oi;
320
321         oi = kmem_cache_alloc(ocfs2_inode_cachep, GFP_NOFS);
322         if (!oi)
323                 return NULL;
324
325         return &oi->vfs_inode;
326 }
327
328 static void ocfs2_destroy_inode(struct inode *inode)
329 {
330         kmem_cache_free(ocfs2_inode_cachep, OCFS2_I(inode));
331 }
332
333 static unsigned long long ocfs2_max_file_offset(unsigned int bbits,
334                                                 unsigned int cbits)
335 {
336         unsigned int bytes = 1 << cbits;
337         unsigned int trim = bytes;
338         unsigned int bitshift = 32;
339
340         /*
341          * i_size and all block offsets in ocfs2 are always 64 bits
342          * wide. i_clusters is 32 bits, in cluster-sized units. So on
343          * 64 bit platforms, cluster size will be the limiting factor.
344          */
345
346 #if BITS_PER_LONG == 32
347 # if defined(CONFIG_LBD)
348         BUILD_BUG_ON(sizeof(sector_t) != 8);
349         /*
350          * We might be limited by page cache size.
351          */
352         if (bytes > PAGE_CACHE_SIZE) {
353                 bytes = PAGE_CACHE_SIZE;
354                 trim = 1;
355                 /*
356                  * Shift by 31 here so that we don't get larger than
357                  * MAX_LFS_FILESIZE
358                  */
359                 bitshift = 31;
360         }
361 # else
362         /*
363          * We are limited by the size of sector_t. Use block size, as
364          * that's what we expose to the VFS.
365          */
366         bytes = 1 << bbits;
367         trim = 1;
368         bitshift = 31;
369 # endif
370 #endif
371
372         /*
373          * Trim by a whole cluster when we can actually approach the
374          * on-disk limits. Otherwise we can overflow i_clusters when
375          * an extent start is at the max offset.
376          */
377         return (((unsigned long long)bytes) << bitshift) - trim;
378 }
379
380 static int ocfs2_remount(struct super_block *sb, int *flags, char *data)
381 {
382         int incompat_features;
383         int ret = 0;
384         struct mount_options parsed_options;
385         struct ocfs2_super *osb = OCFS2_SB(sb);
386
387         if (!ocfs2_parse_options(sb, data, &parsed_options, 1)) {
388                 ret = -EINVAL;
389                 goto out;
390         }
391
392         if ((osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) !=
393             (parsed_options.mount_opt & OCFS2_MOUNT_HB_LOCAL)) {
394                 ret = -EINVAL;
395                 mlog(ML_ERROR, "Cannot change heartbeat mode on remount\n");
396                 goto out;
397         }
398
399         if ((osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK) !=
400             (parsed_options.mount_opt & OCFS2_MOUNT_DATA_WRITEBACK)) {
401                 ret = -EINVAL;
402                 mlog(ML_ERROR, "Cannot change data mode on remount\n");
403                 goto out;
404         }
405
406         /* We're going to/from readonly mode. */
407         if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
408                 /* Lock here so the check of HARD_RO and the potential
409                  * setting of SOFT_RO is atomic. */
410                 spin_lock(&osb->osb_lock);
411                 if (osb->osb_flags & OCFS2_OSB_HARD_RO) {
412                         mlog(ML_ERROR, "Remount on readonly device is forbidden.\n");
413                         ret = -EROFS;
414                         goto unlock_osb;
415                 }
416
417                 if (*flags & MS_RDONLY) {
418                         mlog(0, "Going to ro mode.\n");
419                         sb->s_flags |= MS_RDONLY;
420                         osb->osb_flags |= OCFS2_OSB_SOFT_RO;
421                 } else {
422                         mlog(0, "Making ro filesystem writeable.\n");
423
424                         if (osb->osb_flags & OCFS2_OSB_ERROR_FS) {
425                                 mlog(ML_ERROR, "Cannot remount RDWR "
426                                      "filesystem due to previous errors.\n");
427                                 ret = -EROFS;
428                                 goto unlock_osb;
429                         }
430                         incompat_features = OCFS2_HAS_RO_COMPAT_FEATURE(sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP);
431                         if (incompat_features) {
432                                 mlog(ML_ERROR, "Cannot remount RDWR because "
433                                      "of unsupported optional features "
434                                      "(%x).\n", incompat_features);
435                                 ret = -EINVAL;
436                                 goto unlock_osb;
437                         }
438                         sb->s_flags &= ~MS_RDONLY;
439                         osb->osb_flags &= ~OCFS2_OSB_SOFT_RO;
440                 }
441 unlock_osb:
442                 spin_unlock(&osb->osb_lock);
443         }
444
445         if (!ret) {
446                 /* Only save off the new mount options in case of a successful
447                  * remount. */
448                 osb->s_mount_opt = parsed_options.mount_opt;
449                 osb->s_atime_quantum = parsed_options.atime_quantum;
450                 osb->preferred_slot = parsed_options.slot;
451                 if (parsed_options.commit_interval)
452                         osb->osb_commit_interval = parsed_options.commit_interval;
453
454                 if (!ocfs2_is_hard_readonly(osb))
455                         ocfs2_set_journal_params(osb);
456         }
457 out:
458         return ret;
459 }
460
461 static int ocfs2_sb_probe(struct super_block *sb,
462                           struct buffer_head **bh,
463                           int *sector_size)
464 {
465         int status, tmpstat;
466         struct ocfs1_vol_disk_hdr *hdr;
467         struct ocfs2_dinode *di;
468         int blksize;
469
470         *bh = NULL;
471
472         /* may be > 512 */
473         *sector_size = bdev_hardsect_size(sb->s_bdev);
474         if (*sector_size > OCFS2_MAX_BLOCKSIZE) {
475                 mlog(ML_ERROR, "Hardware sector size too large: %d (max=%d)\n",
476                      *sector_size, OCFS2_MAX_BLOCKSIZE);
477                 status = -EINVAL;
478                 goto bail;
479         }
480
481         /* Can this really happen? */
482         if (*sector_size < OCFS2_MIN_BLOCKSIZE)
483                 *sector_size = OCFS2_MIN_BLOCKSIZE;
484
485         /* check block zero for old format */
486         status = ocfs2_get_sector(sb, bh, 0, *sector_size);
487         if (status < 0) {
488                 mlog_errno(status);
489                 goto bail;
490         }
491         hdr = (struct ocfs1_vol_disk_hdr *) (*bh)->b_data;
492         if (hdr->major_version == OCFS1_MAJOR_VERSION) {
493                 mlog(ML_ERROR, "incompatible version: %u.%u\n",
494                      hdr->major_version, hdr->minor_version);
495                 status = -EINVAL;
496         }
497         if (memcmp(hdr->signature, OCFS1_VOLUME_SIGNATURE,
498                    strlen(OCFS1_VOLUME_SIGNATURE)) == 0) {
499                 mlog(ML_ERROR, "incompatible volume signature: %8s\n",
500                      hdr->signature);
501                 status = -EINVAL;
502         }
503         brelse(*bh);
504         *bh = NULL;
505         if (status < 0) {
506                 mlog(ML_ERROR, "This is an ocfs v1 filesystem which must be "
507                      "upgraded before mounting with ocfs v2\n");
508                 goto bail;
509         }
510
511         /*
512          * Now check at magic offset for 512, 1024, 2048, 4096
513          * blocksizes.  4096 is the maximum blocksize because it is
514          * the minimum clustersize.
515          */
516         status = -EINVAL;
517         for (blksize = *sector_size;
518              blksize <= OCFS2_MAX_BLOCKSIZE;
519              blksize <<= 1) {
520                 tmpstat = ocfs2_get_sector(sb, bh,
521                                            OCFS2_SUPER_BLOCK_BLKNO,
522                                            blksize);
523                 if (tmpstat < 0) {
524                         status = tmpstat;
525                         mlog_errno(status);
526                         goto bail;
527                 }
528                 di = (struct ocfs2_dinode *) (*bh)->b_data;
529                 status = ocfs2_verify_volume(di, *bh, blksize);
530                 if (status >= 0)
531                         goto bail;
532                 brelse(*bh);
533                 *bh = NULL;
534                 if (status != -EAGAIN)
535                         break;
536         }
537
538 bail:
539         return status;
540 }
541
542 static int ocfs2_verify_heartbeat(struct ocfs2_super *osb)
543 {
544         if (ocfs2_mount_local(osb)) {
545                 if (osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) {
546                         mlog(ML_ERROR, "Cannot heartbeat on a locally "
547                              "mounted device.\n");
548                         return -EINVAL;
549                 }
550         }
551
552         if (!(osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL)) {
553                 if (!ocfs2_mount_local(osb) && !ocfs2_is_hard_readonly(osb)) {
554                         mlog(ML_ERROR, "Heartbeat has to be started to mount "
555                              "a read-write clustered device.\n");
556                         return -EINVAL;
557                 }
558         }
559
560         return 0;
561 }
562
563 static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
564 {
565         struct dentry *root;
566         int status, sector_size;
567         struct mount_options parsed_options;
568         struct inode *inode = NULL;
569         struct ocfs2_super *osb = NULL;
570         struct buffer_head *bh = NULL;
571         char nodestr[8];
572
573         mlog_entry("%p, %p, %i", sb, data, silent);
574
575         if (!ocfs2_parse_options(sb, data, &parsed_options, 0)) {
576                 status = -EINVAL;
577                 goto read_super_error;
578         }
579
580         /* probe for superblock */
581         status = ocfs2_sb_probe(sb, &bh, &sector_size);
582         if (status < 0) {
583                 mlog(ML_ERROR, "superblock probe failed!\n");
584                 goto read_super_error;
585         }
586
587         status = ocfs2_initialize_super(sb, bh, sector_size);
588         osb = OCFS2_SB(sb);
589         if (status < 0) {
590                 mlog_errno(status);
591                 goto read_super_error;
592         }
593         brelse(bh);
594         bh = NULL;
595         osb->s_mount_opt = parsed_options.mount_opt;
596         osb->s_atime_quantum = parsed_options.atime_quantum;
597         osb->preferred_slot = parsed_options.slot;
598         osb->osb_commit_interval = parsed_options.commit_interval;
599         osb->local_alloc_size = parsed_options.localalloc_opt;
600
601         sb->s_magic = OCFS2_SUPER_MAGIC;
602
603         /* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
604          * heartbeat=none */
605         if (bdev_read_only(sb->s_bdev)) {
606                 if (!(sb->s_flags & MS_RDONLY)) {
607                         status = -EACCES;
608                         mlog(ML_ERROR, "Readonly device detected but readonly "
609                              "mount was not specified.\n");
610                         goto read_super_error;
611                 }
612
613                 /* You should not be able to start a local heartbeat
614                  * on a readonly device. */
615                 if (osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) {
616                         status = -EROFS;
617                         mlog(ML_ERROR, "Local heartbeat specified on readonly "
618                              "device.\n");
619                         goto read_super_error;
620                 }
621
622                 status = ocfs2_check_journals_nolocks(osb);
623                 if (status < 0) {
624                         if (status == -EROFS)
625                                 mlog(ML_ERROR, "Recovery required on readonly "
626                                      "file system, but write access is "
627                                      "unavailable.\n");
628                         else
629                                 mlog_errno(status);                     
630                         goto read_super_error;
631                 }
632
633                 ocfs2_set_ro_flag(osb, 1);
634
635                 printk(KERN_NOTICE "Readonly device detected. No cluster "
636                        "services will be utilized for this mount. Recovery "
637                        "will be skipped.\n");
638         }
639
640         if (!ocfs2_is_hard_readonly(osb)) {
641                 if (sb->s_flags & MS_RDONLY)
642                         ocfs2_set_ro_flag(osb, 0);
643         }
644
645         status = ocfs2_verify_heartbeat(osb);
646         if (status < 0) {
647                 mlog_errno(status);
648                 goto read_super_error;
649         }
650
651         osb->osb_debug_root = debugfs_create_dir(osb->uuid_str,
652                                                  ocfs2_debugfs_root);
653         if (!osb->osb_debug_root) {
654                 status = -EINVAL;
655                 mlog(ML_ERROR, "Unable to create per-mount debugfs root.\n");
656                 goto read_super_error;
657         }
658
659         status = ocfs2_mount_volume(sb);
660         if (osb->root_inode)
661                 inode = igrab(osb->root_inode);
662
663         if (status < 0)
664                 goto read_super_error;
665
666         if (!inode) {
667                 status = -EIO;
668                 mlog_errno(status);
669                 goto read_super_error;
670         }
671
672         root = d_alloc_root(inode);
673         if (!root) {
674                 status = -ENOMEM;
675                 mlog_errno(status);
676                 goto read_super_error;
677         }
678
679         sb->s_root = root;
680
681         ocfs2_complete_mount_recovery(osb);
682
683         if (ocfs2_mount_local(osb))
684                 snprintf(nodestr, sizeof(nodestr), "local");
685         else
686                 snprintf(nodestr, sizeof(nodestr), "%u", osb->node_num);
687
688         printk(KERN_INFO "ocfs2: Mounting device (%s) on (node %s, slot %d) "
689                "with %s data mode.\n",
690                osb->dev_str, nodestr, osb->slot_num,
691                osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK ? "writeback" :
692                "ordered");
693
694         atomic_set(&osb->vol_state, VOLUME_MOUNTED);
695         wake_up(&osb->osb_mount_event);
696
697         mlog_exit(status);
698         return status;
699
700 read_super_error:
701         if (bh != NULL)
702                 brelse(bh);
703
704         if (inode)
705                 iput(inode);
706
707         if (osb) {
708                 atomic_set(&osb->vol_state, VOLUME_DISABLED);
709                 wake_up(&osb->osb_mount_event);
710                 ocfs2_dismount_volume(sb, 1);
711         }
712
713         mlog_exit(status);
714         return status;
715 }
716
717 static int ocfs2_get_sb(struct file_system_type *fs_type,
718                         int flags,
719                         const char *dev_name,
720                         void *data,
721                         struct vfsmount *mnt)
722 {
723         return get_sb_bdev(fs_type, flags, dev_name, data, ocfs2_fill_super,
724                            mnt);
725 }
726
727 static struct file_system_type ocfs2_fs_type = {
728         .owner          = THIS_MODULE,
729         .name           = "ocfs2",
730         .get_sb         = ocfs2_get_sb, /* is this called when we mount
731                                         * the fs? */
732         .kill_sb        = kill_block_super, /* set to the generic one
733                                              * right now, but do we
734                                              * need to change that? */
735         .fs_flags       = FS_REQUIRES_DEV|FS_RENAME_DOES_D_MOVE,
736         .next           = NULL
737 };
738
739 static int ocfs2_parse_options(struct super_block *sb,
740                                char *options,
741                                struct mount_options *mopt,
742                                int is_remount)
743 {
744         int status;
745         char *p;
746
747         mlog_entry("remount: %d, options: \"%s\"\n", is_remount,
748                    options ? options : "(none)");
749
750         mopt->commit_interval = 0;
751         mopt->mount_opt = 0;
752         mopt->atime_quantum = OCFS2_DEFAULT_ATIME_QUANTUM;
753         mopt->slot = OCFS2_INVALID_SLOT;
754         mopt->localalloc_opt = OCFS2_DEFAULT_LOCAL_ALLOC_SIZE;
755
756         if (!options) {
757                 status = 1;
758                 goto bail;
759         }
760
761         while ((p = strsep(&options, ",")) != NULL) {
762                 int token, option;
763                 substring_t args[MAX_OPT_ARGS];
764
765                 if (!*p)
766                         continue;
767
768                 token = match_token(p, tokens, args);
769                 switch (token) {
770                 case Opt_hb_local:
771                         mopt->mount_opt |= OCFS2_MOUNT_HB_LOCAL;
772                         break;
773                 case Opt_hb_none:
774                         mopt->mount_opt &= ~OCFS2_MOUNT_HB_LOCAL;
775                         break;
776                 case Opt_barrier:
777                         if (match_int(&args[0], &option)) {
778                                 status = 0;
779                                 goto bail;
780                         }
781                         if (option)
782                                 mopt->mount_opt |= OCFS2_MOUNT_BARRIER;
783                         else
784                                 mopt->mount_opt &= ~OCFS2_MOUNT_BARRIER;
785                         break;
786                 case Opt_intr:
787                         mopt->mount_opt &= ~OCFS2_MOUNT_NOINTR;
788                         break;
789                 case Opt_nointr:
790                         mopt->mount_opt |= OCFS2_MOUNT_NOINTR;
791                         break;
792                 case Opt_err_panic:
793                         mopt->mount_opt |= OCFS2_MOUNT_ERRORS_PANIC;
794                         break;
795                 case Opt_err_ro:
796                         mopt->mount_opt &= ~OCFS2_MOUNT_ERRORS_PANIC;
797                         break;
798                 case Opt_data_ordered:
799                         mopt->mount_opt &= ~OCFS2_MOUNT_DATA_WRITEBACK;
800                         break;
801                 case Opt_data_writeback:
802                         mopt->mount_opt |= OCFS2_MOUNT_DATA_WRITEBACK;
803                         break;
804                 case Opt_atime_quantum:
805                         if (match_int(&args[0], &option)) {
806                                 status = 0;
807                                 goto bail;
808                         }
809                         if (option >= 0)
810                                 mopt->atime_quantum = option;
811                         break;
812                 case Opt_slot:
813                         option = 0;
814                         if (match_int(&args[0], &option)) {
815                                 status = 0;
816                                 goto bail;
817                         }
818                         if (option)
819                                 mopt->slot = (s16)option;
820                         break;
821                 case Opt_commit:
822                         option = 0;
823                         if (match_int(&args[0], &option)) {
824                                 status = 0;
825                                 goto bail;
826                         }
827                         if (option < 0)
828                                 return 0;
829                         if (option == 0)
830                                 option = JBD_DEFAULT_MAX_COMMIT_AGE;
831                         mopt->commit_interval = HZ * option;
832                         break;
833                 case Opt_localalloc:
834                         option = 0;
835                         if (match_int(&args[0], &option)) {
836                                 status = 0;
837                                 goto bail;
838                         }
839                         if (option >= 0 && (option <= ocfs2_local_alloc_size(sb) * 8))
840                                 mopt->localalloc_opt = option;
841                         break;
842                 case Opt_localflocks:
843                         /*
844                          * Changing this during remount could race
845                          * flock() requests, or "unbalance" existing
846                          * ones (e.g., a lock is taken in one mode but
847                          * dropped in the other). If users care enough
848                          * to flip locking modes during remount, we
849                          * could add a "local" flag to individual
850                          * flock structures for proper tracking of
851                          * state.
852                          */
853                         if (!is_remount)
854                                 mopt->mount_opt |= OCFS2_MOUNT_LOCALFLOCKS;
855                         break;
856                 default:
857                         mlog(ML_ERROR,
858                              "Unrecognized mount option \"%s\" "
859                              "or missing value\n", p);
860                         status = 0;
861                         goto bail;
862                 }
863         }
864
865         status = 1;
866
867 bail:
868         mlog_exit(status);
869         return status;
870 }
871
872 static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
873 {
874         struct ocfs2_super *osb = OCFS2_SB(mnt->mnt_sb);
875         unsigned long opts = osb->s_mount_opt;
876
877         if (opts & OCFS2_MOUNT_HB_LOCAL)
878                 seq_printf(s, ",_netdev,heartbeat=local");
879         else
880                 seq_printf(s, ",heartbeat=none");
881
882         if (opts & OCFS2_MOUNT_NOINTR)
883                 seq_printf(s, ",nointr");
884
885         if (opts & OCFS2_MOUNT_DATA_WRITEBACK)
886                 seq_printf(s, ",data=writeback");
887         else
888                 seq_printf(s, ",data=ordered");
889
890         if (opts & OCFS2_MOUNT_BARRIER)
891                 seq_printf(s, ",barrier=1");
892
893         if (opts & OCFS2_MOUNT_ERRORS_PANIC)
894                 seq_printf(s, ",errors=panic");
895         else
896                 seq_printf(s, ",errors=remount-ro");
897
898         if (osb->preferred_slot != OCFS2_INVALID_SLOT)
899                 seq_printf(s, ",preferred_slot=%d", osb->preferred_slot);
900
901         if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
902                 seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);
903
904         if (osb->osb_commit_interval)
905                 seq_printf(s, ",commit=%u",
906                            (unsigned) (osb->osb_commit_interval / HZ));
907
908         if (osb->local_alloc_size != OCFS2_DEFAULT_LOCAL_ALLOC_SIZE)
909                 seq_printf(s, ",localalloc=%d", osb->local_alloc_size);
910
911         if (opts & OCFS2_MOUNT_LOCALFLOCKS)
912                 seq_printf(s, ",localflocks,");
913
914         return 0;
915 }
916
917 static int __init ocfs2_init(void)
918 {
919         int status;
920
921         mlog_entry_void();
922
923         ocfs2_print_version();
924
925         status = init_ocfs2_uptodate_cache();
926         if (status < 0) {
927                 mlog_errno(status);
928                 goto leave;
929         }
930
931         status = ocfs2_initialize_mem_caches();
932         if (status < 0) {
933                 mlog_errno(status);
934                 goto leave;
935         }
936
937         ocfs2_wq = create_singlethread_workqueue("ocfs2_wq");
938         if (!ocfs2_wq) {
939                 status = -ENOMEM;
940                 goto leave;
941         }
942
943         ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL);
944         if (!ocfs2_debugfs_root) {
945                 status = -EFAULT;
946                 mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
947         }
948
949         ocfs2_set_locking_protocol();
950
951 leave:
952         if (status < 0) {
953                 ocfs2_free_mem_caches();
954                 exit_ocfs2_uptodate_cache();
955         }
956
957         mlog_exit(status);
958
959         if (status >= 0) {
960                 return register_filesystem(&ocfs2_fs_type);
961         } else
962                 return -1;
963 }
964
965 static void __exit ocfs2_exit(void)
966 {
967         mlog_entry_void();
968
969         if (ocfs2_wq) {
970                 flush_workqueue(ocfs2_wq);
971                 destroy_workqueue(ocfs2_wq);
972         }
973
974         debugfs_remove(ocfs2_debugfs_root);
975
976         ocfs2_free_mem_caches();
977
978         unregister_filesystem(&ocfs2_fs_type);
979
980         exit_ocfs2_uptodate_cache();
981
982         mlog_exit_void();
983 }
984
985 static void ocfs2_put_super(struct super_block *sb)
986 {
987         mlog_entry("(0x%p)\n", sb);
988
989         ocfs2_sync_blockdev(sb);
990         ocfs2_dismount_volume(sb, 0);
991
992         mlog_exit_void();
993 }
994
995 static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
996 {
997         struct ocfs2_super *osb;
998         u32 numbits, freebits;
999         int status;
1000         struct ocfs2_dinode *bm_lock;
1001         struct buffer_head *bh = NULL;
1002         struct inode *inode = NULL;
1003
1004         mlog_entry("(%p, %p)\n", dentry->d_sb, buf);
1005
1006         osb = OCFS2_SB(dentry->d_sb);
1007
1008         inode = ocfs2_get_system_file_inode(osb,
1009                                             GLOBAL_BITMAP_SYSTEM_INODE,
1010                                             OCFS2_INVALID_SLOT);
1011         if (!inode) {
1012                 mlog(ML_ERROR, "failed to get bitmap inode\n");
1013                 status = -EIO;
1014                 goto bail;
1015         }
1016
1017         status = ocfs2_inode_lock(inode, &bh, 0);
1018         if (status < 0) {
1019                 mlog_errno(status);
1020                 goto bail;
1021         }
1022
1023         bm_lock = (struct ocfs2_dinode *) bh->b_data;
1024
1025         numbits = le32_to_cpu(bm_lock->id1.bitmap1.i_total);
1026         freebits = numbits - le32_to_cpu(bm_lock->id1.bitmap1.i_used);
1027
1028         buf->f_type = OCFS2_SUPER_MAGIC;
1029         buf->f_bsize = dentry->d_sb->s_blocksize;
1030         buf->f_namelen = OCFS2_MAX_FILENAME_LEN;
1031         buf->f_blocks = ((sector_t) numbits) *
1032                         (osb->s_clustersize >> osb->sb->s_blocksize_bits);
1033         buf->f_bfree = ((sector_t) freebits) *
1034                        (osb->s_clustersize >> osb->sb->s_blocksize_bits);
1035         buf->f_bavail = buf->f_bfree;
1036         buf->f_files = numbits;
1037         buf->f_ffree = freebits;
1038
1039         brelse(bh);
1040
1041         ocfs2_inode_unlock(inode, 0);
1042         status = 0;
1043 bail:
1044         if (inode)
1045                 iput(inode);
1046
1047         mlog_exit(status);
1048
1049         return status;
1050 }
1051
1052 static void ocfs2_inode_init_once(struct kmem_cache *cachep, void *data)
1053 {
1054         struct ocfs2_inode_info *oi = data;
1055
1056         oi->ip_flags = 0;
1057         oi->ip_open_count = 0;
1058         spin_lock_init(&oi->ip_lock);
1059         ocfs2_extent_map_init(&oi->vfs_inode);
1060         INIT_LIST_HEAD(&oi->ip_io_markers);
1061         oi->ip_created_trans = 0;
1062         oi->ip_last_trans = 0;
1063         oi->ip_dir_start_lookup = 0;
1064
1065         init_rwsem(&oi->ip_alloc_sem);
1066         mutex_init(&oi->ip_io_mutex);
1067
1068         oi->ip_blkno = 0ULL;
1069         oi->ip_clusters = 0;
1070
1071         ocfs2_lock_res_init_once(&oi->ip_rw_lockres);
1072         ocfs2_lock_res_init_once(&oi->ip_inode_lockres);
1073         ocfs2_lock_res_init_once(&oi->ip_open_lockres);
1074
1075         ocfs2_metadata_cache_init(&oi->vfs_inode);
1076
1077         inode_init_once(&oi->vfs_inode);
1078 }
1079
1080 static int ocfs2_initialize_mem_caches(void)
1081 {
1082         ocfs2_inode_cachep = kmem_cache_create("ocfs2_inode_cache",
1083                                        sizeof(struct ocfs2_inode_info),
1084                                        0,
1085                                        (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
1086                                                 SLAB_MEM_SPREAD),
1087                                        ocfs2_inode_init_once);
1088         if (!ocfs2_inode_cachep)
1089                 return -ENOMEM;
1090
1091         return 0;
1092 }
1093
1094 static void ocfs2_free_mem_caches(void)
1095 {
1096         if (ocfs2_inode_cachep)
1097                 kmem_cache_destroy(ocfs2_inode_cachep);
1098
1099         ocfs2_inode_cachep = NULL;
1100 }
1101
1102 static int ocfs2_get_sector(struct super_block *sb,
1103                             struct buffer_head **bh,
1104                             int block,
1105                             int sect_size)
1106 {
1107         if (!sb_set_blocksize(sb, sect_size)) {
1108                 mlog(ML_ERROR, "unable to set blocksize\n");
1109                 return -EIO;
1110         }
1111
1112         *bh = sb_getblk(sb, block);
1113         if (!*bh) {
1114                 mlog_errno(-EIO);
1115                 return -EIO;
1116         }
1117         lock_buffer(*bh);
1118         if (!buffer_dirty(*bh))
1119                 clear_buffer_uptodate(*bh);
1120         unlock_buffer(*bh);
1121         ll_rw_block(READ, 1, bh);
1122         wait_on_buffer(*bh);
1123         return 0;
1124 }
1125
1126 static int ocfs2_mount_volume(struct super_block *sb)
1127 {
1128         int status = 0;
1129         int unlock_super = 0;
1130         struct ocfs2_super *osb = OCFS2_SB(sb);
1131
1132         mlog_entry_void();
1133
1134         if (ocfs2_is_hard_readonly(osb))
1135                 goto leave;
1136
1137         status = ocfs2_dlm_init(osb);
1138         if (status < 0) {
1139                 mlog_errno(status);
1140                 goto leave;
1141         }
1142
1143         status = ocfs2_super_lock(osb, 1);
1144         if (status < 0) {
1145                 mlog_errno(status);
1146                 goto leave;
1147         }
1148         unlock_super = 1;
1149
1150         /* This will load up the node map and add ourselves to it. */
1151         status = ocfs2_find_slot(osb);
1152         if (status < 0) {
1153                 mlog_errno(status);
1154                 goto leave;
1155         }
1156
1157         /* load all node-local system inodes */
1158         status = ocfs2_init_local_system_inodes(osb);
1159         if (status < 0) {
1160                 mlog_errno(status);
1161                 goto leave;
1162         }
1163
1164         status = ocfs2_check_volume(osb);
1165         if (status < 0) {
1166                 mlog_errno(status);
1167                 goto leave;
1168         }
1169
1170         status = ocfs2_truncate_log_init(osb);
1171         if (status < 0) {
1172                 mlog_errno(status);
1173                 goto leave;
1174         }
1175
1176         if (ocfs2_mount_local(osb))
1177                 goto leave;
1178
1179 leave:
1180         if (unlock_super)
1181                 ocfs2_super_unlock(osb, 1);
1182
1183         mlog_exit(status);
1184         return status;
1185 }
1186
1187 static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
1188 {
1189         int tmp, hangup_needed = 0;
1190         struct ocfs2_super *osb = NULL;
1191         char nodestr[8];
1192
1193         mlog_entry("(0x%p)\n", sb);
1194
1195         BUG_ON(!sb);
1196         osb = OCFS2_SB(sb);
1197         BUG_ON(!osb);
1198
1199         ocfs2_shutdown_local_alloc(osb);
1200
1201         ocfs2_truncate_log_shutdown(osb);
1202
1203         /* This will disable recovery and flush any recovery work. */
1204         ocfs2_recovery_exit(osb);
1205
1206         ocfs2_journal_shutdown(osb);
1207
1208         ocfs2_sync_blockdev(sb);
1209
1210         /* No cluster connection means we've failed during mount, so skip
1211          * all the steps which depended on that to complete. */
1212         if (osb->cconn) {
1213                 tmp = ocfs2_super_lock(osb, 1);
1214                 if (tmp < 0) {
1215                         mlog_errno(tmp);
1216                         return;
1217                 }
1218         }
1219
1220         if (osb->slot_num != OCFS2_INVALID_SLOT)
1221                 ocfs2_put_slot(osb);
1222
1223         if (osb->cconn)
1224                 ocfs2_super_unlock(osb, 1);
1225
1226         ocfs2_release_system_inodes(osb);
1227
1228         /*
1229          * If we're dismounting due to mount error, mount.ocfs2 will clean
1230          * up heartbeat.  If we're a local mount, there is no heartbeat.
1231          * If we failed before we got a uuid_str yet, we can't stop
1232          * heartbeat.  Otherwise, do it.
1233          */
1234         if (!mnt_err && !ocfs2_mount_local(osb) && osb->uuid_str)
1235                 hangup_needed = 1;
1236
1237         if (osb->cconn)
1238                 ocfs2_dlm_shutdown(osb, hangup_needed);
1239
1240         debugfs_remove(osb->osb_debug_root);
1241
1242         if (hangup_needed)
1243                 ocfs2_cluster_hangup(osb->uuid_str, strlen(osb->uuid_str));
1244
1245         atomic_set(&osb->vol_state, VOLUME_DISMOUNTED);
1246
1247         if (ocfs2_mount_local(osb))
1248                 snprintf(nodestr, sizeof(nodestr), "local");
1249         else
1250                 snprintf(nodestr, sizeof(nodestr), "%u", osb->node_num);
1251
1252         printk(KERN_INFO "ocfs2: Unmounting device (%s) on (node %s)\n",
1253                osb->dev_str, nodestr);
1254
1255         ocfs2_delete_osb(osb);
1256         kfree(osb);
1257         sb->s_dev = 0;
1258         sb->s_fs_info = NULL;
1259 }
1260
1261 static int ocfs2_setup_osb_uuid(struct ocfs2_super *osb, const unsigned char *uuid,
1262                                 unsigned uuid_bytes)
1263 {
1264         int i, ret;
1265         char *ptr;
1266
1267         BUG_ON(uuid_bytes != OCFS2_VOL_UUID_LEN);
1268
1269         osb->uuid_str = kzalloc(OCFS2_VOL_UUID_LEN * 2 + 1, GFP_KERNEL);
1270         if (osb->uuid_str == NULL)
1271                 return -ENOMEM;
1272
1273         for (i = 0, ptr = osb->uuid_str; i < OCFS2_VOL_UUID_LEN; i++) {
1274                 /* print with null */
1275                 ret = snprintf(ptr, 3, "%02X", uuid[i]);
1276                 if (ret != 2) /* drop super cleans up */
1277                         return -EINVAL;
1278                 /* then only advance past the last char */
1279                 ptr += 2;
1280         }
1281
1282         return 0;
1283 }
1284
1285 static int ocfs2_initialize_super(struct super_block *sb,
1286                                   struct buffer_head *bh,
1287                                   int sector_size)
1288 {
1289         int status;
1290         int i, cbits, bbits;
1291         struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1292         struct inode *inode = NULL;
1293         struct ocfs2_journal *journal;
1294         __le32 uuid_net_key;
1295         struct ocfs2_super *osb;
1296
1297         mlog_entry_void();
1298
1299         osb = kzalloc(sizeof(struct ocfs2_super), GFP_KERNEL);
1300         if (!osb) {
1301                 status = -ENOMEM;
1302                 mlog_errno(status);
1303                 goto bail;
1304         }
1305
1306         sb->s_fs_info = osb;
1307         sb->s_op = &ocfs2_sops;
1308         sb->s_export_op = &ocfs2_export_ops;
1309         sb->s_time_gran = 1;
1310         sb->s_flags |= MS_NOATIME;
1311         /* this is needed to support O_LARGEFILE */
1312         cbits = le32_to_cpu(di->id2.i_super.s_clustersize_bits);
1313         bbits = le32_to_cpu(di->id2.i_super.s_blocksize_bits);
1314         sb->s_maxbytes = ocfs2_max_file_offset(bbits, cbits);
1315
1316         osb->sb = sb;
1317         /* Save off for ocfs2_rw_direct */
1318         osb->s_sectsize_bits = blksize_bits(sector_size);
1319         BUG_ON(!osb->s_sectsize_bits);
1320
1321         spin_lock_init(&osb->dc_task_lock);
1322         init_waitqueue_head(&osb->dc_event);
1323         osb->dc_work_sequence = 0;
1324         osb->dc_wake_sequence = 0;
1325         INIT_LIST_HEAD(&osb->blocked_lock_list);
1326         osb->blocked_lock_count = 0;
1327         spin_lock_init(&osb->osb_lock);
1328
1329         atomic_set(&osb->alloc_stats.moves, 0);
1330         atomic_set(&osb->alloc_stats.local_data, 0);
1331         atomic_set(&osb->alloc_stats.bitmap_data, 0);
1332         atomic_set(&osb->alloc_stats.bg_allocs, 0);
1333         atomic_set(&osb->alloc_stats.bg_extends, 0);
1334
1335         ocfs2_init_node_maps(osb);
1336
1337         snprintf(osb->dev_str, sizeof(osb->dev_str), "%u,%u",
1338                  MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
1339
1340         status = ocfs2_recovery_init(osb);
1341         if (status) {
1342                 mlog(ML_ERROR, "Unable to initialize recovery state\n");
1343                 mlog_errno(status);
1344                 goto bail;
1345         }
1346
1347         init_waitqueue_head(&osb->checkpoint_event);
1348         atomic_set(&osb->needs_checkpoint, 0);
1349
1350         osb->s_atime_quantum = OCFS2_DEFAULT_ATIME_QUANTUM;
1351
1352         osb->slot_num = OCFS2_INVALID_SLOT;
1353
1354         osb->local_alloc_state = OCFS2_LA_UNUSED;
1355         osb->local_alloc_bh = NULL;
1356
1357         init_waitqueue_head(&osb->osb_mount_event);
1358
1359         osb->vol_label = kmalloc(OCFS2_MAX_VOL_LABEL_LEN, GFP_KERNEL);
1360         if (!osb->vol_label) {
1361                 mlog(ML_ERROR, "unable to alloc vol label\n");
1362                 status = -ENOMEM;
1363                 goto bail;
1364         }
1365
1366         osb->max_slots = le16_to_cpu(di->id2.i_super.s_max_slots);
1367         if (osb->max_slots > OCFS2_MAX_SLOTS || osb->max_slots == 0) {
1368                 mlog(ML_ERROR, "Invalid number of node slots (%u)\n",
1369                      osb->max_slots);
1370                 status = -EINVAL;
1371                 goto bail;
1372         }
1373         mlog(0, "max_slots for this device: %u\n", osb->max_slots);
1374
1375         init_waitqueue_head(&osb->osb_wipe_event);
1376         osb->osb_orphan_wipes = kcalloc(osb->max_slots,
1377                                         sizeof(*osb->osb_orphan_wipes),
1378                                         GFP_KERNEL);
1379         if (!osb->osb_orphan_wipes) {
1380                 status = -ENOMEM;
1381                 mlog_errno(status);
1382                 goto bail;
1383         }
1384
1385         osb->s_feature_compat =
1386                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_compat);
1387         osb->s_feature_ro_compat =
1388                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_ro_compat);
1389         osb->s_feature_incompat =
1390                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_incompat);
1391
1392         if ((i = OCFS2_HAS_INCOMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_INCOMPAT_SUPP))) {
1393                 mlog(ML_ERROR, "couldn't mount because of unsupported "
1394                      "optional features (%x).\n", i);
1395                 status = -EINVAL;
1396                 goto bail;
1397         }
1398         if (!(osb->sb->s_flags & MS_RDONLY) &&
1399             (i = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP))) {
1400                 mlog(ML_ERROR, "couldn't mount RDWR because of "
1401                      "unsupported optional features (%x).\n", i);
1402                 status = -EINVAL;
1403                 goto bail;
1404         }
1405
1406         get_random_bytes(&osb->s_next_generation, sizeof(u32));
1407
1408         /* FIXME
1409          * This should be done in ocfs2_journal_init(), but unknown
1410          * ordering issues will cause the filesystem to crash.
1411          * If anyone wants to figure out what part of the code
1412          * refers to osb->journal before ocfs2_journal_init() is run,
1413          * be my guest.
1414          */
1415         /* initialize our journal structure */
1416
1417         journal = kzalloc(sizeof(struct ocfs2_journal), GFP_KERNEL);
1418         if (!journal) {
1419                 mlog(ML_ERROR, "unable to alloc journal\n");
1420                 status = -ENOMEM;
1421                 goto bail;
1422         }
1423         osb->journal = journal;
1424         journal->j_osb = osb;
1425
1426         atomic_set(&journal->j_num_trans, 0);
1427         init_rwsem(&journal->j_trans_barrier);
1428         init_waitqueue_head(&journal->j_checkpointed);
1429         spin_lock_init(&journal->j_lock);
1430         journal->j_trans_id = (unsigned long) 1;
1431         INIT_LIST_HEAD(&journal->j_la_cleanups);
1432         INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery);
1433         journal->j_state = OCFS2_JOURNAL_FREE;
1434
1435         /* get some pseudo constants for clustersize bits */
1436         osb->s_clustersize_bits =
1437                 le32_to_cpu(di->id2.i_super.s_clustersize_bits);
1438         osb->s_clustersize = 1 << osb->s_clustersize_bits;
1439         mlog(0, "clusterbits=%d\n", osb->s_clustersize_bits);
1440
1441         if (osb->s_clustersize < OCFS2_MIN_CLUSTERSIZE ||
1442             osb->s_clustersize > OCFS2_MAX_CLUSTERSIZE) {
1443                 mlog(ML_ERROR, "Volume has invalid cluster size (%d)\n",
1444                      osb->s_clustersize);
1445                 status = -EINVAL;
1446                 goto bail;
1447         }
1448
1449         if (ocfs2_clusters_to_blocks(osb->sb, le32_to_cpu(di->i_clusters) - 1)
1450             > (u32)~0UL) {
1451                 mlog(ML_ERROR, "Volume might try to write to blocks beyond "
1452                      "what jbd can address in 32 bits.\n");
1453                 status = -EINVAL;
1454                 goto bail;
1455         }
1456
1457         if (ocfs2_setup_osb_uuid(osb, di->id2.i_super.s_uuid,
1458                                  sizeof(di->id2.i_super.s_uuid))) {
1459                 mlog(ML_ERROR, "Out of memory trying to setup our uuid.\n");
1460                 status = -ENOMEM;
1461                 goto bail;
1462         }
1463
1464         memcpy(&uuid_net_key, di->id2.i_super.s_uuid, sizeof(uuid_net_key));
1465
1466         strncpy(osb->vol_label, di->id2.i_super.s_label, 63);
1467         osb->vol_label[63] = '\0';
1468         osb->root_blkno = le64_to_cpu(di->id2.i_super.s_root_blkno);
1469         osb->system_dir_blkno = le64_to_cpu(di->id2.i_super.s_system_dir_blkno);
1470         osb->first_cluster_group_blkno =
1471                 le64_to_cpu(di->id2.i_super.s_first_cluster_group);
1472         osb->fs_generation = le32_to_cpu(di->i_fs_generation);
1473         mlog(0, "vol_label: %s\n", osb->vol_label);
1474         mlog(0, "uuid: %s\n", osb->uuid_str);
1475         mlog(0, "root_blkno=%llu, system_dir_blkno=%llu\n",
1476              (unsigned long long)osb->root_blkno,
1477              (unsigned long long)osb->system_dir_blkno);
1478
1479         osb->osb_dlm_debug = ocfs2_new_dlm_debug();
1480         if (!osb->osb_dlm_debug) {
1481                 status = -ENOMEM;
1482                 mlog_errno(status);
1483                 goto bail;
1484         }
1485
1486         atomic_set(&osb->vol_state, VOLUME_INIT);
1487
1488         /* load root, system_dir, and all global system inodes */
1489         status = ocfs2_init_global_system_inodes(osb);
1490         if (status < 0) {
1491                 mlog_errno(status);
1492                 goto bail;
1493         }
1494
1495         /*
1496          * global bitmap
1497          */
1498         inode = ocfs2_get_system_file_inode(osb, GLOBAL_BITMAP_SYSTEM_INODE,
1499                                             OCFS2_INVALID_SLOT);
1500         if (!inode) {
1501                 status = -EINVAL;
1502                 mlog_errno(status);
1503                 goto bail;
1504         }
1505
1506         osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
1507         iput(inode);
1508
1509         osb->bitmap_cpg = ocfs2_group_bitmap_size(sb) * 8;
1510
1511         status = ocfs2_init_slot_info(osb);
1512         if (status < 0) {
1513                 mlog_errno(status);
1514                 goto bail;
1515         }
1516
1517 bail:
1518         mlog_exit(status);
1519         return status;
1520 }
1521
1522 /*
1523  * will return: -EAGAIN if it is ok to keep searching for superblocks
1524  *              -EINVAL if there is a bad superblock
1525  *              0 on success
1526  */
1527 static int ocfs2_verify_volume(struct ocfs2_dinode *di,
1528                                struct buffer_head *bh,
1529                                u32 blksz)
1530 {
1531         int status = -EAGAIN;
1532
1533         mlog_entry_void();
1534
1535         if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
1536                    strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) {
1537                 status = -EINVAL;
1538                 if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
1539                         mlog(ML_ERROR, "found superblock with incorrect block "
1540                              "size: found %u, should be %u\n",
1541                              1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits),
1542                                blksz);
1543                 } else if (le16_to_cpu(di->id2.i_super.s_major_rev_level) !=
1544                            OCFS2_MAJOR_REV_LEVEL ||
1545                            le16_to_cpu(di->id2.i_super.s_minor_rev_level) !=
1546                            OCFS2_MINOR_REV_LEVEL) {
1547                         mlog(ML_ERROR, "found superblock with bad version: "
1548                              "found %u.%u, should be %u.%u\n",
1549                              le16_to_cpu(di->id2.i_super.s_major_rev_level),
1550                              le16_to_cpu(di->id2.i_super.s_minor_rev_level),
1551                              OCFS2_MAJOR_REV_LEVEL,
1552                              OCFS2_MINOR_REV_LEVEL);
1553                 } else if (bh->b_blocknr != le64_to_cpu(di->i_blkno)) {
1554                         mlog(ML_ERROR, "bad block number on superblock: "
1555                              "found %llu, should be %llu\n",
1556                              (unsigned long long)le64_to_cpu(di->i_blkno),
1557                              (unsigned long long)bh->b_blocknr);
1558                 } else if (le32_to_cpu(di->id2.i_super.s_clustersize_bits) < 12 ||
1559                             le32_to_cpu(di->id2.i_super.s_clustersize_bits) > 20) {
1560                         mlog(ML_ERROR, "bad cluster size found: %u\n",
1561                              1 << le32_to_cpu(di->id2.i_super.s_clustersize_bits));
1562                 } else if (!le64_to_cpu(di->id2.i_super.s_root_blkno)) {
1563                         mlog(ML_ERROR, "bad root_blkno: 0\n");
1564                 } else if (!le64_to_cpu(di->id2.i_super.s_system_dir_blkno)) {
1565                         mlog(ML_ERROR, "bad system_dir_blkno: 0\n");
1566                 } else if (le16_to_cpu(di->id2.i_super.s_max_slots) > OCFS2_MAX_SLOTS) {
1567                         mlog(ML_ERROR,
1568                              "Superblock slots found greater than file system "
1569                              "maximum: found %u, max %u\n",
1570                              le16_to_cpu(di->id2.i_super.s_max_slots),
1571                              OCFS2_MAX_SLOTS);
1572                 } else {
1573                         /* found it! */
1574                         status = 0;
1575                 }
1576         }
1577
1578         mlog_exit(status);
1579         return status;
1580 }
1581
1582 static int ocfs2_check_volume(struct ocfs2_super *osb)
1583 {
1584         int status;
1585         int dirty;
1586         int local;
1587         struct ocfs2_dinode *local_alloc = NULL; /* only used if we
1588                                                   * recover
1589                                                   * ourselves. */
1590
1591         mlog_entry_void();
1592
1593         /* Init our journal object. */
1594         status = ocfs2_journal_init(osb->journal, &dirty);
1595         if (status < 0) {
1596                 mlog(ML_ERROR, "Could not initialize journal!\n");
1597                 goto finally;
1598         }
1599
1600         /* If the journal was unmounted cleanly then we don't want to
1601          * recover anything. Otherwise, journal_load will do that
1602          * dirty work for us :) */
1603         if (!dirty) {
1604                 status = ocfs2_journal_wipe(osb->journal, 0);
1605                 if (status < 0) {
1606                         mlog_errno(status);
1607                         goto finally;
1608                 }
1609         } else {
1610                 mlog(ML_NOTICE, "File system was not unmounted cleanly, "
1611                      "recovering volume.\n");
1612         }
1613
1614         local = ocfs2_mount_local(osb);
1615
1616         /* will play back anything left in the journal. */
1617         ocfs2_journal_load(osb->journal, local);
1618
1619         if (dirty) {
1620                 /* recover my local alloc if we didn't unmount cleanly. */
1621                 status = ocfs2_begin_local_alloc_recovery(osb,
1622                                                           osb->slot_num,
1623                                                           &local_alloc);
1624                 if (status < 0) {
1625                         mlog_errno(status);
1626                         goto finally;
1627                 }
1628                 /* we complete the recovery process after we've marked
1629                  * ourselves as mounted. */
1630         }
1631
1632         mlog(0, "Journal loaded.\n");
1633
1634         status = ocfs2_load_local_alloc(osb);
1635         if (status < 0) {
1636                 mlog_errno(status);
1637                 goto finally;
1638         }
1639
1640         if (dirty) {
1641                 /* Recovery will be completed after we've mounted the
1642                  * rest of the volume. */
1643                 osb->dirty = 1;
1644                 osb->local_alloc_copy = local_alloc;
1645                 local_alloc = NULL;
1646         }
1647
1648         /* go through each journal, trylock it and if you get the
1649          * lock, and it's marked as dirty, set the bit in the recover
1650          * map and launch a recovery thread for it. */
1651         status = ocfs2_mark_dead_nodes(osb);
1652         if (status < 0)
1653                 mlog_errno(status);
1654
1655 finally:
1656         if (local_alloc)
1657                 kfree(local_alloc);
1658
1659         mlog_exit(status);
1660         return status;
1661 }
1662
1663 /*
1664  * The routine gets called from dismount or close whenever a dismount on
1665  * volume is requested and the osb open count becomes 1.
1666  * It will remove the osb from the global list and also free up all the
1667  * initialized resources and fileobject.
1668  */
1669 static void ocfs2_delete_osb(struct ocfs2_super *osb)
1670 {
1671         mlog_entry_void();
1672
1673         /* This function assumes that the caller has the main osb resource */
1674
1675         ocfs2_free_slot_info(osb);
1676
1677         kfree(osb->osb_orphan_wipes);
1678         /* FIXME
1679          * This belongs in journal shutdown, but because we have to
1680          * allocate osb->journal at the start of ocfs2_initalize_osb(),
1681          * we free it here.
1682          */
1683         kfree(osb->journal);
1684         if (osb->local_alloc_copy)
1685                 kfree(osb->local_alloc_copy);
1686         kfree(osb->uuid_str);
1687         ocfs2_put_dlm_debug(osb->osb_dlm_debug);
1688         memset(osb, 0, sizeof(struct ocfs2_super));
1689
1690         mlog_exit_void();
1691 }
1692
1693 /* Put OCFS2 into a readonly state, or (if the user specifies it),
1694  * panic(). We do not support continue-on-error operation. */
1695 static void ocfs2_handle_error(struct super_block *sb)
1696 {
1697         struct ocfs2_super *osb = OCFS2_SB(sb);
1698
1699         if (osb->s_mount_opt & OCFS2_MOUNT_ERRORS_PANIC)
1700                 panic("OCFS2: (device %s): panic forced after error\n",
1701                       sb->s_id);
1702
1703         ocfs2_set_osb_flag(osb, OCFS2_OSB_ERROR_FS);
1704
1705         if (sb->s_flags & MS_RDONLY &&
1706             (ocfs2_is_soft_readonly(osb) ||
1707              ocfs2_is_hard_readonly(osb)))
1708                 return;
1709
1710         printk(KERN_CRIT "File system is now read-only due to the potential "
1711                "of on-disk corruption. Please run fsck.ocfs2 once the file "
1712                "system is unmounted.\n");
1713         sb->s_flags |= MS_RDONLY;
1714         ocfs2_set_ro_flag(osb, 0);
1715 }
1716
1717 static char error_buf[1024];
1718
1719 void __ocfs2_error(struct super_block *sb,
1720                    const char *function,
1721                    const char *fmt, ...)
1722 {
1723         va_list args;
1724
1725         va_start(args, fmt);
1726         vsnprintf(error_buf, sizeof(error_buf), fmt, args);
1727         va_end(args);
1728
1729         /* Not using mlog here because we want to show the actual
1730          * function the error came from. */
1731         printk(KERN_CRIT "OCFS2: ERROR (device %s): %s: %s\n",
1732                sb->s_id, function, error_buf);
1733
1734         ocfs2_handle_error(sb);
1735 }
1736
1737 /* Handle critical errors. This is intentionally more drastic than
1738  * ocfs2_handle_error, so we only use for things like journal errors,
1739  * etc. */
1740 void __ocfs2_abort(struct super_block* sb,
1741                    const char *function,
1742                    const char *fmt, ...)
1743 {
1744         va_list args;
1745
1746         va_start(args, fmt);
1747         vsnprintf(error_buf, sizeof(error_buf), fmt, args);
1748         va_end(args);
1749
1750         printk(KERN_CRIT "OCFS2: abort (device %s): %s: %s\n",
1751                sb->s_id, function, error_buf);
1752
1753         /* We don't have the cluster support yet to go straight to
1754          * hard readonly in here. Until then, we want to keep
1755          * ocfs2_abort() so that we can at least mark critical
1756          * errors.
1757          *
1758          * TODO: This should abort the journal and alert other nodes
1759          * that our slot needs recovery. */
1760
1761         /* Force a panic(). This stinks, but it's better than letting
1762          * things continue without having a proper hard readonly
1763          * here. */
1764         OCFS2_SB(sb)->s_mount_opt |= OCFS2_MOUNT_ERRORS_PANIC;
1765         ocfs2_handle_error(sb);
1766 }
1767
1768 module_init(ocfs2_init);
1769 module_exit(ocfs2_exit);