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