4eaf0e602bd09dc016b55238bea4fea8f63c76db
[linux-2.6.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 #include <linux/quotaops.h>
45
46 #define MLOG_MASK_PREFIX ML_SUPER
47 #include <cluster/masklog.h>
48
49 #include "ocfs2.h"
50
51 /* this should be the only file to include a version 1 header */
52 #include "ocfs1_fs_compat.h"
53
54 #include "alloc.h"
55 #include "blockcheck.h"
56 #include "dlmglue.h"
57 #include "export.h"
58 #include "extent_map.h"
59 #include "heartbeat.h"
60 #include "inode.h"
61 #include "journal.h"
62 #include "localalloc.h"
63 #include "namei.h"
64 #include "slot_map.h"
65 #include "super.h"
66 #include "sysfile.h"
67 #include "uptodate.h"
68 #include "ver.h"
69 #include "xattr.h"
70 #include "quota.h"
71
72 #include "buffer_head_io.h"
73
74 static struct kmem_cache *ocfs2_inode_cachep = NULL;
75 struct kmem_cache *ocfs2_dquot_cachep;
76 struct kmem_cache *ocfs2_qf_chunk_cachep;
77
78 /* OCFS2 needs to schedule several differnt types of work which
79  * require cluster locking, disk I/O, recovery waits, etc. Since these
80  * types of work tend to be heavy we avoid using the kernel events
81  * workqueue and schedule on our own. */
82 struct workqueue_struct *ocfs2_wq = NULL;
83
84 static struct dentry *ocfs2_debugfs_root = NULL;
85
86 MODULE_AUTHOR("Oracle");
87 MODULE_LICENSE("GPL");
88
89 struct mount_options
90 {
91         unsigned long   commit_interval;
92         unsigned long   mount_opt;
93         unsigned int    atime_quantum;
94         signed short    slot;
95         unsigned int    localalloc_opt;
96         char            cluster_stack[OCFS2_STACK_LABEL_LEN + 1];
97 };
98
99 static int ocfs2_parse_options(struct super_block *sb, char *options,
100                                struct mount_options *mopt,
101                                int is_remount);
102 static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt);
103 static void ocfs2_put_super(struct super_block *sb);
104 static int ocfs2_mount_volume(struct super_block *sb);
105 static int ocfs2_remount(struct super_block *sb, int *flags, char *data);
106 static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err);
107 static int ocfs2_initialize_mem_caches(void);
108 static void ocfs2_free_mem_caches(void);
109 static void ocfs2_delete_osb(struct ocfs2_super *osb);
110
111 static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf);
112
113 static int ocfs2_sync_fs(struct super_block *sb, int wait);
114
115 static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb);
116 static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb);
117 static void ocfs2_release_system_inodes(struct ocfs2_super *osb);
118 static int ocfs2_check_volume(struct ocfs2_super *osb);
119 static int ocfs2_verify_volume(struct ocfs2_dinode *di,
120                                struct buffer_head *bh,
121                                u32 sectsize);
122 static int ocfs2_initialize_super(struct super_block *sb,
123                                   struct buffer_head *bh,
124                                   int sector_size);
125 static int ocfs2_get_sector(struct super_block *sb,
126                             struct buffer_head **bh,
127                             int block,
128                             int sect_size);
129 static void ocfs2_write_super(struct super_block *sb);
130 static struct inode *ocfs2_alloc_inode(struct super_block *sb);
131 static void ocfs2_destroy_inode(struct inode *inode);
132 static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend);
133 static int ocfs2_enable_quotas(struct ocfs2_super *osb);
134 static void ocfs2_disable_quotas(struct ocfs2_super *osb);
135
136 static const struct super_operations ocfs2_sops = {
137         .statfs         = ocfs2_statfs,
138         .alloc_inode    = ocfs2_alloc_inode,
139         .destroy_inode  = ocfs2_destroy_inode,
140         .drop_inode     = ocfs2_drop_inode,
141         .clear_inode    = ocfs2_clear_inode,
142         .delete_inode   = ocfs2_delete_inode,
143         .sync_fs        = ocfs2_sync_fs,
144         .write_super    = ocfs2_write_super,
145         .put_super      = ocfs2_put_super,
146         .remount_fs     = ocfs2_remount,
147         .show_options   = ocfs2_show_options,
148         .quota_read     = ocfs2_quota_read,
149         .quota_write    = ocfs2_quota_write,
150 };
151
152 enum {
153         Opt_barrier,
154         Opt_err_panic,
155         Opt_err_ro,
156         Opt_intr,
157         Opt_nointr,
158         Opt_hb_none,
159         Opt_hb_local,
160         Opt_data_ordered,
161         Opt_data_writeback,
162         Opt_atime_quantum,
163         Opt_slot,
164         Opt_commit,
165         Opt_localalloc,
166         Opt_localflocks,
167         Opt_stack,
168         Opt_user_xattr,
169         Opt_nouser_xattr,
170         Opt_inode64,
171         Opt_acl,
172         Opt_noacl,
173         Opt_usrquota,
174         Opt_grpquota,
175         Opt_err,
176 };
177
178 static const match_table_t tokens = {
179         {Opt_barrier, "barrier=%u"},
180         {Opt_err_panic, "errors=panic"},
181         {Opt_err_ro, "errors=remount-ro"},
182         {Opt_intr, "intr"},
183         {Opt_nointr, "nointr"},
184         {Opt_hb_none, OCFS2_HB_NONE},
185         {Opt_hb_local, OCFS2_HB_LOCAL},
186         {Opt_data_ordered, "data=ordered"},
187         {Opt_data_writeback, "data=writeback"},
188         {Opt_atime_quantum, "atime_quantum=%u"},
189         {Opt_slot, "preferred_slot=%u"},
190         {Opt_commit, "commit=%u"},
191         {Opt_localalloc, "localalloc=%d"},
192         {Opt_localflocks, "localflocks"},
193         {Opt_stack, "cluster_stack=%s"},
194         {Opt_user_xattr, "user_xattr"},
195         {Opt_nouser_xattr, "nouser_xattr"},
196         {Opt_inode64, "inode64"},
197         {Opt_acl, "acl"},
198         {Opt_noacl, "noacl"},
199         {Opt_usrquota, "usrquota"},
200         {Opt_grpquota, "grpquota"},
201         {Opt_err, NULL}
202 };
203
204 #ifdef CONFIG_DEBUG_FS
205 static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
206 {
207         int out = 0;
208         int i;
209         struct ocfs2_cluster_connection *cconn = osb->cconn;
210         struct ocfs2_recovery_map *rm = osb->recovery_map;
211
212         out += snprintf(buf + out, len - out,
213                         "%10s => Id: %-s  Uuid: %-s  Gen: 0x%X  Label: %-s\n",
214                         "Device", osb->dev_str, osb->uuid_str,
215                         osb->fs_generation, osb->vol_label);
216
217         out += snprintf(buf + out, len - out,
218                         "%10s => State: %d  Flags: 0x%lX\n", "Volume",
219                         atomic_read(&osb->vol_state), osb->osb_flags);
220
221         out += snprintf(buf + out, len - out,
222                         "%10s => Block: %lu  Cluster: %d\n", "Sizes",
223                         osb->sb->s_blocksize, osb->s_clustersize);
224
225         out += snprintf(buf + out, len - out,
226                         "%10s => Compat: 0x%X  Incompat: 0x%X  "
227                         "ROcompat: 0x%X\n",
228                         "Features", osb->s_feature_compat,
229                         osb->s_feature_incompat, osb->s_feature_ro_compat);
230
231         out += snprintf(buf + out, len - out,
232                         "%10s => Opts: 0x%lX  AtimeQuanta: %u\n", "Mount",
233                         osb->s_mount_opt, osb->s_atime_quantum);
234
235         out += snprintf(buf + out, len - out,
236                         "%10s => Stack: %s  Name: %*s  Version: %d.%d\n",
237                         "Cluster",
238                         (*osb->osb_cluster_stack == '\0' ?
239                          "o2cb" : osb->osb_cluster_stack),
240                         cconn->cc_namelen, cconn->cc_name,
241                         cconn->cc_version.pv_major, cconn->cc_version.pv_minor);
242
243         spin_lock(&osb->dc_task_lock);
244         out += snprintf(buf + out, len - out,
245                         "%10s => Pid: %d  Count: %lu  WakeSeq: %lu  "
246                         "WorkSeq: %lu\n", "DownCnvt",
247                         task_pid_nr(osb->dc_task), osb->blocked_lock_count,
248                         osb->dc_wake_sequence, osb->dc_work_sequence);
249         spin_unlock(&osb->dc_task_lock);
250
251         spin_lock(&osb->osb_lock);
252         out += snprintf(buf + out, len - out, "%10s => Pid: %d  Nodes:",
253                         "Recovery",
254                         (osb->recovery_thread_task ?
255                          task_pid_nr(osb->recovery_thread_task) : -1));
256         if (rm->rm_used == 0)
257                 out += snprintf(buf + out, len - out, " None\n");
258         else {
259                 for (i = 0; i < rm->rm_used; i++)
260                         out += snprintf(buf + out, len - out, " %d",
261                                         rm->rm_entries[i]);
262                 out += snprintf(buf + out, len - out, "\n");
263         }
264         spin_unlock(&osb->osb_lock);
265
266         out += snprintf(buf + out, len - out,
267                         "%10s => Pid: %d  Interval: %lu  Needs: %d\n", "Commit",
268                         task_pid_nr(osb->commit_task), osb->osb_commit_interval,
269                         atomic_read(&osb->needs_checkpoint));
270
271         out += snprintf(buf + out, len - out,
272                         "%10s => State: %d  NumTxns: %d  TxnId: %lu\n",
273                         "Journal", osb->journal->j_state,
274                         atomic_read(&osb->journal->j_num_trans),
275                         osb->journal->j_trans_id);
276
277         out += snprintf(buf + out, len - out,
278                         "%10s => GlobalAllocs: %d  LocalAllocs: %d  "
279                         "SubAllocs: %d  LAWinMoves: %d  SAExtends: %d\n",
280                         "Stats",
281                         atomic_read(&osb->alloc_stats.bitmap_data),
282                         atomic_read(&osb->alloc_stats.local_data),
283                         atomic_read(&osb->alloc_stats.bg_allocs),
284                         atomic_read(&osb->alloc_stats.moves),
285                         atomic_read(&osb->alloc_stats.bg_extends));
286
287         out += snprintf(buf + out, len - out,
288                         "%10s => State: %u  Descriptor: %llu  Size: %u bits  "
289                         "Default: %u bits\n",
290                         "LocalAlloc", osb->local_alloc_state,
291                         (unsigned long long)osb->la_last_gd,
292                         osb->local_alloc_bits, osb->local_alloc_default_bits);
293
294         spin_lock(&osb->osb_lock);
295         out += snprintf(buf + out, len - out,
296                         "%10s => Slot: %d  NumStolen: %d\n", "Steal",
297                         osb->s_inode_steal_slot,
298                         atomic_read(&osb->s_num_inodes_stolen));
299         spin_unlock(&osb->osb_lock);
300
301         out += snprintf(buf + out, len - out, "%10s => %3s  %10s\n",
302                         "Slots", "Num", "RecoGen");
303
304         for (i = 0; i < osb->max_slots; ++i) {
305                 out += snprintf(buf + out, len - out,
306                                 "%10s  %c %3d  %10d\n",
307                                 " ",
308                                 (i == osb->slot_num ? '*' : ' '),
309                                 i, osb->slot_recovery_generations[i]);
310         }
311
312         return out;
313 }
314
315 static int ocfs2_osb_debug_open(struct inode *inode, struct file *file)
316 {
317         struct ocfs2_super *osb = inode->i_private;
318         char *buf = NULL;
319
320         buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
321         if (!buf)
322                 goto bail;
323
324         i_size_write(inode, ocfs2_osb_dump(osb, buf, PAGE_SIZE));
325
326         file->private_data = buf;
327
328         return 0;
329 bail:
330         return -ENOMEM;
331 }
332
333 static int ocfs2_debug_release(struct inode *inode, struct file *file)
334 {
335         kfree(file->private_data);
336         return 0;
337 }
338
339 static ssize_t ocfs2_debug_read(struct file *file, char __user *buf,
340                                 size_t nbytes, loff_t *ppos)
341 {
342         return simple_read_from_buffer(buf, nbytes, ppos, file->private_data,
343                                        i_size_read(file->f_mapping->host));
344 }
345 #else
346 static int ocfs2_osb_debug_open(struct inode *inode, struct file *file)
347 {
348         return 0;
349 }
350 static int ocfs2_debug_release(struct inode *inode, struct file *file)
351 {
352         return 0;
353 }
354 static ssize_t ocfs2_debug_read(struct file *file, char __user *buf,
355                                 size_t nbytes, loff_t *ppos)
356 {
357         return 0;
358 }
359 #endif  /* CONFIG_DEBUG_FS */
360
361 static struct file_operations ocfs2_osb_debug_fops = {
362         .open =         ocfs2_osb_debug_open,
363         .release =      ocfs2_debug_release,
364         .read =         ocfs2_debug_read,
365         .llseek =       generic_file_llseek,
366 };
367
368 /*
369  * write_super and sync_fs ripped right out of ext3.
370  */
371 static void ocfs2_write_super(struct super_block *sb)
372 {
373         if (mutex_trylock(&sb->s_lock) != 0)
374                 BUG();
375         sb->s_dirt = 0;
376 }
377
378 static int ocfs2_sync_fs(struct super_block *sb, int wait)
379 {
380         int status;
381         tid_t target;
382         struct ocfs2_super *osb = OCFS2_SB(sb);
383
384         sb->s_dirt = 0;
385
386         if (ocfs2_is_hard_readonly(osb))
387                 return -EROFS;
388
389         if (wait) {
390                 status = ocfs2_flush_truncate_log(osb);
391                 if (status < 0)
392                         mlog_errno(status);
393         } else {
394                 ocfs2_schedule_truncate_log_flush(osb, 0);
395         }
396
397         if (jbd2_journal_start_commit(OCFS2_SB(sb)->journal->j_journal,
398                                       &target)) {
399                 if (wait)
400                         jbd2_log_wait_commit(OCFS2_SB(sb)->journal->j_journal,
401                                              target);
402         }
403         return 0;
404 }
405
406 static int ocfs2_need_system_inode(struct ocfs2_super *osb, int ino)
407 {
408         if (!OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, OCFS2_FEATURE_RO_COMPAT_USRQUOTA)
409             && (ino == USER_QUOTA_SYSTEM_INODE
410                 || ino == LOCAL_USER_QUOTA_SYSTEM_INODE))
411                 return 0;
412         if (!OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)
413             && (ino == GROUP_QUOTA_SYSTEM_INODE
414                 || ino == LOCAL_GROUP_QUOTA_SYSTEM_INODE))
415                 return 0;
416         return 1;
417 }
418
419 static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb)
420 {
421         struct inode *new = NULL;
422         int status = 0;
423         int i;
424
425         mlog_entry_void();
426
427         new = ocfs2_iget(osb, osb->root_blkno, OCFS2_FI_FLAG_SYSFILE, 0);
428         if (IS_ERR(new)) {
429                 status = PTR_ERR(new);
430                 mlog_errno(status);
431                 goto bail;
432         }
433         osb->root_inode = new;
434
435         new = ocfs2_iget(osb, osb->system_dir_blkno, OCFS2_FI_FLAG_SYSFILE, 0);
436         if (IS_ERR(new)) {
437                 status = PTR_ERR(new);
438                 mlog_errno(status);
439                 goto bail;
440         }
441         osb->sys_root_inode = new;
442
443         for (i = OCFS2_FIRST_ONLINE_SYSTEM_INODE;
444              i <= OCFS2_LAST_GLOBAL_SYSTEM_INODE; i++) {
445                 if (!ocfs2_need_system_inode(osb, i))
446                         continue;
447                 new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
448                 if (!new) {
449                         ocfs2_release_system_inodes(osb);
450                         status = -EINVAL;
451                         mlog_errno(status);
452                         /* FIXME: Should ERROR_RO_FS */
453                         mlog(ML_ERROR, "Unable to load system inode %d, "
454                              "possibly corrupt fs?", i);
455                         goto bail;
456                 }
457                 // the array now has one ref, so drop this one
458                 iput(new);
459         }
460
461 bail:
462         mlog_exit(status);
463         return status;
464 }
465
466 static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb)
467 {
468         struct inode *new = NULL;
469         int status = 0;
470         int i;
471
472         mlog_entry_void();
473
474         for (i = OCFS2_LAST_GLOBAL_SYSTEM_INODE + 1;
475              i < NUM_SYSTEM_INODES;
476              i++) {
477                 if (!ocfs2_need_system_inode(osb, i))
478                         continue;
479                 new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
480                 if (!new) {
481                         ocfs2_release_system_inodes(osb);
482                         status = -EINVAL;
483                         mlog(ML_ERROR, "status=%d, sysfile=%d, slot=%d\n",
484                              status, i, osb->slot_num);
485                         goto bail;
486                 }
487                 /* the array now has one ref, so drop this one */
488                 iput(new);
489         }
490
491 bail:
492         mlog_exit(status);
493         return status;
494 }
495
496 static void ocfs2_release_system_inodes(struct ocfs2_super *osb)
497 {
498         int i;
499         struct inode *inode;
500
501         mlog_entry_void();
502
503         for (i = 0; i < NUM_SYSTEM_INODES; i++) {
504                 inode = osb->system_inodes[i];
505                 if (inode) {
506                         iput(inode);
507                         osb->system_inodes[i] = NULL;
508                 }
509         }
510
511         inode = osb->sys_root_inode;
512         if (inode) {
513                 iput(inode);
514                 osb->sys_root_inode = NULL;
515         }
516
517         inode = osb->root_inode;
518         if (inode) {
519                 iput(inode);
520                 osb->root_inode = NULL;
521         }
522
523         mlog_exit(0);
524 }
525
526 /* We're allocating fs objects, use GFP_NOFS */
527 static struct inode *ocfs2_alloc_inode(struct super_block *sb)
528 {
529         struct ocfs2_inode_info *oi;
530
531         oi = kmem_cache_alloc(ocfs2_inode_cachep, GFP_NOFS);
532         if (!oi)
533                 return NULL;
534
535         jbd2_journal_init_jbd_inode(&oi->ip_jinode, &oi->vfs_inode);
536         return &oi->vfs_inode;
537 }
538
539 static void ocfs2_destroy_inode(struct inode *inode)
540 {
541         kmem_cache_free(ocfs2_inode_cachep, OCFS2_I(inode));
542 }
543
544 static unsigned long long ocfs2_max_file_offset(unsigned int bbits,
545                                                 unsigned int cbits)
546 {
547         unsigned int bytes = 1 << cbits;
548         unsigned int trim = bytes;
549         unsigned int bitshift = 32;
550
551         /*
552          * i_size and all block offsets in ocfs2 are always 64 bits
553          * wide. i_clusters is 32 bits, in cluster-sized units. So on
554          * 64 bit platforms, cluster size will be the limiting factor.
555          */
556
557 #if BITS_PER_LONG == 32
558 # if defined(CONFIG_LBD)
559         BUILD_BUG_ON(sizeof(sector_t) != 8);
560         /*
561          * We might be limited by page cache size.
562          */
563         if (bytes > PAGE_CACHE_SIZE) {
564                 bytes = PAGE_CACHE_SIZE;
565                 trim = 1;
566                 /*
567                  * Shift by 31 here so that we don't get larger than
568                  * MAX_LFS_FILESIZE
569                  */
570                 bitshift = 31;
571         }
572 # else
573         /*
574          * We are limited by the size of sector_t. Use block size, as
575          * that's what we expose to the VFS.
576          */
577         bytes = 1 << bbits;
578         trim = 1;
579         bitshift = 31;
580 # endif
581 #endif
582
583         /*
584          * Trim by a whole cluster when we can actually approach the
585          * on-disk limits. Otherwise we can overflow i_clusters when
586          * an extent start is at the max offset.
587          */
588         return (((unsigned long long)bytes) << bitshift) - trim;
589 }
590
591 static int ocfs2_remount(struct super_block *sb, int *flags, char *data)
592 {
593         int incompat_features;
594         int ret = 0;
595         struct mount_options parsed_options;
596         struct ocfs2_super *osb = OCFS2_SB(sb);
597
598         if (!ocfs2_parse_options(sb, data, &parsed_options, 1)) {
599                 ret = -EINVAL;
600                 goto out;
601         }
602
603         if ((osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) !=
604             (parsed_options.mount_opt & OCFS2_MOUNT_HB_LOCAL)) {
605                 ret = -EINVAL;
606                 mlog(ML_ERROR, "Cannot change heartbeat mode on remount\n");
607                 goto out;
608         }
609
610         if ((osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK) !=
611             (parsed_options.mount_opt & OCFS2_MOUNT_DATA_WRITEBACK)) {
612                 ret = -EINVAL;
613                 mlog(ML_ERROR, "Cannot change data mode on remount\n");
614                 goto out;
615         }
616
617         /* Probably don't want this on remount; it might
618          * mess with other nodes */
619         if (!(osb->s_mount_opt & OCFS2_MOUNT_INODE64) &&
620             (parsed_options.mount_opt & OCFS2_MOUNT_INODE64)) {
621                 ret = -EINVAL;
622                 mlog(ML_ERROR, "Cannot enable inode64 on remount\n");
623                 goto out;
624         }
625
626         /* We're going to/from readonly mode. */
627         if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
628                 /* Disable quota accounting before remounting RO */
629                 if (*flags & MS_RDONLY) {
630                         ret = ocfs2_susp_quotas(osb, 0);
631                         if (ret < 0)
632                                 goto out;
633                 }
634                 /* Lock here so the check of HARD_RO and the potential
635                  * setting of SOFT_RO is atomic. */
636                 spin_lock(&osb->osb_lock);
637                 if (osb->osb_flags & OCFS2_OSB_HARD_RO) {
638                         mlog(ML_ERROR, "Remount on readonly device is forbidden.\n");
639                         ret = -EROFS;
640                         goto unlock_osb;
641                 }
642
643                 if (*flags & MS_RDONLY) {
644                         mlog(0, "Going to ro mode.\n");
645                         sb->s_flags |= MS_RDONLY;
646                         osb->osb_flags |= OCFS2_OSB_SOFT_RO;
647                 } else {
648                         mlog(0, "Making ro filesystem writeable.\n");
649
650                         if (osb->osb_flags & OCFS2_OSB_ERROR_FS) {
651                                 mlog(ML_ERROR, "Cannot remount RDWR "
652                                      "filesystem due to previous errors.\n");
653                                 ret = -EROFS;
654                                 goto unlock_osb;
655                         }
656                         incompat_features = OCFS2_HAS_RO_COMPAT_FEATURE(sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP);
657                         if (incompat_features) {
658                                 mlog(ML_ERROR, "Cannot remount RDWR because "
659                                      "of unsupported optional features "
660                                      "(%x).\n", incompat_features);
661                                 ret = -EINVAL;
662                                 goto unlock_osb;
663                         }
664                         sb->s_flags &= ~MS_RDONLY;
665                         osb->osb_flags &= ~OCFS2_OSB_SOFT_RO;
666                 }
667 unlock_osb:
668                 spin_unlock(&osb->osb_lock);
669                 /* Enable quota accounting after remounting RW */
670                 if (!ret && !(*flags & MS_RDONLY)) {
671                         if (sb_any_quota_suspended(sb))
672                                 ret = ocfs2_susp_quotas(osb, 1);
673                         else
674                                 ret = ocfs2_enable_quotas(osb);
675                         if (ret < 0) {
676                                 /* Return back changes... */
677                                 spin_lock(&osb->osb_lock);
678                                 sb->s_flags |= MS_RDONLY;
679                                 osb->osb_flags |= OCFS2_OSB_SOFT_RO;
680                                 spin_unlock(&osb->osb_lock);
681                                 goto out;
682                         }
683                 }
684         }
685
686         if (!ret) {
687                 /* Only save off the new mount options in case of a successful
688                  * remount. */
689                 if (!(osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_XATTR))
690                         parsed_options.mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
691                 osb->s_mount_opt = parsed_options.mount_opt;
692                 osb->s_atime_quantum = parsed_options.atime_quantum;
693                 osb->preferred_slot = parsed_options.slot;
694                 if (parsed_options.commit_interval)
695                         osb->osb_commit_interval = parsed_options.commit_interval;
696
697                 if (!ocfs2_is_hard_readonly(osb))
698                         ocfs2_set_journal_params(osb);
699         }
700 out:
701         return ret;
702 }
703
704 static int ocfs2_sb_probe(struct super_block *sb,
705                           struct buffer_head **bh,
706                           int *sector_size)
707 {
708         int status, tmpstat;
709         struct ocfs1_vol_disk_hdr *hdr;
710         struct ocfs2_dinode *di;
711         int blksize;
712
713         *bh = NULL;
714
715         /* may be > 512 */
716         *sector_size = bdev_hardsect_size(sb->s_bdev);
717         if (*sector_size > OCFS2_MAX_BLOCKSIZE) {
718                 mlog(ML_ERROR, "Hardware sector size too large: %d (max=%d)\n",
719                      *sector_size, OCFS2_MAX_BLOCKSIZE);
720                 status = -EINVAL;
721                 goto bail;
722         }
723
724         /* Can this really happen? */
725         if (*sector_size < OCFS2_MIN_BLOCKSIZE)
726                 *sector_size = OCFS2_MIN_BLOCKSIZE;
727
728         /* check block zero for old format */
729         status = ocfs2_get_sector(sb, bh, 0, *sector_size);
730         if (status < 0) {
731                 mlog_errno(status);
732                 goto bail;
733         }
734         hdr = (struct ocfs1_vol_disk_hdr *) (*bh)->b_data;
735         if (hdr->major_version == OCFS1_MAJOR_VERSION) {
736                 mlog(ML_ERROR, "incompatible version: %u.%u\n",
737                      hdr->major_version, hdr->minor_version);
738                 status = -EINVAL;
739         }
740         if (memcmp(hdr->signature, OCFS1_VOLUME_SIGNATURE,
741                    strlen(OCFS1_VOLUME_SIGNATURE)) == 0) {
742                 mlog(ML_ERROR, "incompatible volume signature: %8s\n",
743                      hdr->signature);
744                 status = -EINVAL;
745         }
746         brelse(*bh);
747         *bh = NULL;
748         if (status < 0) {
749                 mlog(ML_ERROR, "This is an ocfs v1 filesystem which must be "
750                      "upgraded before mounting with ocfs v2\n");
751                 goto bail;
752         }
753
754         /*
755          * Now check at magic offset for 512, 1024, 2048, 4096
756          * blocksizes.  4096 is the maximum blocksize because it is
757          * the minimum clustersize.
758          */
759         status = -EINVAL;
760         for (blksize = *sector_size;
761              blksize <= OCFS2_MAX_BLOCKSIZE;
762              blksize <<= 1) {
763                 tmpstat = ocfs2_get_sector(sb, bh,
764                                            OCFS2_SUPER_BLOCK_BLKNO,
765                                            blksize);
766                 if (tmpstat < 0) {
767                         status = tmpstat;
768                         mlog_errno(status);
769                         goto bail;
770                 }
771                 di = (struct ocfs2_dinode *) (*bh)->b_data;
772                 status = ocfs2_verify_volume(di, *bh, blksize);
773                 if (status >= 0)
774                         goto bail;
775                 brelse(*bh);
776                 *bh = NULL;
777                 if (status != -EAGAIN)
778                         break;
779         }
780
781 bail:
782         return status;
783 }
784
785 static int ocfs2_verify_heartbeat(struct ocfs2_super *osb)
786 {
787         if (ocfs2_mount_local(osb)) {
788                 if (osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) {
789                         mlog(ML_ERROR, "Cannot heartbeat on a locally "
790                              "mounted device.\n");
791                         return -EINVAL;
792                 }
793         }
794
795         if (ocfs2_userspace_stack(osb)) {
796                 if (osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) {
797                         mlog(ML_ERROR, "Userspace stack expected, but "
798                              "o2cb heartbeat arguments passed to mount\n");
799                         return -EINVAL;
800                 }
801         }
802
803         if (!(osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL)) {
804                 if (!ocfs2_mount_local(osb) && !ocfs2_is_hard_readonly(osb) &&
805                     !ocfs2_userspace_stack(osb)) {
806                         mlog(ML_ERROR, "Heartbeat has to be started to mount "
807                              "a read-write clustered device.\n");
808                         return -EINVAL;
809                 }
810         }
811
812         return 0;
813 }
814
815 /*
816  * If we're using a userspace stack, mount should have passed
817  * a name that matches the disk.  If not, mount should not
818  * have passed a stack.
819  */
820 static int ocfs2_verify_userspace_stack(struct ocfs2_super *osb,
821                                         struct mount_options *mopt)
822 {
823         if (!ocfs2_userspace_stack(osb) && mopt->cluster_stack[0]) {
824                 mlog(ML_ERROR,
825                      "cluster stack passed to mount, but this filesystem "
826                      "does not support it\n");
827                 return -EINVAL;
828         }
829
830         if (ocfs2_userspace_stack(osb) &&
831             strncmp(osb->osb_cluster_stack, mopt->cluster_stack,
832                     OCFS2_STACK_LABEL_LEN)) {
833                 mlog(ML_ERROR,
834                      "cluster stack passed to mount (\"%s\") does not "
835                      "match the filesystem (\"%s\")\n",
836                      mopt->cluster_stack,
837                      osb->osb_cluster_stack);
838                 return -EINVAL;
839         }
840
841         return 0;
842 }
843
844 static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend)
845 {
846         int type;
847         struct super_block *sb = osb->sb;
848         unsigned int feature[MAXQUOTAS] = { OCFS2_FEATURE_RO_COMPAT_USRQUOTA,
849                                              OCFS2_FEATURE_RO_COMPAT_GRPQUOTA};
850         int status = 0;
851
852         for (type = 0; type < MAXQUOTAS; type++) {
853                 if (!OCFS2_HAS_RO_COMPAT_FEATURE(sb, feature[type]))
854                         continue;
855                 if (unsuspend)
856                         status = vfs_quota_enable(
857                                         sb_dqopt(sb)->files[type],
858                                         type, QFMT_OCFS2,
859                                         DQUOT_SUSPENDED);
860                 else
861                         status = vfs_quota_disable(sb, type,
862                                                    DQUOT_SUSPENDED);
863                 if (status < 0)
864                         break;
865         }
866         if (status < 0)
867                 mlog(ML_ERROR, "Failed to suspend/unsuspend quotas on "
868                      "remount (error = %d).\n", status);
869         return status;
870 }
871
872 static int ocfs2_enable_quotas(struct ocfs2_super *osb)
873 {
874         struct inode *inode[MAXQUOTAS] = { NULL, NULL };
875         struct super_block *sb = osb->sb;
876         unsigned int feature[MAXQUOTAS] = { OCFS2_FEATURE_RO_COMPAT_USRQUOTA,
877                                              OCFS2_FEATURE_RO_COMPAT_GRPQUOTA};
878         unsigned int ino[MAXQUOTAS] = { LOCAL_USER_QUOTA_SYSTEM_INODE,
879                                         LOCAL_GROUP_QUOTA_SYSTEM_INODE };
880         int status;
881         int type;
882
883         sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NEGATIVE_USAGE;
884         for (type = 0; type < MAXQUOTAS; type++) {
885                 if (!OCFS2_HAS_RO_COMPAT_FEATURE(sb, feature[type]))
886                         continue;
887                 inode[type] = ocfs2_get_system_file_inode(osb, ino[type],
888                                                         osb->slot_num);
889                 if (!inode[type]) {
890                         status = -ENOENT;
891                         goto out_quota_off;
892                 }
893                 status = vfs_quota_enable(inode[type], type, QFMT_OCFS2,
894                                                 DQUOT_USAGE_ENABLED);
895                 if (status < 0)
896                         goto out_quota_off;
897         }
898
899         for (type = 0; type < MAXQUOTAS; type++)
900                 iput(inode[type]);
901         return 0;
902 out_quota_off:
903         ocfs2_disable_quotas(osb);
904         for (type = 0; type < MAXQUOTAS; type++)
905                 iput(inode[type]);
906         mlog_errno(status);
907         return status;
908 }
909
910 static void ocfs2_disable_quotas(struct ocfs2_super *osb)
911 {
912         int type;
913         struct inode *inode;
914         struct super_block *sb = osb->sb;
915
916         /* We mostly ignore errors in this function because there's not much
917          * we can do when we see them */
918         for (type = 0; type < MAXQUOTAS; type++) {
919                 if (!sb_has_quota_loaded(sb, type))
920                         continue;
921                 inode = igrab(sb->s_dquot.files[type]);
922                 /* Turn off quotas. This will remove all dquot structures from
923                  * memory and so they will be automatically synced to global
924                  * quota files */
925                 vfs_quota_disable(sb, type, DQUOT_USAGE_ENABLED |
926                                             DQUOT_LIMITS_ENABLED);
927                 if (!inode)
928                         continue;
929                 iput(inode);
930         }
931 }
932
933 /* Handle quota on quotactl */
934 static int ocfs2_quota_on(struct super_block *sb, int type, int format_id,
935                           char *path, int remount)
936 {
937         unsigned int feature[MAXQUOTAS] = { OCFS2_FEATURE_RO_COMPAT_USRQUOTA,
938                                              OCFS2_FEATURE_RO_COMPAT_GRPQUOTA};
939
940         if (!OCFS2_HAS_RO_COMPAT_FEATURE(sb, feature[type]))
941                 return -EINVAL;
942
943         if (remount)
944                 return 0;       /* Just ignore it has been handled in
945                                  * ocfs2_remount() */
946         return vfs_quota_enable(sb_dqopt(sb)->files[type], type,
947                                     format_id, DQUOT_LIMITS_ENABLED);
948 }
949
950 /* Handle quota off quotactl */
951 static int ocfs2_quota_off(struct super_block *sb, int type, int remount)
952 {
953         if (remount)
954                 return 0;       /* Ignore now and handle later in
955                                  * ocfs2_remount() */
956         return vfs_quota_disable(sb, type, DQUOT_LIMITS_ENABLED);
957 }
958
959 static struct quotactl_ops ocfs2_quotactl_ops = {
960         .quota_on       = ocfs2_quota_on,
961         .quota_off      = ocfs2_quota_off,
962         .quota_sync     = vfs_quota_sync,
963         .get_info       = vfs_get_dqinfo,
964         .set_info       = vfs_set_dqinfo,
965         .get_dqblk      = vfs_get_dqblk,
966         .set_dqblk      = vfs_set_dqblk,
967 };
968
969 static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
970 {
971         struct dentry *root;
972         int status, sector_size;
973         struct mount_options parsed_options;
974         struct inode *inode = NULL;
975         struct ocfs2_super *osb = NULL;
976         struct buffer_head *bh = NULL;
977         char nodestr[8];
978
979         mlog_entry("%p, %p, %i", sb, data, silent);
980
981         if (!ocfs2_parse_options(sb, data, &parsed_options, 0)) {
982                 status = -EINVAL;
983                 goto read_super_error;
984         }
985
986         /* probe for superblock */
987         status = ocfs2_sb_probe(sb, &bh, &sector_size);
988         if (status < 0) {
989                 mlog(ML_ERROR, "superblock probe failed!\n");
990                 goto read_super_error;
991         }
992
993         status = ocfs2_initialize_super(sb, bh, sector_size);
994         osb = OCFS2_SB(sb);
995         if (status < 0) {
996                 mlog_errno(status);
997                 goto read_super_error;
998         }
999         brelse(bh);
1000         bh = NULL;
1001
1002         if (!(osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_XATTR))
1003                 parsed_options.mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
1004
1005         osb->s_mount_opt = parsed_options.mount_opt;
1006         osb->s_atime_quantum = parsed_options.atime_quantum;
1007         osb->preferred_slot = parsed_options.slot;
1008         osb->osb_commit_interval = parsed_options.commit_interval;
1009         osb->local_alloc_default_bits = ocfs2_megabytes_to_clusters(sb, parsed_options.localalloc_opt);
1010         osb->local_alloc_bits = osb->local_alloc_default_bits;
1011         if (osb->s_mount_opt & OCFS2_MOUNT_USRQUOTA &&
1012             !OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1013                                          OCFS2_FEATURE_RO_COMPAT_USRQUOTA)) {
1014                 status = -EINVAL;
1015                 mlog(ML_ERROR, "User quotas were requested, but this "
1016                      "filesystem does not have the feature enabled.\n");
1017                 goto read_super_error;
1018         }
1019         if (osb->s_mount_opt & OCFS2_MOUNT_GRPQUOTA &&
1020             !OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1021                                          OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)) {
1022                 status = -EINVAL;
1023                 mlog(ML_ERROR, "Group quotas were requested, but this "
1024                      "filesystem does not have the feature enabled.\n");
1025                 goto read_super_error;
1026         }
1027
1028         status = ocfs2_verify_userspace_stack(osb, &parsed_options);
1029         if (status)
1030                 goto read_super_error;
1031
1032         sb->s_magic = OCFS2_SUPER_MAGIC;
1033
1034         sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
1035                 ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
1036
1037         /* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
1038          * heartbeat=none */
1039         if (bdev_read_only(sb->s_bdev)) {
1040                 if (!(sb->s_flags & MS_RDONLY)) {
1041                         status = -EACCES;
1042                         mlog(ML_ERROR, "Readonly device detected but readonly "
1043                              "mount was not specified.\n");
1044                         goto read_super_error;
1045                 }
1046
1047                 /* You should not be able to start a local heartbeat
1048                  * on a readonly device. */
1049                 if (osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) {
1050                         status = -EROFS;
1051                         mlog(ML_ERROR, "Local heartbeat specified on readonly "
1052                              "device.\n");
1053                         goto read_super_error;
1054                 }
1055
1056                 status = ocfs2_check_journals_nolocks(osb);
1057                 if (status < 0) {
1058                         if (status == -EROFS)
1059                                 mlog(ML_ERROR, "Recovery required on readonly "
1060                                      "file system, but write access is "
1061                                      "unavailable.\n");
1062                         else
1063                                 mlog_errno(status);                     
1064                         goto read_super_error;
1065                 }
1066
1067                 ocfs2_set_ro_flag(osb, 1);
1068
1069                 printk(KERN_NOTICE "Readonly device detected. No cluster "
1070                        "services will be utilized for this mount. Recovery "
1071                        "will be skipped.\n");
1072         }
1073
1074         if (!ocfs2_is_hard_readonly(osb)) {
1075                 if (sb->s_flags & MS_RDONLY)
1076                         ocfs2_set_ro_flag(osb, 0);
1077         }
1078
1079         status = ocfs2_verify_heartbeat(osb);
1080         if (status < 0) {
1081                 mlog_errno(status);
1082                 goto read_super_error;
1083         }
1084
1085         osb->osb_debug_root = debugfs_create_dir(osb->uuid_str,
1086                                                  ocfs2_debugfs_root);
1087         if (!osb->osb_debug_root) {
1088                 status = -EINVAL;
1089                 mlog(ML_ERROR, "Unable to create per-mount debugfs root.\n");
1090                 goto read_super_error;
1091         }
1092
1093         osb->osb_ctxt = debugfs_create_file("fs_state", S_IFREG|S_IRUSR,
1094                                             osb->osb_debug_root,
1095                                             osb,
1096                                             &ocfs2_osb_debug_fops);
1097         if (!osb->osb_ctxt) {
1098                 status = -EINVAL;
1099                 mlog_errno(status);
1100                 goto read_super_error;
1101         }
1102
1103         status = ocfs2_mount_volume(sb);
1104         if (osb->root_inode)
1105                 inode = igrab(osb->root_inode);
1106
1107         if (status < 0)
1108                 goto read_super_error;
1109
1110         if (!inode) {
1111                 status = -EIO;
1112                 mlog_errno(status);
1113                 goto read_super_error;
1114         }
1115
1116         root = d_alloc_root(inode);
1117         if (!root) {
1118                 status = -ENOMEM;
1119                 mlog_errno(status);
1120                 goto read_super_error;
1121         }
1122
1123         sb->s_root = root;
1124
1125         ocfs2_complete_mount_recovery(osb);
1126
1127         if (ocfs2_mount_local(osb))
1128                 snprintf(nodestr, sizeof(nodestr), "local");
1129         else
1130                 snprintf(nodestr, sizeof(nodestr), "%u", osb->node_num);
1131
1132         printk(KERN_INFO "ocfs2: Mounting device (%s) on (node %s, slot %d) "
1133                "with %s data mode.\n",
1134                osb->dev_str, nodestr, osb->slot_num,
1135                osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK ? "writeback" :
1136                "ordered");
1137
1138         atomic_set(&osb->vol_state, VOLUME_MOUNTED);
1139         wake_up(&osb->osb_mount_event);
1140
1141         /* Now we can initialize quotas because we can afford to wait
1142          * for cluster locks recovery now. That also means that truncation
1143          * log recovery can happen but that waits for proper quota setup */
1144         if (!(sb->s_flags & MS_RDONLY)) {
1145                 status = ocfs2_enable_quotas(osb);
1146                 if (status < 0) {
1147                         /* We have to err-out specially here because
1148                          * s_root is already set */
1149                         mlog_errno(status);
1150                         atomic_set(&osb->vol_state, VOLUME_DISABLED);
1151                         wake_up(&osb->osb_mount_event);
1152                         mlog_exit(status);
1153                         return status;
1154                 }
1155         }
1156
1157         ocfs2_complete_quota_recovery(osb);
1158
1159         /* Now we wake up again for processes waiting for quotas */
1160         atomic_set(&osb->vol_state, VOLUME_MOUNTED_QUOTAS);
1161         wake_up(&osb->osb_mount_event);
1162
1163         mlog_exit(status);
1164         return status;
1165
1166 read_super_error:
1167         brelse(bh);
1168
1169         if (inode)
1170                 iput(inode);
1171
1172         if (osb) {
1173                 atomic_set(&osb->vol_state, VOLUME_DISABLED);
1174                 wake_up(&osb->osb_mount_event);
1175                 ocfs2_dismount_volume(sb, 1);
1176         }
1177
1178         mlog_exit(status);
1179         return status;
1180 }
1181
1182 static int ocfs2_get_sb(struct file_system_type *fs_type,
1183                         int flags,
1184                         const char *dev_name,
1185                         void *data,
1186                         struct vfsmount *mnt)
1187 {
1188         return get_sb_bdev(fs_type, flags, dev_name, data, ocfs2_fill_super,
1189                            mnt);
1190 }
1191
1192 static struct file_system_type ocfs2_fs_type = {
1193         .owner          = THIS_MODULE,
1194         .name           = "ocfs2",
1195         .get_sb         = ocfs2_get_sb, /* is this called when we mount
1196                                         * the fs? */
1197         .kill_sb        = kill_block_super, /* set to the generic one
1198                                              * right now, but do we
1199                                              * need to change that? */
1200         .fs_flags       = FS_REQUIRES_DEV|FS_RENAME_DOES_D_MOVE,
1201         .next           = NULL
1202 };
1203
1204 static int ocfs2_parse_options(struct super_block *sb,
1205                                char *options,
1206                                struct mount_options *mopt,
1207                                int is_remount)
1208 {
1209         int status;
1210         char *p;
1211
1212         mlog_entry("remount: %d, options: \"%s\"\n", is_remount,
1213                    options ? options : "(none)");
1214
1215         mopt->commit_interval = 0;
1216         mopt->mount_opt = 0;
1217         mopt->atime_quantum = OCFS2_DEFAULT_ATIME_QUANTUM;
1218         mopt->slot = OCFS2_INVALID_SLOT;
1219         mopt->localalloc_opt = OCFS2_DEFAULT_LOCAL_ALLOC_SIZE;
1220         mopt->cluster_stack[0] = '\0';
1221
1222         if (!options) {
1223                 status = 1;
1224                 goto bail;
1225         }
1226
1227         while ((p = strsep(&options, ",")) != NULL) {
1228                 int token, option;
1229                 substring_t args[MAX_OPT_ARGS];
1230
1231                 if (!*p)
1232                         continue;
1233
1234                 token = match_token(p, tokens, args);
1235                 switch (token) {
1236                 case Opt_hb_local:
1237                         mopt->mount_opt |= OCFS2_MOUNT_HB_LOCAL;
1238                         break;
1239                 case Opt_hb_none:
1240                         mopt->mount_opt &= ~OCFS2_MOUNT_HB_LOCAL;
1241                         break;
1242                 case Opt_barrier:
1243                         if (match_int(&args[0], &option)) {
1244                                 status = 0;
1245                                 goto bail;
1246                         }
1247                         if (option)
1248                                 mopt->mount_opt |= OCFS2_MOUNT_BARRIER;
1249                         else
1250                                 mopt->mount_opt &= ~OCFS2_MOUNT_BARRIER;
1251                         break;
1252                 case Opt_intr:
1253                         mopt->mount_opt &= ~OCFS2_MOUNT_NOINTR;
1254                         break;
1255                 case Opt_nointr:
1256                         mopt->mount_opt |= OCFS2_MOUNT_NOINTR;
1257                         break;
1258                 case Opt_err_panic:
1259                         mopt->mount_opt |= OCFS2_MOUNT_ERRORS_PANIC;
1260                         break;
1261                 case Opt_err_ro:
1262                         mopt->mount_opt &= ~OCFS2_MOUNT_ERRORS_PANIC;
1263                         break;
1264                 case Opt_data_ordered:
1265                         mopt->mount_opt &= ~OCFS2_MOUNT_DATA_WRITEBACK;
1266                         break;
1267                 case Opt_data_writeback:
1268                         mopt->mount_opt |= OCFS2_MOUNT_DATA_WRITEBACK;
1269                         break;
1270                 case Opt_user_xattr:
1271                         mopt->mount_opt &= ~OCFS2_MOUNT_NOUSERXATTR;
1272                         break;
1273                 case Opt_nouser_xattr:
1274                         mopt->mount_opt |= OCFS2_MOUNT_NOUSERXATTR;
1275                         break;
1276                 case Opt_atime_quantum:
1277                         if (match_int(&args[0], &option)) {
1278                                 status = 0;
1279                                 goto bail;
1280                         }
1281                         if (option >= 0)
1282                                 mopt->atime_quantum = option;
1283                         break;
1284                 case Opt_slot:
1285                         option = 0;
1286                         if (match_int(&args[0], &option)) {
1287                                 status = 0;
1288                                 goto bail;
1289                         }
1290                         if (option)
1291                                 mopt->slot = (s16)option;
1292                         break;
1293                 case Opt_commit:
1294                         option = 0;
1295                         if (match_int(&args[0], &option)) {
1296                                 status = 0;
1297                                 goto bail;
1298                         }
1299                         if (option < 0)
1300                                 return 0;
1301                         if (option == 0)
1302                                 option = JBD2_DEFAULT_MAX_COMMIT_AGE;
1303                         mopt->commit_interval = HZ * option;
1304                         break;
1305                 case Opt_localalloc:
1306                         option = 0;
1307                         if (match_int(&args[0], &option)) {
1308                                 status = 0;
1309                                 goto bail;
1310                         }
1311                         if (option >= 0 && (option <= ocfs2_local_alloc_size(sb) * 8))
1312                                 mopt->localalloc_opt = option;
1313                         break;
1314                 case Opt_localflocks:
1315                         /*
1316                          * Changing this during remount could race
1317                          * flock() requests, or "unbalance" existing
1318                          * ones (e.g., a lock is taken in one mode but
1319                          * dropped in the other). If users care enough
1320                          * to flip locking modes during remount, we
1321                          * could add a "local" flag to individual
1322                          * flock structures for proper tracking of
1323                          * state.
1324                          */
1325                         if (!is_remount)
1326                                 mopt->mount_opt |= OCFS2_MOUNT_LOCALFLOCKS;
1327                         break;
1328                 case Opt_stack:
1329                         /* Check both that the option we were passed
1330                          * is of the right length and that it is a proper
1331                          * string of the right length.
1332                          */
1333                         if (((args[0].to - args[0].from) !=
1334                              OCFS2_STACK_LABEL_LEN) ||
1335                             (strnlen(args[0].from,
1336                                      OCFS2_STACK_LABEL_LEN) !=
1337                              OCFS2_STACK_LABEL_LEN)) {
1338                                 mlog(ML_ERROR,
1339                                      "Invalid cluster_stack option\n");
1340                                 status = 0;
1341                                 goto bail;
1342                         }
1343                         memcpy(mopt->cluster_stack, args[0].from,
1344                                OCFS2_STACK_LABEL_LEN);
1345                         mopt->cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
1346                         break;
1347                 case Opt_inode64:
1348                         mopt->mount_opt |= OCFS2_MOUNT_INODE64;
1349                         break;
1350                 case Opt_usrquota:
1351                         /* We check only on remount, otherwise features
1352                          * aren't yet initialized. */
1353                         if (is_remount && !OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1354                             OCFS2_FEATURE_RO_COMPAT_USRQUOTA)) {
1355                                 mlog(ML_ERROR, "User quota requested but "
1356                                      "filesystem feature is not set\n");
1357                                 status = 0;
1358                                 goto bail;
1359                         }
1360                         mopt->mount_opt |= OCFS2_MOUNT_USRQUOTA;
1361                         break;
1362                 case Opt_grpquota:
1363                         if (is_remount && !OCFS2_HAS_RO_COMPAT_FEATURE(sb,
1364                             OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)) {
1365                                 mlog(ML_ERROR, "Group quota requested but "
1366                                      "filesystem feature is not set\n");
1367                                 status = 0;
1368                                 goto bail;
1369                         }
1370                         mopt->mount_opt |= OCFS2_MOUNT_GRPQUOTA;
1371                         break;
1372 #ifdef CONFIG_OCFS2_FS_POSIX_ACL
1373                 case Opt_acl:
1374                         mopt->mount_opt |= OCFS2_MOUNT_POSIX_ACL;
1375                         break;
1376                 case Opt_noacl:
1377                         mopt->mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
1378                         break;
1379 #else
1380                 case Opt_acl:
1381                 case Opt_noacl:
1382                         printk(KERN_INFO "ocfs2 (no)acl options not supported\n");
1383                         break;
1384 #endif
1385                 default:
1386                         mlog(ML_ERROR,
1387                              "Unrecognized mount option \"%s\" "
1388                              "or missing value\n", p);
1389                         status = 0;
1390                         goto bail;
1391                 }
1392         }
1393
1394         status = 1;
1395
1396 bail:
1397         mlog_exit(status);
1398         return status;
1399 }
1400
1401 static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
1402 {
1403         struct ocfs2_super *osb = OCFS2_SB(mnt->mnt_sb);
1404         unsigned long opts = osb->s_mount_opt;
1405         unsigned int local_alloc_megs;
1406
1407         if (opts & OCFS2_MOUNT_HB_LOCAL)
1408                 seq_printf(s, ",_netdev,heartbeat=local");
1409         else
1410                 seq_printf(s, ",heartbeat=none");
1411
1412         if (opts & OCFS2_MOUNT_NOINTR)
1413                 seq_printf(s, ",nointr");
1414
1415         if (opts & OCFS2_MOUNT_DATA_WRITEBACK)
1416                 seq_printf(s, ",data=writeback");
1417         else
1418                 seq_printf(s, ",data=ordered");
1419
1420         if (opts & OCFS2_MOUNT_BARRIER)
1421                 seq_printf(s, ",barrier=1");
1422
1423         if (opts & OCFS2_MOUNT_ERRORS_PANIC)
1424                 seq_printf(s, ",errors=panic");
1425         else
1426                 seq_printf(s, ",errors=remount-ro");
1427
1428         if (osb->preferred_slot != OCFS2_INVALID_SLOT)
1429                 seq_printf(s, ",preferred_slot=%d", osb->preferred_slot);
1430
1431         if (osb->s_atime_quantum != OCFS2_DEFAULT_ATIME_QUANTUM)
1432                 seq_printf(s, ",atime_quantum=%u", osb->s_atime_quantum);
1433
1434         if (osb->osb_commit_interval)
1435                 seq_printf(s, ",commit=%u",
1436                            (unsigned) (osb->osb_commit_interval / HZ));
1437
1438         local_alloc_megs = osb->local_alloc_bits >> (20 - osb->s_clustersize_bits);
1439         if (local_alloc_megs != OCFS2_DEFAULT_LOCAL_ALLOC_SIZE)
1440                 seq_printf(s, ",localalloc=%d", local_alloc_megs);
1441
1442         if (opts & OCFS2_MOUNT_LOCALFLOCKS)
1443                 seq_printf(s, ",localflocks,");
1444
1445         if (osb->osb_cluster_stack[0])
1446                 seq_printf(s, ",cluster_stack=%.*s", OCFS2_STACK_LABEL_LEN,
1447                            osb->osb_cluster_stack);
1448         if (opts & OCFS2_MOUNT_USRQUOTA)
1449                 seq_printf(s, ",usrquota");
1450         if (opts & OCFS2_MOUNT_GRPQUOTA)
1451                 seq_printf(s, ",grpquota");
1452
1453         if (opts & OCFS2_MOUNT_NOUSERXATTR)
1454                 seq_printf(s, ",nouser_xattr");
1455         else
1456                 seq_printf(s, ",user_xattr");
1457
1458         if (opts & OCFS2_MOUNT_INODE64)
1459                 seq_printf(s, ",inode64");
1460
1461 #ifdef CONFIG_OCFS2_FS_POSIX_ACL
1462         if (opts & OCFS2_MOUNT_POSIX_ACL)
1463                 seq_printf(s, ",acl");
1464         else
1465                 seq_printf(s, ",noacl");
1466 #endif
1467
1468         return 0;
1469 }
1470
1471 static int __init ocfs2_init(void)
1472 {
1473         int status;
1474
1475         mlog_entry_void();
1476
1477         ocfs2_print_version();
1478
1479         status = init_ocfs2_uptodate_cache();
1480         if (status < 0) {
1481                 mlog_errno(status);
1482                 goto leave;
1483         }
1484
1485         status = ocfs2_initialize_mem_caches();
1486         if (status < 0) {
1487                 mlog_errno(status);
1488                 goto leave;
1489         }
1490
1491         ocfs2_wq = create_singlethread_workqueue("ocfs2_wq");
1492         if (!ocfs2_wq) {
1493                 status = -ENOMEM;
1494                 goto leave;
1495         }
1496
1497         ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL);
1498         if (!ocfs2_debugfs_root) {
1499                 status = -EFAULT;
1500                 mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
1501         }
1502
1503         status = ocfs2_quota_setup();
1504         if (status)
1505                 goto leave;
1506
1507         ocfs2_set_locking_protocol();
1508
1509         status = register_quota_format(&ocfs2_quota_format);
1510 leave:
1511         if (status < 0) {
1512                 ocfs2_quota_shutdown();
1513                 ocfs2_free_mem_caches();
1514                 exit_ocfs2_uptodate_cache();
1515         }
1516
1517         mlog_exit(status);
1518
1519         if (status >= 0) {
1520                 return register_filesystem(&ocfs2_fs_type);
1521         } else
1522                 return -1;
1523 }
1524
1525 static void __exit ocfs2_exit(void)
1526 {
1527         mlog_entry_void();
1528
1529         ocfs2_quota_shutdown();
1530
1531         if (ocfs2_wq) {
1532                 flush_workqueue(ocfs2_wq);
1533                 destroy_workqueue(ocfs2_wq);
1534         }
1535
1536         unregister_quota_format(&ocfs2_quota_format);
1537
1538         debugfs_remove(ocfs2_debugfs_root);
1539
1540         ocfs2_free_mem_caches();
1541
1542         unregister_filesystem(&ocfs2_fs_type);
1543
1544         exit_ocfs2_uptodate_cache();
1545
1546         mlog_exit_void();
1547 }
1548
1549 static void ocfs2_put_super(struct super_block *sb)
1550 {
1551         mlog_entry("(0x%p)\n", sb);
1552
1553         ocfs2_sync_blockdev(sb);
1554         ocfs2_dismount_volume(sb, 0);
1555
1556         mlog_exit_void();
1557 }
1558
1559 static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
1560 {
1561         struct ocfs2_super *osb;
1562         u32 numbits, freebits;
1563         int status;
1564         struct ocfs2_dinode *bm_lock;
1565         struct buffer_head *bh = NULL;
1566         struct inode *inode = NULL;
1567
1568         mlog_entry("(%p, %p)\n", dentry->d_sb, buf);
1569
1570         osb = OCFS2_SB(dentry->d_sb);
1571
1572         inode = ocfs2_get_system_file_inode(osb,
1573                                             GLOBAL_BITMAP_SYSTEM_INODE,
1574                                             OCFS2_INVALID_SLOT);
1575         if (!inode) {
1576                 mlog(ML_ERROR, "failed to get bitmap inode\n");
1577                 status = -EIO;
1578                 goto bail;
1579         }
1580
1581         status = ocfs2_inode_lock(inode, &bh, 0);
1582         if (status < 0) {
1583                 mlog_errno(status);
1584                 goto bail;
1585         }
1586
1587         bm_lock = (struct ocfs2_dinode *) bh->b_data;
1588
1589         numbits = le32_to_cpu(bm_lock->id1.bitmap1.i_total);
1590         freebits = numbits - le32_to_cpu(bm_lock->id1.bitmap1.i_used);
1591
1592         buf->f_type = OCFS2_SUPER_MAGIC;
1593         buf->f_bsize = dentry->d_sb->s_blocksize;
1594         buf->f_namelen = OCFS2_MAX_FILENAME_LEN;
1595         buf->f_blocks = ((sector_t) numbits) *
1596                         (osb->s_clustersize >> osb->sb->s_blocksize_bits);
1597         buf->f_bfree = ((sector_t) freebits) *
1598                        (osb->s_clustersize >> osb->sb->s_blocksize_bits);
1599         buf->f_bavail = buf->f_bfree;
1600         buf->f_files = numbits;
1601         buf->f_ffree = freebits;
1602
1603         brelse(bh);
1604
1605         ocfs2_inode_unlock(inode, 0);
1606         status = 0;
1607 bail:
1608         if (inode)
1609                 iput(inode);
1610
1611         mlog_exit(status);
1612
1613         return status;
1614 }
1615
1616 static void ocfs2_inode_init_once(void *data)
1617 {
1618         struct ocfs2_inode_info *oi = data;
1619
1620         oi->ip_flags = 0;
1621         oi->ip_open_count = 0;
1622         spin_lock_init(&oi->ip_lock);
1623         ocfs2_extent_map_init(&oi->vfs_inode);
1624         INIT_LIST_HEAD(&oi->ip_io_markers);
1625         oi->ip_created_trans = 0;
1626         oi->ip_last_trans = 0;
1627         oi->ip_dir_start_lookup = 0;
1628
1629         init_rwsem(&oi->ip_alloc_sem);
1630         init_rwsem(&oi->ip_xattr_sem);
1631         mutex_init(&oi->ip_io_mutex);
1632
1633         oi->ip_blkno = 0ULL;
1634         oi->ip_clusters = 0;
1635
1636         ocfs2_lock_res_init_once(&oi->ip_rw_lockres);
1637         ocfs2_lock_res_init_once(&oi->ip_inode_lockres);
1638         ocfs2_lock_res_init_once(&oi->ip_open_lockres);
1639
1640         ocfs2_metadata_cache_init(&oi->vfs_inode);
1641
1642         inode_init_once(&oi->vfs_inode);
1643 }
1644
1645 static int ocfs2_initialize_mem_caches(void)
1646 {
1647         ocfs2_inode_cachep = kmem_cache_create("ocfs2_inode_cache",
1648                                        sizeof(struct ocfs2_inode_info),
1649                                        0,
1650                                        (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
1651                                                 SLAB_MEM_SPREAD),
1652                                        ocfs2_inode_init_once);
1653         ocfs2_dquot_cachep = kmem_cache_create("ocfs2_dquot_cache",
1654                                         sizeof(struct ocfs2_dquot),
1655                                         0,
1656                                         (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
1657                                                 SLAB_MEM_SPREAD),
1658                                         NULL);
1659         ocfs2_qf_chunk_cachep = kmem_cache_create("ocfs2_qf_chunk_cache",
1660                                         sizeof(struct ocfs2_quota_chunk),
1661                                         0,
1662                                         (SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD),
1663                                         NULL);
1664         if (!ocfs2_inode_cachep || !ocfs2_dquot_cachep ||
1665             !ocfs2_qf_chunk_cachep) {
1666                 if (ocfs2_inode_cachep)
1667                         kmem_cache_destroy(ocfs2_inode_cachep);
1668                 if (ocfs2_dquot_cachep)
1669                         kmem_cache_destroy(ocfs2_dquot_cachep);
1670                 if (ocfs2_qf_chunk_cachep)
1671                         kmem_cache_destroy(ocfs2_qf_chunk_cachep);
1672                 return -ENOMEM;
1673         }
1674
1675         return 0;
1676 }
1677
1678 static void ocfs2_free_mem_caches(void)
1679 {
1680         if (ocfs2_inode_cachep)
1681                 kmem_cache_destroy(ocfs2_inode_cachep);
1682         ocfs2_inode_cachep = NULL;
1683
1684         if (ocfs2_dquot_cachep)
1685                 kmem_cache_destroy(ocfs2_dquot_cachep);
1686         ocfs2_dquot_cachep = NULL;
1687
1688         if (ocfs2_qf_chunk_cachep)
1689                 kmem_cache_destroy(ocfs2_qf_chunk_cachep);
1690         ocfs2_qf_chunk_cachep = NULL;
1691 }
1692
1693 static int ocfs2_get_sector(struct super_block *sb,
1694                             struct buffer_head **bh,
1695                             int block,
1696                             int sect_size)
1697 {
1698         if (!sb_set_blocksize(sb, sect_size)) {
1699                 mlog(ML_ERROR, "unable to set blocksize\n");
1700                 return -EIO;
1701         }
1702
1703         *bh = sb_getblk(sb, block);
1704         if (!*bh) {
1705                 mlog_errno(-EIO);
1706                 return -EIO;
1707         }
1708         lock_buffer(*bh);
1709         if (!buffer_dirty(*bh))
1710                 clear_buffer_uptodate(*bh);
1711         unlock_buffer(*bh);
1712         ll_rw_block(READ, 1, bh);
1713         wait_on_buffer(*bh);
1714         if (!buffer_uptodate(*bh)) {
1715                 mlog_errno(-EIO);
1716                 brelse(*bh);
1717                 *bh = NULL;
1718                 return -EIO;
1719         }
1720
1721         return 0;
1722 }
1723
1724 static int ocfs2_mount_volume(struct super_block *sb)
1725 {
1726         int status = 0;
1727         int unlock_super = 0;
1728         struct ocfs2_super *osb = OCFS2_SB(sb);
1729
1730         mlog_entry_void();
1731
1732         if (ocfs2_is_hard_readonly(osb))
1733                 goto leave;
1734
1735         status = ocfs2_dlm_init(osb);
1736         if (status < 0) {
1737                 mlog_errno(status);
1738                 goto leave;
1739         }
1740
1741         status = ocfs2_super_lock(osb, 1);
1742         if (status < 0) {
1743                 mlog_errno(status);
1744                 goto leave;
1745         }
1746         unlock_super = 1;
1747
1748         /* This will load up the node map and add ourselves to it. */
1749         status = ocfs2_find_slot(osb);
1750         if (status < 0) {
1751                 mlog_errno(status);
1752                 goto leave;
1753         }
1754
1755         /* load all node-local system inodes */
1756         status = ocfs2_init_local_system_inodes(osb);
1757         if (status < 0) {
1758                 mlog_errno(status);
1759                 goto leave;
1760         }
1761
1762         status = ocfs2_check_volume(osb);
1763         if (status < 0) {
1764                 mlog_errno(status);
1765                 goto leave;
1766         }
1767
1768         status = ocfs2_truncate_log_init(osb);
1769         if (status < 0) {
1770                 mlog_errno(status);
1771                 goto leave;
1772         }
1773
1774         if (ocfs2_mount_local(osb))
1775                 goto leave;
1776
1777 leave:
1778         if (unlock_super)
1779                 ocfs2_super_unlock(osb, 1);
1780
1781         mlog_exit(status);
1782         return status;
1783 }
1784
1785 static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
1786 {
1787         int tmp, hangup_needed = 0;
1788         struct ocfs2_super *osb = NULL;
1789         char nodestr[8];
1790
1791         mlog_entry("(0x%p)\n", sb);
1792
1793         BUG_ON(!sb);
1794         osb = OCFS2_SB(sb);
1795         BUG_ON(!osb);
1796
1797         debugfs_remove(osb->osb_ctxt);
1798
1799         ocfs2_disable_quotas(osb);
1800
1801         ocfs2_shutdown_local_alloc(osb);
1802
1803         ocfs2_truncate_log_shutdown(osb);
1804
1805         /* This will disable recovery and flush any recovery work. */
1806         ocfs2_recovery_exit(osb);
1807
1808         ocfs2_journal_shutdown(osb);
1809
1810         ocfs2_sync_blockdev(sb);
1811
1812         /* No cluster connection means we've failed during mount, so skip
1813          * all the steps which depended on that to complete. */
1814         if (osb->cconn) {
1815                 tmp = ocfs2_super_lock(osb, 1);
1816                 if (tmp < 0) {
1817                         mlog_errno(tmp);
1818                         return;
1819                 }
1820         }
1821
1822         if (osb->slot_num != OCFS2_INVALID_SLOT)
1823                 ocfs2_put_slot(osb);
1824
1825         if (osb->cconn)
1826                 ocfs2_super_unlock(osb, 1);
1827
1828         ocfs2_release_system_inodes(osb);
1829
1830         /*
1831          * If we're dismounting due to mount error, mount.ocfs2 will clean
1832          * up heartbeat.  If we're a local mount, there is no heartbeat.
1833          * If we failed before we got a uuid_str yet, we can't stop
1834          * heartbeat.  Otherwise, do it.
1835          */
1836         if (!mnt_err && !ocfs2_mount_local(osb) && osb->uuid_str)
1837                 hangup_needed = 1;
1838
1839         if (osb->cconn)
1840                 ocfs2_dlm_shutdown(osb, hangup_needed);
1841
1842         debugfs_remove(osb->osb_debug_root);
1843
1844         if (hangup_needed)
1845                 ocfs2_cluster_hangup(osb->uuid_str, strlen(osb->uuid_str));
1846
1847         atomic_set(&osb->vol_state, VOLUME_DISMOUNTED);
1848
1849         if (ocfs2_mount_local(osb))
1850                 snprintf(nodestr, sizeof(nodestr), "local");
1851         else
1852                 snprintf(nodestr, sizeof(nodestr), "%u", osb->node_num);
1853
1854         printk(KERN_INFO "ocfs2: Unmounting device (%s) on (node %s)\n",
1855                osb->dev_str, nodestr);
1856
1857         ocfs2_delete_osb(osb);
1858         kfree(osb);
1859         sb->s_dev = 0;
1860         sb->s_fs_info = NULL;
1861 }
1862
1863 static int ocfs2_setup_osb_uuid(struct ocfs2_super *osb, const unsigned char *uuid,
1864                                 unsigned uuid_bytes)
1865 {
1866         int i, ret;
1867         char *ptr;
1868
1869         BUG_ON(uuid_bytes != OCFS2_VOL_UUID_LEN);
1870
1871         osb->uuid_str = kzalloc(OCFS2_VOL_UUID_LEN * 2 + 1, GFP_KERNEL);
1872         if (osb->uuid_str == NULL)
1873                 return -ENOMEM;
1874
1875         for (i = 0, ptr = osb->uuid_str; i < OCFS2_VOL_UUID_LEN; i++) {
1876                 /* print with null */
1877                 ret = snprintf(ptr, 3, "%02X", uuid[i]);
1878                 if (ret != 2) /* drop super cleans up */
1879                         return -EINVAL;
1880                 /* then only advance past the last char */
1881                 ptr += 2;
1882         }
1883
1884         return 0;
1885 }
1886
1887 static int ocfs2_initialize_super(struct super_block *sb,
1888                                   struct buffer_head *bh,
1889                                   int sector_size)
1890 {
1891         int status;
1892         int i, cbits, bbits;
1893         struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data;
1894         struct inode *inode = NULL;
1895         struct ocfs2_journal *journal;
1896         __le32 uuid_net_key;
1897         struct ocfs2_super *osb;
1898
1899         mlog_entry_void();
1900
1901         osb = kzalloc(sizeof(struct ocfs2_super), GFP_KERNEL);
1902         if (!osb) {
1903                 status = -ENOMEM;
1904                 mlog_errno(status);
1905                 goto bail;
1906         }
1907
1908         sb->s_fs_info = osb;
1909         sb->s_op = &ocfs2_sops;
1910         sb->s_export_op = &ocfs2_export_ops;
1911         sb->s_qcop = &ocfs2_quotactl_ops;
1912         sb->dq_op = &ocfs2_quota_operations;
1913         sb->s_xattr = ocfs2_xattr_handlers;
1914         sb->s_time_gran = 1;
1915         sb->s_flags |= MS_NOATIME;
1916         /* this is needed to support O_LARGEFILE */
1917         cbits = le32_to_cpu(di->id2.i_super.s_clustersize_bits);
1918         bbits = le32_to_cpu(di->id2.i_super.s_blocksize_bits);
1919         sb->s_maxbytes = ocfs2_max_file_offset(bbits, cbits);
1920
1921         osb->sb = sb;
1922         /* Save off for ocfs2_rw_direct */
1923         osb->s_sectsize_bits = blksize_bits(sector_size);
1924         BUG_ON(!osb->s_sectsize_bits);
1925
1926         spin_lock_init(&osb->dc_task_lock);
1927         init_waitqueue_head(&osb->dc_event);
1928         osb->dc_work_sequence = 0;
1929         osb->dc_wake_sequence = 0;
1930         INIT_LIST_HEAD(&osb->blocked_lock_list);
1931         osb->blocked_lock_count = 0;
1932         spin_lock_init(&osb->osb_lock);
1933         spin_lock_init(&osb->osb_xattr_lock);
1934         ocfs2_init_inode_steal_slot(osb);
1935
1936         atomic_set(&osb->alloc_stats.moves, 0);
1937         atomic_set(&osb->alloc_stats.local_data, 0);
1938         atomic_set(&osb->alloc_stats.bitmap_data, 0);
1939         atomic_set(&osb->alloc_stats.bg_allocs, 0);
1940         atomic_set(&osb->alloc_stats.bg_extends, 0);
1941
1942         ocfs2_init_node_maps(osb);
1943
1944         snprintf(osb->dev_str, sizeof(osb->dev_str), "%u,%u",
1945                  MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
1946
1947         status = ocfs2_recovery_init(osb);
1948         if (status) {
1949                 mlog(ML_ERROR, "Unable to initialize recovery state\n");
1950                 mlog_errno(status);
1951                 goto bail;
1952         }
1953
1954         init_waitqueue_head(&osb->checkpoint_event);
1955         atomic_set(&osb->needs_checkpoint, 0);
1956
1957         osb->s_atime_quantum = OCFS2_DEFAULT_ATIME_QUANTUM;
1958
1959         osb->slot_num = OCFS2_INVALID_SLOT;
1960
1961         osb->s_xattr_inline_size = le16_to_cpu(
1962                                         di->id2.i_super.s_xattr_inline_size);
1963
1964         osb->local_alloc_state = OCFS2_LA_UNUSED;
1965         osb->local_alloc_bh = NULL;
1966         INIT_DELAYED_WORK(&osb->la_enable_wq, ocfs2_la_enable_worker);
1967
1968         init_waitqueue_head(&osb->osb_mount_event);
1969
1970         osb->vol_label = kmalloc(OCFS2_MAX_VOL_LABEL_LEN, GFP_KERNEL);
1971         if (!osb->vol_label) {
1972                 mlog(ML_ERROR, "unable to alloc vol label\n");
1973                 status = -ENOMEM;
1974                 goto bail;
1975         }
1976
1977         osb->max_slots = le16_to_cpu(di->id2.i_super.s_max_slots);
1978         if (osb->max_slots > OCFS2_MAX_SLOTS || osb->max_slots == 0) {
1979                 mlog(ML_ERROR, "Invalid number of node slots (%u)\n",
1980                      osb->max_slots);
1981                 status = -EINVAL;
1982                 goto bail;
1983         }
1984         mlog(0, "max_slots for this device: %u\n", osb->max_slots);
1985
1986         osb->slot_recovery_generations =
1987                 kcalloc(osb->max_slots, sizeof(*osb->slot_recovery_generations),
1988                         GFP_KERNEL);
1989         if (!osb->slot_recovery_generations) {
1990                 status = -ENOMEM;
1991                 mlog_errno(status);
1992                 goto bail;
1993         }
1994
1995         init_waitqueue_head(&osb->osb_wipe_event);
1996         osb->osb_orphan_wipes = kcalloc(osb->max_slots,
1997                                         sizeof(*osb->osb_orphan_wipes),
1998                                         GFP_KERNEL);
1999         if (!osb->osb_orphan_wipes) {
2000                 status = -ENOMEM;
2001                 mlog_errno(status);
2002                 goto bail;
2003         }
2004
2005         osb->s_feature_compat =
2006                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_compat);
2007         osb->s_feature_ro_compat =
2008                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_ro_compat);
2009         osb->s_feature_incompat =
2010                 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_incompat);
2011
2012         if ((i = OCFS2_HAS_INCOMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_INCOMPAT_SUPP))) {
2013                 mlog(ML_ERROR, "couldn't mount because of unsupported "
2014                      "optional features (%x).\n", i);
2015                 status = -EINVAL;
2016                 goto bail;
2017         }
2018         if (!(osb->sb->s_flags & MS_RDONLY) &&
2019             (i = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP))) {
2020                 mlog(ML_ERROR, "couldn't mount RDWR because of "
2021                      "unsupported optional features (%x).\n", i);
2022                 status = -EINVAL;
2023                 goto bail;
2024         }
2025
2026         if (ocfs2_userspace_stack(osb)) {
2027                 memcpy(osb->osb_cluster_stack,
2028                        OCFS2_RAW_SB(di)->s_cluster_info.ci_stack,
2029                        OCFS2_STACK_LABEL_LEN);
2030                 osb->osb_cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
2031                 if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) {
2032                         mlog(ML_ERROR,
2033                              "couldn't mount because of an invalid "
2034                              "cluster stack label (%s) \n",
2035                              osb->osb_cluster_stack);
2036                         status = -EINVAL;
2037                         goto bail;
2038                 }
2039         } else {
2040                 /* The empty string is identical with classic tools that
2041                  * don't know about s_cluster_info. */
2042                 osb->osb_cluster_stack[0] = '\0';
2043         }
2044
2045         get_random_bytes(&osb->s_next_generation, sizeof(u32));
2046
2047         /* FIXME
2048          * This should be done in ocfs2_journal_init(), but unknown
2049          * ordering issues will cause the filesystem to crash.
2050          * If anyone wants to figure out what part of the code
2051          * refers to osb->journal before ocfs2_journal_init() is run,
2052          * be my guest.
2053          */
2054         /* initialize our journal structure */
2055
2056         journal = kzalloc(sizeof(struct ocfs2_journal), GFP_KERNEL);
2057         if (!journal) {
2058                 mlog(ML_ERROR, "unable to alloc journal\n");
2059                 status = -ENOMEM;
2060                 goto bail;
2061         }
2062         osb->journal = journal;
2063         journal->j_osb = osb;
2064
2065         atomic_set(&journal->j_num_trans, 0);
2066         init_rwsem(&journal->j_trans_barrier);
2067         init_waitqueue_head(&journal->j_checkpointed);
2068         spin_lock_init(&journal->j_lock);
2069         journal->j_trans_id = (unsigned long) 1;
2070         INIT_LIST_HEAD(&journal->j_la_cleanups);
2071         INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery);
2072         journal->j_state = OCFS2_JOURNAL_FREE;
2073
2074         INIT_WORK(&osb->dentry_lock_work, ocfs2_drop_dl_inodes);
2075         osb->dentry_lock_list = NULL;
2076
2077         /* get some pseudo constants for clustersize bits */
2078         osb->s_clustersize_bits =
2079                 le32_to_cpu(di->id2.i_super.s_clustersize_bits);
2080         osb->s_clustersize = 1 << osb->s_clustersize_bits;
2081         mlog(0, "clusterbits=%d\n", osb->s_clustersize_bits);
2082
2083         if (osb->s_clustersize < OCFS2_MIN_CLUSTERSIZE ||
2084             osb->s_clustersize > OCFS2_MAX_CLUSTERSIZE) {
2085                 mlog(ML_ERROR, "Volume has invalid cluster size (%d)\n",
2086                      osb->s_clustersize);
2087                 status = -EINVAL;
2088                 goto bail;
2089         }
2090
2091         if (ocfs2_clusters_to_blocks(osb->sb, le32_to_cpu(di->i_clusters) - 1)
2092             > (u32)~0UL) {
2093                 mlog(ML_ERROR, "Volume might try to write to blocks beyond "
2094                      "what jbd can address in 32 bits.\n");
2095                 status = -EINVAL;
2096                 goto bail;
2097         }
2098
2099         if (ocfs2_setup_osb_uuid(osb, di->id2.i_super.s_uuid,
2100                                  sizeof(di->id2.i_super.s_uuid))) {
2101                 mlog(ML_ERROR, "Out of memory trying to setup our uuid.\n");
2102                 status = -ENOMEM;
2103                 goto bail;
2104         }
2105
2106         memcpy(&uuid_net_key, di->id2.i_super.s_uuid, sizeof(uuid_net_key));
2107
2108         strncpy(osb->vol_label, di->id2.i_super.s_label, 63);
2109         osb->vol_label[63] = '\0';
2110         osb->root_blkno = le64_to_cpu(di->id2.i_super.s_root_blkno);
2111         osb->system_dir_blkno = le64_to_cpu(di->id2.i_super.s_system_dir_blkno);
2112         osb->first_cluster_group_blkno =
2113                 le64_to_cpu(di->id2.i_super.s_first_cluster_group);
2114         osb->fs_generation = le32_to_cpu(di->i_fs_generation);
2115         osb->uuid_hash = le32_to_cpu(di->id2.i_super.s_uuid_hash);
2116         mlog(0, "vol_label: %s\n", osb->vol_label);
2117         mlog(0, "uuid: %s\n", osb->uuid_str);
2118         mlog(0, "root_blkno=%llu, system_dir_blkno=%llu\n",
2119              (unsigned long long)osb->root_blkno,
2120              (unsigned long long)osb->system_dir_blkno);
2121
2122         osb->osb_dlm_debug = ocfs2_new_dlm_debug();
2123         if (!osb->osb_dlm_debug) {
2124                 status = -ENOMEM;
2125                 mlog_errno(status);
2126                 goto bail;
2127         }
2128
2129         atomic_set(&osb->vol_state, VOLUME_INIT);
2130
2131         /* load root, system_dir, and all global system inodes */
2132         status = ocfs2_init_global_system_inodes(osb);
2133         if (status < 0) {
2134                 mlog_errno(status);
2135                 goto bail;
2136         }
2137
2138         /*
2139          * global bitmap
2140          */
2141         inode = ocfs2_get_system_file_inode(osb, GLOBAL_BITMAP_SYSTEM_INODE,
2142                                             OCFS2_INVALID_SLOT);
2143         if (!inode) {
2144                 status = -EINVAL;
2145                 mlog_errno(status);
2146                 goto bail;
2147         }
2148
2149         osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
2150         iput(inode);
2151
2152         osb->bitmap_cpg = ocfs2_group_bitmap_size(sb) * 8;
2153
2154         status = ocfs2_init_slot_info(osb);
2155         if (status < 0) {
2156                 mlog_errno(status);
2157                 goto bail;
2158         }
2159
2160 bail:
2161         mlog_exit(status);
2162         return status;
2163 }
2164
2165 /*
2166  * will return: -EAGAIN if it is ok to keep searching for superblocks
2167  *              -EINVAL if there is a bad superblock
2168  *              0 on success
2169  */
2170 static int ocfs2_verify_volume(struct ocfs2_dinode *di,
2171                                struct buffer_head *bh,
2172                                u32 blksz)
2173 {
2174         int status = -EAGAIN;
2175
2176         mlog_entry_void();
2177
2178         if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
2179                    strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) {
2180                 /* We have to do a raw check of the feature here */
2181                 if (le32_to_cpu(di->id2.i_super.s_feature_incompat) &
2182                     OCFS2_FEATURE_INCOMPAT_META_ECC) {
2183                         status = ocfs2_block_check_validate(bh->b_data,
2184                                                             bh->b_size,
2185                                                             &di->i_check);
2186                         if (status)
2187                                 goto out;
2188                 }
2189                 status = -EINVAL;
2190                 if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
2191                         mlog(ML_ERROR, "found superblock with incorrect block "
2192                              "size: found %u, should be %u\n",
2193                              1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits),
2194                                blksz);
2195                 } else if (le16_to_cpu(di->id2.i_super.s_major_rev_level) !=
2196                            OCFS2_MAJOR_REV_LEVEL ||
2197                            le16_to_cpu(di->id2.i_super.s_minor_rev_level) !=
2198                            OCFS2_MINOR_REV_LEVEL) {
2199                         mlog(ML_ERROR, "found superblock with bad version: "
2200                              "found %u.%u, should be %u.%u\n",
2201                              le16_to_cpu(di->id2.i_super.s_major_rev_level),
2202                              le16_to_cpu(di->id2.i_super.s_minor_rev_level),
2203                              OCFS2_MAJOR_REV_LEVEL,
2204                              OCFS2_MINOR_REV_LEVEL);
2205                 } else if (bh->b_blocknr != le64_to_cpu(di->i_blkno)) {
2206                         mlog(ML_ERROR, "bad block number on superblock: "
2207                              "found %llu, should be %llu\n",
2208                              (unsigned long long)le64_to_cpu(di->i_blkno),
2209                              (unsigned long long)bh->b_blocknr);
2210                 } else if (le32_to_cpu(di->id2.i_super.s_clustersize_bits) < 12 ||
2211                             le32_to_cpu(di->id2.i_super.s_clustersize_bits) > 20) {
2212                         mlog(ML_ERROR, "bad cluster size found: %u\n",
2213                              1 << le32_to_cpu(di->id2.i_super.s_clustersize_bits));
2214                 } else if (!le64_to_cpu(di->id2.i_super.s_root_blkno)) {
2215                         mlog(ML_ERROR, "bad root_blkno: 0\n");
2216                 } else if (!le64_to_cpu(di->id2.i_super.s_system_dir_blkno)) {
2217                         mlog(ML_ERROR, "bad system_dir_blkno: 0\n");
2218                 } else if (le16_to_cpu(di->id2.i_super.s_max_slots) > OCFS2_MAX_SLOTS) {
2219                         mlog(ML_ERROR,
2220                              "Superblock slots found greater than file system "
2221                              "maximum: found %u, max %u\n",
2222                              le16_to_cpu(di->id2.i_super.s_max_slots),
2223                              OCFS2_MAX_SLOTS);
2224                 } else {
2225                         /* found it! */
2226                         status = 0;
2227                 }
2228         }
2229
2230 out:
2231         mlog_exit(status);
2232         return status;
2233 }
2234
2235 static int ocfs2_check_volume(struct ocfs2_super *osb)
2236 {
2237         int status;
2238         int dirty;
2239         int local;
2240         struct ocfs2_dinode *local_alloc = NULL; /* only used if we
2241                                                   * recover
2242                                                   * ourselves. */
2243
2244         mlog_entry_void();
2245
2246         /* Init our journal object. */
2247         status = ocfs2_journal_init(osb->journal, &dirty);
2248         if (status < 0) {
2249                 mlog(ML_ERROR, "Could not initialize journal!\n");
2250                 goto finally;
2251         }
2252
2253         /* If the journal was unmounted cleanly then we don't want to
2254          * recover anything. Otherwise, journal_load will do that
2255          * dirty work for us :) */
2256         if (!dirty) {
2257                 status = ocfs2_journal_wipe(osb->journal, 0);
2258                 if (status < 0) {
2259                         mlog_errno(status);
2260                         goto finally;
2261                 }
2262         } else {
2263                 mlog(ML_NOTICE, "File system was not unmounted cleanly, "
2264                      "recovering volume.\n");
2265         }
2266
2267         local = ocfs2_mount_local(osb);
2268
2269         /* will play back anything left in the journal. */
2270         status = ocfs2_journal_load(osb->journal, local, dirty);
2271         if (status < 0) {
2272                 mlog(ML_ERROR, "ocfs2 journal load failed! %d\n", status);
2273                 goto finally;
2274         }
2275
2276         if (dirty) {
2277                 /* recover my local alloc if we didn't unmount cleanly. */
2278                 status = ocfs2_begin_local_alloc_recovery(osb,
2279                                                           osb->slot_num,
2280                                                           &local_alloc);
2281                 if (status < 0) {
2282                         mlog_errno(status);
2283                         goto finally;
2284                 }
2285                 /* we complete the recovery process after we've marked
2286                  * ourselves as mounted. */
2287         }
2288
2289         mlog(0, "Journal loaded.\n");
2290
2291         status = ocfs2_load_local_alloc(osb);
2292         if (status < 0) {
2293                 mlog_errno(status);
2294                 goto finally;
2295         }
2296
2297         if (dirty) {
2298                 /* Recovery will be completed after we've mounted the
2299                  * rest of the volume. */
2300                 osb->dirty = 1;
2301                 osb->local_alloc_copy = local_alloc;
2302                 local_alloc = NULL;
2303         }
2304
2305         /* go through each journal, trylock it and if you get the
2306          * lock, and it's marked as dirty, set the bit in the recover
2307          * map and launch a recovery thread for it. */
2308         status = ocfs2_mark_dead_nodes(osb);
2309         if (status < 0)
2310                 mlog_errno(status);
2311
2312 finally:
2313         if (local_alloc)
2314                 kfree(local_alloc);
2315
2316         mlog_exit(status);
2317         return status;
2318 }
2319
2320 /*
2321  * The routine gets called from dismount or close whenever a dismount on
2322  * volume is requested and the osb open count becomes 1.
2323  * It will remove the osb from the global list and also free up all the
2324  * initialized resources and fileobject.
2325  */
2326 static void ocfs2_delete_osb(struct ocfs2_super *osb)
2327 {
2328         mlog_entry_void();
2329
2330         /* This function assumes that the caller has the main osb resource */
2331
2332         ocfs2_free_slot_info(osb);
2333
2334         kfree(osb->osb_orphan_wipes);
2335         kfree(osb->slot_recovery_generations);
2336         /* FIXME
2337          * This belongs in journal shutdown, but because we have to
2338          * allocate osb->journal at the start of ocfs2_initalize_osb(),
2339          * we free it here.
2340          */
2341         kfree(osb->journal);
2342         if (osb->local_alloc_copy)
2343                 kfree(osb->local_alloc_copy);
2344         kfree(osb->uuid_str);
2345         ocfs2_put_dlm_debug(osb->osb_dlm_debug);
2346         memset(osb, 0, sizeof(struct ocfs2_super));
2347
2348         mlog_exit_void();
2349 }
2350
2351 /* Put OCFS2 into a readonly state, or (if the user specifies it),
2352  * panic(). We do not support continue-on-error operation. */
2353 static void ocfs2_handle_error(struct super_block *sb)
2354 {
2355         struct ocfs2_super *osb = OCFS2_SB(sb);
2356
2357         if (osb->s_mount_opt & OCFS2_MOUNT_ERRORS_PANIC)
2358                 panic("OCFS2: (device %s): panic forced after error\n",
2359                       sb->s_id);
2360
2361         ocfs2_set_osb_flag(osb, OCFS2_OSB_ERROR_FS);
2362
2363         if (sb->s_flags & MS_RDONLY &&
2364             (ocfs2_is_soft_readonly(osb) ||
2365              ocfs2_is_hard_readonly(osb)))
2366                 return;
2367
2368         printk(KERN_CRIT "File system is now read-only due to the potential "
2369                "of on-disk corruption. Please run fsck.ocfs2 once the file "
2370                "system is unmounted.\n");
2371         sb->s_flags |= MS_RDONLY;
2372         ocfs2_set_ro_flag(osb, 0);
2373 }
2374
2375 static char error_buf[1024];
2376
2377 void __ocfs2_error(struct super_block *sb,
2378                    const char *function,
2379                    const char *fmt, ...)
2380 {
2381         va_list args;
2382
2383         va_start(args, fmt);
2384         vsnprintf(error_buf, sizeof(error_buf), fmt, args);
2385         va_end(args);
2386
2387         /* Not using mlog here because we want to show the actual
2388          * function the error came from. */
2389         printk(KERN_CRIT "OCFS2: ERROR (device %s): %s: %s\n",
2390                sb->s_id, function, error_buf);
2391
2392         ocfs2_handle_error(sb);
2393 }
2394
2395 /* Handle critical errors. This is intentionally more drastic than
2396  * ocfs2_handle_error, so we only use for things like journal errors,
2397  * etc. */
2398 void __ocfs2_abort(struct super_block* sb,
2399                    const char *function,
2400                    const char *fmt, ...)
2401 {
2402         va_list args;
2403
2404         va_start(args, fmt);
2405         vsnprintf(error_buf, sizeof(error_buf), fmt, args);
2406         va_end(args);
2407
2408         printk(KERN_CRIT "OCFS2: abort (device %s): %s: %s\n",
2409                sb->s_id, function, error_buf);
2410
2411         /* We don't have the cluster support yet to go straight to
2412          * hard readonly in here. Until then, we want to keep
2413          * ocfs2_abort() so that we can at least mark critical
2414          * errors.
2415          *
2416          * TODO: This should abort the journal and alert other nodes
2417          * that our slot needs recovery. */
2418
2419         /* Force a panic(). This stinks, but it's better than letting
2420          * things continue without having a proper hard readonly
2421          * here. */
2422         OCFS2_SB(sb)->s_mount_opt |= OCFS2_MOUNT_ERRORS_PANIC;
2423         ocfs2_handle_error(sb);
2424 }
2425
2426 module_init(ocfs2_init);
2427 module_exit(ocfs2_exit);