ce5353ac8f3dfdde8ff402371ae9780f72e8e3d7
[powerpc.git] / fs / gfs2 / super.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9
10 #include <linux/sched.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/crc32.h>
16 #include <linux/gfs2_ondisk.h>
17 #include <linux/bio.h>
18 #include <linux/lm_interface.h>
19
20 #include "gfs2.h"
21 #include "incore.h"
22 #include "bmap.h"
23 #include "dir.h"
24 #include "glock.h"
25 #include "glops.h"
26 #include "inode.h"
27 #include "log.h"
28 #include "meta_io.h"
29 #include "quota.h"
30 #include "recovery.h"
31 #include "rgrp.h"
32 #include "super.h"
33 #include "trans.h"
34 #include "util.h"
35
36 static const u32 gfs2_old_fs_formats[] = {
37         0
38 };
39
40 static const u32 gfs2_old_multihost_formats[] = {
41         0
42 };
43
44 /**
45  * gfs2_tune_init - Fill a gfs2_tune structure with default values
46  * @gt: tune
47  *
48  */
49
50 void gfs2_tune_init(struct gfs2_tune *gt)
51 {
52         spin_lock_init(&gt->gt_spin);
53
54         gt->gt_ilimit = 100;
55         gt->gt_ilimit_tries = 3;
56         gt->gt_ilimit_min = 1;
57         gt->gt_demote_secs = 300;
58         gt->gt_incore_log_blocks = 1024;
59         gt->gt_log_flush_secs = 60;
60         gt->gt_jindex_refresh_secs = 60;
61         gt->gt_scand_secs = 15;
62         gt->gt_recoverd_secs = 60;
63         gt->gt_logd_secs = 1;
64         gt->gt_quotad_secs = 5;
65         gt->gt_quota_simul_sync = 64;
66         gt->gt_quota_warn_period = 10;
67         gt->gt_quota_scale_num = 1;
68         gt->gt_quota_scale_den = 1;
69         gt->gt_quota_cache_secs = 300;
70         gt->gt_quota_quantum = 60;
71         gt->gt_atime_quantum = 3600;
72         gt->gt_new_files_jdata = 0;
73         gt->gt_new_files_directio = 0;
74         gt->gt_max_readahead = 1 << 18;
75         gt->gt_lockdump_size = 131072;
76         gt->gt_stall_secs = 600;
77         gt->gt_complain_secs = 10;
78         gt->gt_reclaim_limit = 5000;
79         gt->gt_entries_per_readdir = 32;
80         gt->gt_statfs_quantum = 30;
81         gt->gt_statfs_slow = 0;
82 }
83
84 /**
85  * gfs2_check_sb - Check superblock
86  * @sdp: the filesystem
87  * @sb: The superblock
88  * @silent: Don't print a message if the check fails
89  *
90  * Checks the version code of the FS is one that we understand how to
91  * read and that the sizes of the various on-disk structures have not
92  * changed.
93  */
94
95 int gfs2_check_sb(struct gfs2_sbd *sdp, struct gfs2_sb_host *sb, int silent)
96 {
97         unsigned int x;
98
99         if (sb->sb_header.mh_magic != GFS2_MAGIC ||
100             sb->sb_header.mh_type != GFS2_METATYPE_SB) {
101                 if (!silent)
102                         printk(KERN_WARNING "GFS2: not a GFS2 filesystem\n");
103                 return -EINVAL;
104         }
105
106         /*  If format numbers match exactly, we're done.  */
107
108         if (sb->sb_fs_format == GFS2_FORMAT_FS &&
109             sb->sb_multihost_format == GFS2_FORMAT_MULTI)
110                 return 0;
111
112         if (sb->sb_fs_format != GFS2_FORMAT_FS) {
113                 for (x = 0; gfs2_old_fs_formats[x]; x++)
114                         if (gfs2_old_fs_formats[x] == sb->sb_fs_format)
115                                 break;
116
117                 if (!gfs2_old_fs_formats[x]) {
118                         printk(KERN_WARNING
119                                "GFS2: code version (%u, %u) is incompatible "
120                                "with ondisk format (%u, %u)\n",
121                                GFS2_FORMAT_FS, GFS2_FORMAT_MULTI,
122                                sb->sb_fs_format, sb->sb_multihost_format);
123                         printk(KERN_WARNING
124                                "GFS2: I don't know how to upgrade this FS\n");
125                         return -EINVAL;
126                 }
127         }
128
129         if (sb->sb_multihost_format != GFS2_FORMAT_MULTI) {
130                 for (x = 0; gfs2_old_multihost_formats[x]; x++)
131                         if (gfs2_old_multihost_formats[x] ==
132                             sb->sb_multihost_format)
133                                 break;
134
135                 if (!gfs2_old_multihost_formats[x]) {
136                         printk(KERN_WARNING
137                                "GFS2: code version (%u, %u) is incompatible "
138                                "with ondisk format (%u, %u)\n",
139                                GFS2_FORMAT_FS, GFS2_FORMAT_MULTI,
140                                sb->sb_fs_format, sb->sb_multihost_format);
141                         printk(KERN_WARNING
142                                "GFS2: I don't know how to upgrade this FS\n");
143                         return -EINVAL;
144                 }
145         }
146
147         if (!sdp->sd_args.ar_upgrade) {
148                 printk(KERN_WARNING
149                        "GFS2: code version (%u, %u) is incompatible "
150                        "with ondisk format (%u, %u)\n",
151                        GFS2_FORMAT_FS, GFS2_FORMAT_MULTI,
152                        sb->sb_fs_format, sb->sb_multihost_format);
153                 printk(KERN_INFO
154                        "GFS2: Use the \"upgrade\" mount option to upgrade "
155                        "the FS\n");
156                 printk(KERN_INFO "GFS2: See the manual for more details\n");
157                 return -EINVAL;
158         }
159
160         return 0;
161 }
162
163
164 static int end_bio_io_page(struct bio *bio, unsigned int bytes_done, int error)
165 {
166         struct page *page = bio->bi_private;
167         if (bio->bi_size)
168                 return 1;
169
170         if (!error)
171                 SetPageUptodate(page);
172         else
173                 printk(KERN_WARNING "gfs2: error %d reading superblock\n", error);
174         unlock_page(page);
175         return 0;
176 }
177
178 /**
179  * gfs2_read_super - Read the gfs2 super block from disk
180  * @sb: The VFS super block
181  * @sector: The location of the super block
182  *
183  * This uses the bio functions to read the super block from disk
184  * because we want to be 100% sure that we never read cached data.
185  * A super block is read twice only during each GFS2 mount and is
186  * never written to by the filesystem. The first time its read no
187  * locks are held, and the only details which are looked at are those
188  * relating to the locking protocol. Once locking is up and working,
189  * the sb is read again under the lock to establish the location of
190  * the master directory (contains pointers to journals etc) and the
191  * root directory.
192  *
193  * Returns: A page containing the sb or NULL
194  */
195
196 struct page *gfs2_read_super(struct super_block *sb, sector_t sector)
197 {
198         struct page *page;
199         struct bio *bio;
200
201         page = alloc_page(GFP_KERNEL);
202         if (unlikely(!page))
203                 return NULL;
204
205         ClearPageUptodate(page);
206         ClearPageDirty(page);
207         lock_page(page);
208
209         bio = bio_alloc(GFP_KERNEL, 1);
210         if (unlikely(!bio)) {
211                 __free_page(page);
212                 return NULL;
213         }
214
215         bio->bi_sector = sector * (sb->s_blocksize >> 9);
216         bio->bi_bdev = sb->s_bdev;
217         bio_add_page(bio, page, PAGE_SIZE, 0);
218
219         bio->bi_end_io = end_bio_io_page;
220         bio->bi_private = page;
221         submit_bio(READ_SYNC | (1 << BIO_RW_META), bio);
222         wait_on_page_locked(page);
223         bio_put(bio);
224         if (!PageUptodate(page)) {
225                 __free_page(page);
226                 return NULL;
227         }
228         return page;
229 }
230
231 /**
232  * gfs2_read_sb - Read super block
233  * @sdp: The GFS2 superblock
234  * @gl: the glock for the superblock (assumed to be held)
235  * @silent: Don't print message if mount fails
236  *
237  */
238
239 int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent)
240 {
241         u32 hash_blocks, ind_blocks, leaf_blocks;
242         u32 tmp_blocks;
243         unsigned int x;
244         int error;
245         struct page *page;
246         char *sb;
247
248         page = gfs2_read_super(sdp->sd_vfs, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift);
249         if (!page) {
250                 if (!silent)
251                         fs_err(sdp, "can't read superblock\n");
252                 return -EIO;
253         }
254         sb = kmap(page);
255         gfs2_sb_in(&sdp->sd_sb, sb);
256         kunmap(page);
257         __free_page(page);
258
259         error = gfs2_check_sb(sdp, &sdp->sd_sb, silent);
260         if (error)
261                 return error;
262
263         sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift -
264                                GFS2_BASIC_BLOCK_SHIFT;
265         sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift;
266         sdp->sd_diptrs = (sdp->sd_sb.sb_bsize -
267                           sizeof(struct gfs2_dinode)) / sizeof(u64);
268         sdp->sd_inptrs = (sdp->sd_sb.sb_bsize -
269                           sizeof(struct gfs2_meta_header)) / sizeof(u64);
270         sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
271         sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2;
272         sdp->sd_hash_bsize_shift = sdp->sd_sb.sb_bsize_shift - 1;
273         sdp->sd_hash_ptrs = sdp->sd_hash_bsize / sizeof(u64);
274         sdp->sd_qc_per_block = (sdp->sd_sb.sb_bsize -
275                                 sizeof(struct gfs2_meta_header)) /
276                                 sizeof(struct gfs2_quota_change);
277
278         /* Compute maximum reservation required to add a entry to a directory */
279
280         hash_blocks = DIV_ROUND_UP(sizeof(u64) * (1 << GFS2_DIR_MAX_DEPTH),
281                              sdp->sd_jbsize);
282
283         ind_blocks = 0;
284         for (tmp_blocks = hash_blocks; tmp_blocks > sdp->sd_diptrs;) {
285                 tmp_blocks = DIV_ROUND_UP(tmp_blocks, sdp->sd_inptrs);
286                 ind_blocks += tmp_blocks;
287         }
288
289         leaf_blocks = 2 + GFS2_DIR_MAX_DEPTH;
290
291         sdp->sd_max_dirres = hash_blocks + ind_blocks + leaf_blocks;
292
293         sdp->sd_heightsize[0] = sdp->sd_sb.sb_bsize -
294                                 sizeof(struct gfs2_dinode);
295         sdp->sd_heightsize[1] = sdp->sd_sb.sb_bsize * sdp->sd_diptrs;
296         for (x = 2;; x++) {
297                 u64 space, d;
298                 u32 m;
299
300                 space = sdp->sd_heightsize[x - 1] * sdp->sd_inptrs;
301                 d = space;
302                 m = do_div(d, sdp->sd_inptrs);
303
304                 if (d != sdp->sd_heightsize[x - 1] || m)
305                         break;
306                 sdp->sd_heightsize[x] = space;
307         }
308         sdp->sd_max_height = x;
309         gfs2_assert(sdp, sdp->sd_max_height <= GFS2_MAX_META_HEIGHT);
310
311         sdp->sd_jheightsize[0] = sdp->sd_sb.sb_bsize -
312                                  sizeof(struct gfs2_dinode);
313         sdp->sd_jheightsize[1] = sdp->sd_jbsize * sdp->sd_diptrs;
314         for (x = 2;; x++) {
315                 u64 space, d;
316                 u32 m;
317
318                 space = sdp->sd_jheightsize[x - 1] * sdp->sd_inptrs;
319                 d = space;
320                 m = do_div(d, sdp->sd_inptrs);
321
322                 if (d != sdp->sd_jheightsize[x - 1] || m)
323                         break;
324                 sdp->sd_jheightsize[x] = space;
325         }
326         sdp->sd_max_jheight = x;
327         gfs2_assert(sdp, sdp->sd_max_jheight <= GFS2_MAX_META_HEIGHT);
328
329         return 0;
330 }
331
332 /**
333  * gfs2_jindex_hold - Grab a lock on the jindex
334  * @sdp: The GFS2 superblock
335  * @ji_gh: the holder for the jindex glock
336  *
337  * This is very similar to the gfs2_rindex_hold() function, except that
338  * in general we hold the jindex lock for longer periods of time and
339  * we grab it far less frequently (in general) then the rgrp lock.
340  *
341  * Returns: errno
342  */
343
344 int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh)
345 {
346         struct gfs2_inode *dip = GFS2_I(sdp->sd_jindex);
347         struct qstr name;
348         char buf[20];
349         struct gfs2_jdesc *jd;
350         int error;
351
352         name.name = buf;
353
354         mutex_lock(&sdp->sd_jindex_mutex);
355
356         for (;;) {
357                 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED,
358                                            GL_LOCAL_EXCL, ji_gh);
359                 if (error)
360                         break;
361
362                 name.len = sprintf(buf, "journal%u", sdp->sd_journals);
363                 name.hash = gfs2_disk_hash(name.name, name.len);
364
365                 error = gfs2_dir_search(sdp->sd_jindex, &name, NULL, NULL);
366                 if (error == -ENOENT) {
367                         error = 0;
368                         break;
369                 }
370
371                 gfs2_glock_dq_uninit(ji_gh);
372
373                 if (error)
374                         break;
375
376                 error = -ENOMEM;
377                 jd = kzalloc(sizeof(struct gfs2_jdesc), GFP_KERNEL);
378                 if (!jd)
379                         break;
380
381                 jd->jd_inode = gfs2_lookupi(sdp->sd_jindex, &name, 1, NULL);
382                 if (!jd->jd_inode || IS_ERR(jd->jd_inode)) {
383                         if (!jd->jd_inode)
384                                 error = -ENOENT;
385                         else
386                                 error = PTR_ERR(jd->jd_inode);
387                         kfree(jd);
388                         break;
389                 }
390
391                 spin_lock(&sdp->sd_jindex_spin);
392                 jd->jd_jid = sdp->sd_journals++;
393                 list_add_tail(&jd->jd_list, &sdp->sd_jindex_list);
394                 spin_unlock(&sdp->sd_jindex_spin);
395         }
396
397         mutex_unlock(&sdp->sd_jindex_mutex);
398
399         return error;
400 }
401
402 /**
403  * gfs2_jindex_free - Clear all the journal index information
404  * @sdp: The GFS2 superblock
405  *
406  */
407
408 void gfs2_jindex_free(struct gfs2_sbd *sdp)
409 {
410         struct list_head list;
411         struct gfs2_jdesc *jd;
412
413         spin_lock(&sdp->sd_jindex_spin);
414         list_add(&list, &sdp->sd_jindex_list);
415         list_del_init(&sdp->sd_jindex_list);
416         sdp->sd_journals = 0;
417         spin_unlock(&sdp->sd_jindex_spin);
418
419         while (!list_empty(&list)) {
420                 jd = list_entry(list.next, struct gfs2_jdesc, jd_list);
421                 list_del(&jd->jd_list);
422                 iput(jd->jd_inode);
423                 kfree(jd);
424         }
425 }
426
427 static struct gfs2_jdesc *jdesc_find_i(struct list_head *head, unsigned int jid)
428 {
429         struct gfs2_jdesc *jd;
430         int found = 0;
431
432         list_for_each_entry(jd, head, jd_list) {
433                 if (jd->jd_jid == jid) {
434                         found = 1;
435                         break;
436                 }
437         }
438
439         if (!found)
440                 jd = NULL;
441
442         return jd;
443 }
444
445 struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid)
446 {
447         struct gfs2_jdesc *jd;
448
449         spin_lock(&sdp->sd_jindex_spin);
450         jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
451         spin_unlock(&sdp->sd_jindex_spin);
452
453         return jd;
454 }
455
456 void gfs2_jdesc_make_dirty(struct gfs2_sbd *sdp, unsigned int jid)
457 {
458         struct gfs2_jdesc *jd;
459
460         spin_lock(&sdp->sd_jindex_spin);
461         jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
462         if (jd)
463                 jd->jd_dirty = 1;
464         spin_unlock(&sdp->sd_jindex_spin);
465 }
466
467 struct gfs2_jdesc *gfs2_jdesc_find_dirty(struct gfs2_sbd *sdp)
468 {
469         struct gfs2_jdesc *jd;
470         int found = 0;
471
472         spin_lock(&sdp->sd_jindex_spin);
473
474         list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
475                 if (jd->jd_dirty) {
476                         jd->jd_dirty = 0;
477                         found = 1;
478                         break;
479                 }
480         }
481         spin_unlock(&sdp->sd_jindex_spin);
482
483         if (!found)
484                 jd = NULL;
485
486         return jd;
487 }
488
489 int gfs2_jdesc_check(struct gfs2_jdesc *jd)
490 {
491         struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
492         struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode);
493         int ar;
494         int error;
495
496         if (ip->i_di.di_size < (8 << 20) || ip->i_di.di_size > (1 << 30) ||
497             (ip->i_di.di_size & (sdp->sd_sb.sb_bsize - 1))) {
498                 gfs2_consist_inode(ip);
499                 return -EIO;
500         }
501         jd->jd_blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift;
502
503         error = gfs2_write_alloc_required(ip, 0, ip->i_di.di_size, &ar);
504         if (!error && ar) {
505                 gfs2_consist_inode(ip);
506                 error = -EIO;
507         }
508
509         return error;
510 }
511
512 /**
513  * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
514  * @sdp: the filesystem
515  *
516  * Returns: errno
517  */
518
519 int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
520 {
521         struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode);
522         struct gfs2_glock *j_gl = ip->i_gl;
523         struct gfs2_holder t_gh;
524         struct gfs2_log_header_host head;
525         int error;
526
527         error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED,
528                                    GL_LOCAL_EXCL, &t_gh);
529         if (error)
530                 return error;
531
532         gfs2_meta_cache_flush(ip);
533         j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
534
535         error = gfs2_find_jhead(sdp->sd_jdesc, &head);
536         if (error)
537                 goto fail;
538
539         if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
540                 gfs2_consist(sdp);
541                 error = -EIO;
542                 goto fail;
543         }
544
545         /*  Initialize some head of the log stuff  */
546         sdp->sd_log_sequence = head.lh_sequence + 1;
547         gfs2_log_pointers_init(sdp, head.lh_blkno);
548
549         error = gfs2_quota_init(sdp);
550         if (error)
551                 goto fail;
552
553         set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
554
555         gfs2_glock_dq_uninit(&t_gh);
556
557         return 0;
558
559 fail:
560         t_gh.gh_flags |= GL_NOCACHE;
561         gfs2_glock_dq_uninit(&t_gh);
562
563         return error;
564 }
565
566 /**
567  * gfs2_make_fs_ro - Turn a Read-Write FS into a Read-Only one
568  * @sdp: the filesystem
569  *
570  * Returns: errno
571  */
572
573 int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
574 {
575         struct gfs2_holder t_gh;
576         int error;
577
578         gfs2_quota_sync(sdp);
579         gfs2_statfs_sync(sdp);
580
581         error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED,
582                                 GL_LOCAL_EXCL | GL_NOCACHE,
583                                 &t_gh);
584         if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
585                 return error;
586
587         gfs2_meta_syncfs(sdp);
588         gfs2_log_shutdown(sdp);
589
590         clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
591
592         if (t_gh.gh_gl)
593                 gfs2_glock_dq_uninit(&t_gh);
594
595         gfs2_quota_cleanup(sdp);
596
597         return error;
598 }
599
600 int gfs2_statfs_init(struct gfs2_sbd *sdp)
601 {
602         struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
603         struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
604         struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
605         struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
606         struct buffer_head *m_bh, *l_bh;
607         struct gfs2_holder gh;
608         int error;
609
610         error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
611                                    &gh);
612         if (error)
613                 return error;
614
615         error = gfs2_meta_inode_buffer(m_ip, &m_bh);
616         if (error)
617                 goto out;
618
619         if (sdp->sd_args.ar_spectator) {
620                 spin_lock(&sdp->sd_statfs_spin);
621                 gfs2_statfs_change_in(m_sc, m_bh->b_data +
622                                       sizeof(struct gfs2_dinode));
623                 spin_unlock(&sdp->sd_statfs_spin);
624         } else {
625                 error = gfs2_meta_inode_buffer(l_ip, &l_bh);
626                 if (error)
627                         goto out_m_bh;
628
629                 spin_lock(&sdp->sd_statfs_spin);
630                 gfs2_statfs_change_in(m_sc, m_bh->b_data +
631                                       sizeof(struct gfs2_dinode));
632                 gfs2_statfs_change_in(l_sc, l_bh->b_data +
633                                       sizeof(struct gfs2_dinode));
634                 spin_unlock(&sdp->sd_statfs_spin);
635
636                 brelse(l_bh);
637         }
638
639 out_m_bh:
640         brelse(m_bh);
641 out:
642         gfs2_glock_dq_uninit(&gh);
643         return 0;
644 }
645
646 void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
647                         s64 dinodes)
648 {
649         struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
650         struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
651         struct buffer_head *l_bh;
652         int error;
653
654         error = gfs2_meta_inode_buffer(l_ip, &l_bh);
655         if (error)
656                 return;
657
658         mutex_lock(&sdp->sd_statfs_mutex);
659         gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
660         mutex_unlock(&sdp->sd_statfs_mutex);
661
662         spin_lock(&sdp->sd_statfs_spin);
663         l_sc->sc_total += total;
664         l_sc->sc_free += free;
665         l_sc->sc_dinodes += dinodes;
666         gfs2_statfs_change_out(l_sc, l_bh->b_data + sizeof(struct gfs2_dinode));
667         spin_unlock(&sdp->sd_statfs_spin);
668
669         brelse(l_bh);
670 }
671
672 int gfs2_statfs_sync(struct gfs2_sbd *sdp)
673 {
674         struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
675         struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
676         struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
677         struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
678         struct gfs2_holder gh;
679         struct buffer_head *m_bh, *l_bh;
680         int error;
681
682         error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
683                                    &gh);
684         if (error)
685                 return error;
686
687         error = gfs2_meta_inode_buffer(m_ip, &m_bh);
688         if (error)
689                 goto out;
690
691         spin_lock(&sdp->sd_statfs_spin);
692         gfs2_statfs_change_in(m_sc, m_bh->b_data +
693                               sizeof(struct gfs2_dinode));
694         if (!l_sc->sc_total && !l_sc->sc_free && !l_sc->sc_dinodes) {
695                 spin_unlock(&sdp->sd_statfs_spin);
696                 goto out_bh;
697         }
698         spin_unlock(&sdp->sd_statfs_spin);
699
700         error = gfs2_meta_inode_buffer(l_ip, &l_bh);
701         if (error)
702                 goto out_bh;
703
704         error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
705         if (error)
706                 goto out_bh2;
707
708         mutex_lock(&sdp->sd_statfs_mutex);
709         gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
710         mutex_unlock(&sdp->sd_statfs_mutex);
711
712         spin_lock(&sdp->sd_statfs_spin);
713         m_sc->sc_total += l_sc->sc_total;
714         m_sc->sc_free += l_sc->sc_free;
715         m_sc->sc_dinodes += l_sc->sc_dinodes;
716         memset(l_sc, 0, sizeof(struct gfs2_statfs_change));
717         memset(l_bh->b_data + sizeof(struct gfs2_dinode),
718                0, sizeof(struct gfs2_statfs_change));
719         spin_unlock(&sdp->sd_statfs_spin);
720
721         gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
722         gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
723
724         gfs2_trans_end(sdp);
725
726 out_bh2:
727         brelse(l_bh);
728 out_bh:
729         brelse(m_bh);
730 out:
731         gfs2_glock_dq_uninit(&gh);
732         return error;
733 }
734
735 /**
736  * gfs2_statfs_i - Do a statfs
737  * @sdp: the filesystem
738  * @sg: the sg structure
739  *
740  * Returns: errno
741  */
742
743 int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
744 {
745         struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
746         struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
747
748         spin_lock(&sdp->sd_statfs_spin);
749
750         *sc = *m_sc;
751         sc->sc_total += l_sc->sc_total;
752         sc->sc_free += l_sc->sc_free;
753         sc->sc_dinodes += l_sc->sc_dinodes;
754
755         spin_unlock(&sdp->sd_statfs_spin);
756
757         if (sc->sc_free < 0)
758                 sc->sc_free = 0;
759         if (sc->sc_free > sc->sc_total)
760                 sc->sc_free = sc->sc_total;
761         if (sc->sc_dinodes < 0)
762                 sc->sc_dinodes = 0;
763
764         return 0;
765 }
766
767 /**
768  * statfs_fill - fill in the sg for a given RG
769  * @rgd: the RG
770  * @sc: the sc structure
771  *
772  * Returns: 0 on success, -ESTALE if the LVB is invalid
773  */
774
775 static int statfs_slow_fill(struct gfs2_rgrpd *rgd,
776                             struct gfs2_statfs_change_host *sc)
777 {
778         gfs2_rgrp_verify(rgd);
779         sc->sc_total += rgd->rd_ri.ri_data;
780         sc->sc_free += rgd->rd_rg.rg_free;
781         sc->sc_dinodes += rgd->rd_rg.rg_dinodes;
782         return 0;
783 }
784
785 /**
786  * gfs2_statfs_slow - Stat a filesystem using asynchronous locking
787  * @sdp: the filesystem
788  * @sc: the sc info that will be returned
789  *
790  * Any error (other than a signal) will cause this routine to fall back
791  * to the synchronous version.
792  *
793  * FIXME: This really shouldn't busy wait like this.
794  *
795  * Returns: errno
796  */
797
798 int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
799 {
800         struct gfs2_holder ri_gh;
801         struct gfs2_rgrpd *rgd_next;
802         struct gfs2_holder *gha, *gh;
803         unsigned int slots = 64;
804         unsigned int x;
805         int done;
806         int error = 0, err;
807
808         memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
809         gha = kcalloc(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
810         if (!gha)
811                 return -ENOMEM;
812
813         error = gfs2_rindex_hold(sdp, &ri_gh);
814         if (error)
815                 goto out;
816
817         rgd_next = gfs2_rgrpd_get_first(sdp);
818
819         for (;;) {
820                 done = 1;
821
822                 for (x = 0; x < slots; x++) {
823                         gh = gha + x;
824
825                         if (gh->gh_gl && gfs2_glock_poll(gh)) {
826                                 err = gfs2_glock_wait(gh);
827                                 if (err) {
828                                         gfs2_holder_uninit(gh);
829                                         error = err;
830                                 } else {
831                                         if (!error)
832                                                 error = statfs_slow_fill(
833                                                         gh->gh_gl->gl_object, sc);
834                                         gfs2_glock_dq_uninit(gh);
835                                 }
836                         }
837
838                         if (gh->gh_gl)
839                                 done = 0;
840                         else if (rgd_next && !error) {
841                                 error = gfs2_glock_nq_init(rgd_next->rd_gl,
842                                                            LM_ST_SHARED,
843                                                            GL_ASYNC,
844                                                            gh);
845                                 rgd_next = gfs2_rgrpd_get_next(rgd_next);
846                                 done = 0;
847                         }
848
849                         if (signal_pending(current))
850                                 error = -ERESTARTSYS;
851                 }
852
853                 if (done)
854                         break;
855
856                 yield();
857         }
858
859         gfs2_glock_dq_uninit(&ri_gh);
860
861 out:
862         kfree(gha);
863         return error;
864 }
865
866 struct lfcc {
867         struct list_head list;
868         struct gfs2_holder gh;
869 };
870
871 /**
872  * gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all
873  *                            journals are clean
874  * @sdp: the file system
875  * @state: the state to put the transaction lock into
876  * @t_gh: the hold on the transaction lock
877  *
878  * Returns: errno
879  */
880
881 static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp,
882                                     struct gfs2_holder *t_gh)
883 {
884         struct gfs2_inode *ip;
885         struct gfs2_holder ji_gh;
886         struct gfs2_jdesc *jd;
887         struct lfcc *lfcc;
888         LIST_HEAD(list);
889         struct gfs2_log_header_host lh;
890         int error;
891
892         error = gfs2_jindex_hold(sdp, &ji_gh);
893         if (error)
894                 return error;
895
896         list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
897                 lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL);
898                 if (!lfcc) {
899                         error = -ENOMEM;
900                         goto out;
901                 }
902                 ip = GFS2_I(jd->jd_inode);
903                 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &lfcc->gh);
904                 if (error) {
905                         kfree(lfcc);
906                         goto out;
907                 }
908                 list_add(&lfcc->list, &list);
909         }
910
911         error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_DEFERRED,
912                                LM_FLAG_PRIORITY | GL_NOCACHE,
913                                t_gh);
914
915         list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
916                 error = gfs2_jdesc_check(jd);
917                 if (error)
918                         break;
919                 error = gfs2_find_jhead(jd, &lh);
920                 if (error)
921                         break;
922                 if (!(lh.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
923                         error = -EBUSY;
924                         break;
925                 }
926         }
927
928         if (error)
929                 gfs2_glock_dq_uninit(t_gh);
930
931 out:
932         while (!list_empty(&list)) {
933                 lfcc = list_entry(list.next, struct lfcc, list);
934                 list_del(&lfcc->list);
935                 gfs2_glock_dq_uninit(&lfcc->gh);
936                 kfree(lfcc);
937         }
938         gfs2_glock_dq_uninit(&ji_gh);
939         return error;
940 }
941
942 /**
943  * gfs2_freeze_fs - freezes the file system
944  * @sdp: the file system
945  *
946  * This function flushes data and meta data for all machines by
947  * aquiring the transaction log exclusively.  All journals are
948  * ensured to be in a clean state as well.
949  *
950  * Returns: errno
951  */
952
953 int gfs2_freeze_fs(struct gfs2_sbd *sdp)
954 {
955         int error = 0;
956
957         mutex_lock(&sdp->sd_freeze_lock);
958
959         if (!sdp->sd_freeze_count++) {
960                 error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
961                 if (error)
962                         sdp->sd_freeze_count--;
963         }
964
965         mutex_unlock(&sdp->sd_freeze_lock);
966
967         return error;
968 }
969
970 /**
971  * gfs2_unfreeze_fs - unfreezes the file system
972  * @sdp: the file system
973  *
974  * This function allows the file system to proceed by unlocking
975  * the exclusively held transaction lock.  Other GFS2 nodes are
976  * now free to acquire the lock shared and go on with their lives.
977  *
978  */
979
980 void gfs2_unfreeze_fs(struct gfs2_sbd *sdp)
981 {
982         mutex_lock(&sdp->sd_freeze_lock);
983
984         if (sdp->sd_freeze_count && !--sdp->sd_freeze_count)
985                 gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
986
987         mutex_unlock(&sdp->sd_freeze_lock);
988 }
989