2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
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.
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>
36 static const u32 gfs2_old_fs_formats
[] = {
40 static const u32 gfs2_old_multihost_formats
[] = {
45 * gfs2_tune_init - Fill a gfs2_tune structure with default values
50 void gfs2_tune_init(struct gfs2_tune
*gt
)
52 spin_lock_init(>
->gt_spin
);
54 gt
->gt_demote_secs
= 300;
55 gt
->gt_incore_log_blocks
= 1024;
56 gt
->gt_log_flush_secs
= 60;
57 gt
->gt_recoverd_secs
= 60;
59 gt
->gt_quotad_secs
= 5;
60 gt
->gt_quota_simul_sync
= 64;
61 gt
->gt_quota_warn_period
= 10;
62 gt
->gt_quota_scale_num
= 1;
63 gt
->gt_quota_scale_den
= 1;
64 gt
->gt_quota_cache_secs
= 300;
65 gt
->gt_quota_quantum
= 60;
66 gt
->gt_atime_quantum
= 3600;
67 gt
->gt_new_files_jdata
= 0;
68 gt
->gt_max_readahead
= 1 << 18;
69 gt
->gt_stall_secs
= 600;
70 gt
->gt_complain_secs
= 10;
71 gt
->gt_statfs_quantum
= 30;
72 gt
->gt_statfs_slow
= 0;
76 * gfs2_check_sb - Check superblock
77 * @sdp: the filesystem
79 * @silent: Don't print a message if the check fails
81 * Checks the version code of the FS is one that we understand how to
82 * read and that the sizes of the various on-disk structures have not
86 int gfs2_check_sb(struct gfs2_sbd
*sdp
, struct gfs2_sb_host
*sb
, int silent
)
90 if (sb
->sb_magic
!= GFS2_MAGIC
||
91 sb
->sb_type
!= GFS2_METATYPE_SB
) {
93 printk(KERN_WARNING
"GFS2: not a GFS2 filesystem\n");
97 /* If format numbers match exactly, we're done. */
99 if (sb
->sb_fs_format
== GFS2_FORMAT_FS
&&
100 sb
->sb_multihost_format
== GFS2_FORMAT_MULTI
)
103 if (sb
->sb_fs_format
!= GFS2_FORMAT_FS
) {
104 for (x
= 0; gfs2_old_fs_formats
[x
]; x
++)
105 if (gfs2_old_fs_formats
[x
] == sb
->sb_fs_format
)
108 if (!gfs2_old_fs_formats
[x
]) {
110 "GFS2: code version (%u, %u) is incompatible "
111 "with ondisk format (%u, %u)\n",
112 GFS2_FORMAT_FS
, GFS2_FORMAT_MULTI
,
113 sb
->sb_fs_format
, sb
->sb_multihost_format
);
115 "GFS2: I don't know how to upgrade this FS\n");
120 if (sb
->sb_multihost_format
!= GFS2_FORMAT_MULTI
) {
121 for (x
= 0; gfs2_old_multihost_formats
[x
]; x
++)
122 if (gfs2_old_multihost_formats
[x
] ==
123 sb
->sb_multihost_format
)
126 if (!gfs2_old_multihost_formats
[x
]) {
128 "GFS2: code version (%u, %u) is incompatible "
129 "with ondisk format (%u, %u)\n",
130 GFS2_FORMAT_FS
, GFS2_FORMAT_MULTI
,
131 sb
->sb_fs_format
, sb
->sb_multihost_format
);
133 "GFS2: I don't know how to upgrade this FS\n");
138 if (!sdp
->sd_args
.ar_upgrade
) {
140 "GFS2: code version (%u, %u) is incompatible "
141 "with ondisk format (%u, %u)\n",
142 GFS2_FORMAT_FS
, GFS2_FORMAT_MULTI
,
143 sb
->sb_fs_format
, sb
->sb_multihost_format
);
145 "GFS2: Use the \"upgrade\" mount option to upgrade "
147 printk(KERN_INFO
"GFS2: See the manual for more details\n");
155 static void end_bio_io_page(struct bio
*bio
, int error
)
157 struct page
*page
= bio
->bi_private
;
160 SetPageUptodate(page
);
162 printk(KERN_WARNING
"gfs2: error %d reading superblock\n", error
);
166 static void gfs2_sb_in(struct gfs2_sb_host
*sb
, const void *buf
)
168 const struct gfs2_sb
*str
= buf
;
170 sb
->sb_magic
= be32_to_cpu(str
->sb_header
.mh_magic
);
171 sb
->sb_type
= be32_to_cpu(str
->sb_header
.mh_type
);
172 sb
->sb_format
= be32_to_cpu(str
->sb_header
.mh_format
);
173 sb
->sb_fs_format
= be32_to_cpu(str
->sb_fs_format
);
174 sb
->sb_multihost_format
= be32_to_cpu(str
->sb_multihost_format
);
175 sb
->sb_bsize
= be32_to_cpu(str
->sb_bsize
);
176 sb
->sb_bsize_shift
= be32_to_cpu(str
->sb_bsize_shift
);
177 sb
->sb_master_dir
.no_addr
= be64_to_cpu(str
->sb_master_dir
.no_addr
);
178 sb
->sb_master_dir
.no_formal_ino
= be64_to_cpu(str
->sb_master_dir
.no_formal_ino
);
179 sb
->sb_root_dir
.no_addr
= be64_to_cpu(str
->sb_root_dir
.no_addr
);
180 sb
->sb_root_dir
.no_formal_ino
= be64_to_cpu(str
->sb_root_dir
.no_formal_ino
);
182 memcpy(sb
->sb_lockproto
, str
->sb_lockproto
, GFS2_LOCKNAME_LEN
);
183 memcpy(sb
->sb_locktable
, str
->sb_locktable
, GFS2_LOCKNAME_LEN
);
187 * gfs2_read_super - Read the gfs2 super block from disk
188 * @sdp: The GFS2 super block
189 * @sector: The location of the super block
190 * @error: The error code to return
192 * This uses the bio functions to read the super block from disk
193 * because we want to be 100% sure that we never read cached data.
194 * A super block is read twice only during each GFS2 mount and is
195 * never written to by the filesystem. The first time its read no
196 * locks are held, and the only details which are looked at are those
197 * relating to the locking protocol. Once locking is up and working,
198 * the sb is read again under the lock to establish the location of
199 * the master directory (contains pointers to journals etc) and the
202 * Returns: 0 on success or error
205 int gfs2_read_super(struct gfs2_sbd
*sdp
, sector_t sector
)
207 struct super_block
*sb
= sdp
->sd_vfs
;
212 page
= alloc_page(GFP_NOFS
);
216 ClearPageUptodate(page
);
217 ClearPageDirty(page
);
220 bio
= bio_alloc(GFP_NOFS
, 1);
221 if (unlikely(!bio
)) {
226 bio
->bi_sector
= sector
* (sb
->s_blocksize
>> 9);
227 bio
->bi_bdev
= sb
->s_bdev
;
228 bio_add_page(bio
, page
, PAGE_SIZE
, 0);
230 bio
->bi_end_io
= end_bio_io_page
;
231 bio
->bi_private
= page
;
232 submit_bio(READ_SYNC
| (1 << BIO_RW_META
), bio
);
233 wait_on_page_locked(page
);
235 if (!PageUptodate(page
)) {
240 gfs2_sb_in(&sdp
->sd_sb
, p
);
247 * gfs2_read_sb - Read super block
248 * @sdp: The GFS2 superblock
249 * @gl: the glock for the superblock (assumed to be held)
250 * @silent: Don't print message if mount fails
254 int gfs2_read_sb(struct gfs2_sbd
*sdp
, struct gfs2_glock
*gl
, int silent
)
256 u32 hash_blocks
, ind_blocks
, leaf_blocks
;
261 error
= gfs2_read_super(sdp
, GFS2_SB_ADDR
>> sdp
->sd_fsb2bb_shift
);
264 fs_err(sdp
, "can't read superblock\n");
268 error
= gfs2_check_sb(sdp
, &sdp
->sd_sb
, silent
);
272 sdp
->sd_fsb2bb_shift
= sdp
->sd_sb
.sb_bsize_shift
-
273 GFS2_BASIC_BLOCK_SHIFT
;
274 sdp
->sd_fsb2bb
= 1 << sdp
->sd_fsb2bb_shift
;
275 sdp
->sd_diptrs
= (sdp
->sd_sb
.sb_bsize
-
276 sizeof(struct gfs2_dinode
)) / sizeof(u64
);
277 sdp
->sd_inptrs
= (sdp
->sd_sb
.sb_bsize
-
278 sizeof(struct gfs2_meta_header
)) / sizeof(u64
);
279 sdp
->sd_jbsize
= sdp
->sd_sb
.sb_bsize
- sizeof(struct gfs2_meta_header
);
280 sdp
->sd_hash_bsize
= sdp
->sd_sb
.sb_bsize
/ 2;
281 sdp
->sd_hash_bsize_shift
= sdp
->sd_sb
.sb_bsize_shift
- 1;
282 sdp
->sd_hash_ptrs
= sdp
->sd_hash_bsize
/ sizeof(u64
);
283 sdp
->sd_qc_per_block
= (sdp
->sd_sb
.sb_bsize
-
284 sizeof(struct gfs2_meta_header
)) /
285 sizeof(struct gfs2_quota_change
);
287 /* Compute maximum reservation required to add a entry to a directory */
289 hash_blocks
= DIV_ROUND_UP(sizeof(u64
) * (1 << GFS2_DIR_MAX_DEPTH
),
293 for (tmp_blocks
= hash_blocks
; tmp_blocks
> sdp
->sd_diptrs
;) {
294 tmp_blocks
= DIV_ROUND_UP(tmp_blocks
, sdp
->sd_inptrs
);
295 ind_blocks
+= tmp_blocks
;
298 leaf_blocks
= 2 + GFS2_DIR_MAX_DEPTH
;
300 sdp
->sd_max_dirres
= hash_blocks
+ ind_blocks
+ leaf_blocks
;
302 sdp
->sd_heightsize
[0] = sdp
->sd_sb
.sb_bsize
-
303 sizeof(struct gfs2_dinode
);
304 sdp
->sd_heightsize
[1] = sdp
->sd_sb
.sb_bsize
* sdp
->sd_diptrs
;
309 space
= sdp
->sd_heightsize
[x
- 1] * sdp
->sd_inptrs
;
311 m
= do_div(d
, sdp
->sd_inptrs
);
313 if (d
!= sdp
->sd_heightsize
[x
- 1] || m
)
315 sdp
->sd_heightsize
[x
] = space
;
317 sdp
->sd_max_height
= x
;
318 sdp
->sd_heightsize
[x
] = ~0;
319 gfs2_assert(sdp
, sdp
->sd_max_height
<= GFS2_MAX_META_HEIGHT
);
321 sdp
->sd_jheightsize
[0] = sdp
->sd_sb
.sb_bsize
-
322 sizeof(struct gfs2_dinode
);
323 sdp
->sd_jheightsize
[1] = sdp
->sd_jbsize
* sdp
->sd_diptrs
;
328 space
= sdp
->sd_jheightsize
[x
- 1] * sdp
->sd_inptrs
;
330 m
= do_div(d
, sdp
->sd_inptrs
);
332 if (d
!= sdp
->sd_jheightsize
[x
- 1] || m
)
334 sdp
->sd_jheightsize
[x
] = space
;
336 sdp
->sd_max_jheight
= x
;
337 sdp
->sd_jheightsize
[x
] = ~0;
338 gfs2_assert(sdp
, sdp
->sd_max_jheight
<= GFS2_MAX_META_HEIGHT
);
344 * gfs2_jindex_hold - Grab a lock on the jindex
345 * @sdp: The GFS2 superblock
346 * @ji_gh: the holder for the jindex glock
348 * This is very similar to the gfs2_rindex_hold() function, except that
349 * in general we hold the jindex lock for longer periods of time and
350 * we grab it far less frequently (in general) then the rgrp lock.
355 int gfs2_jindex_hold(struct gfs2_sbd
*sdp
, struct gfs2_holder
*ji_gh
)
357 struct gfs2_inode
*dip
= GFS2_I(sdp
->sd_jindex
);
360 struct gfs2_jdesc
*jd
;
365 mutex_lock(&sdp
->sd_jindex_mutex
);
368 error
= gfs2_glock_nq_init(dip
->i_gl
, LM_ST_SHARED
, 0, ji_gh
);
372 name
.len
= sprintf(buf
, "journal%u", sdp
->sd_journals
);
373 name
.hash
= gfs2_disk_hash(name
.name
, name
.len
);
375 error
= gfs2_dir_check(sdp
->sd_jindex
, &name
, NULL
);
376 if (error
== -ENOENT
) {
381 gfs2_glock_dq_uninit(ji_gh
);
387 jd
= kzalloc(sizeof(struct gfs2_jdesc
), GFP_KERNEL
);
391 INIT_LIST_HEAD(&jd
->extent_list
);
392 jd
->jd_inode
= gfs2_lookupi(sdp
->sd_jindex
, &name
, 1, NULL
);
393 if (!jd
->jd_inode
|| IS_ERR(jd
->jd_inode
)) {
397 error
= PTR_ERR(jd
->jd_inode
);
402 spin_lock(&sdp
->sd_jindex_spin
);
403 jd
->jd_jid
= sdp
->sd_journals
++;
404 list_add_tail(&jd
->jd_list
, &sdp
->sd_jindex_list
);
405 spin_unlock(&sdp
->sd_jindex_spin
);
408 mutex_unlock(&sdp
->sd_jindex_mutex
);
414 * gfs2_jindex_free - Clear all the journal index information
415 * @sdp: The GFS2 superblock
419 void gfs2_jindex_free(struct gfs2_sbd
*sdp
)
421 struct list_head list
, *head
;
422 struct gfs2_jdesc
*jd
;
423 struct gfs2_journal_extent
*jext
;
425 spin_lock(&sdp
->sd_jindex_spin
);
426 list_add(&list
, &sdp
->sd_jindex_list
);
427 list_del_init(&sdp
->sd_jindex_list
);
428 sdp
->sd_journals
= 0;
429 spin_unlock(&sdp
->sd_jindex_spin
);
431 while (!list_empty(&list
)) {
432 jd
= list_entry(list
.next
, struct gfs2_jdesc
, jd_list
);
433 head
= &jd
->extent_list
;
434 while (!list_empty(head
)) {
435 jext
= list_entry(head
->next
,
436 struct gfs2_journal_extent
,
438 list_del(&jext
->extent_list
);
441 list_del(&jd
->jd_list
);
447 static struct gfs2_jdesc
*jdesc_find_i(struct list_head
*head
, unsigned int jid
)
449 struct gfs2_jdesc
*jd
;
452 list_for_each_entry(jd
, head
, jd_list
) {
453 if (jd
->jd_jid
== jid
) {
465 struct gfs2_jdesc
*gfs2_jdesc_find(struct gfs2_sbd
*sdp
, unsigned int jid
)
467 struct gfs2_jdesc
*jd
;
469 spin_lock(&sdp
->sd_jindex_spin
);
470 jd
= jdesc_find_i(&sdp
->sd_jindex_list
, jid
);
471 spin_unlock(&sdp
->sd_jindex_spin
);
476 void gfs2_jdesc_make_dirty(struct gfs2_sbd
*sdp
, unsigned int jid
)
478 struct gfs2_jdesc
*jd
;
480 spin_lock(&sdp
->sd_jindex_spin
);
481 jd
= jdesc_find_i(&sdp
->sd_jindex_list
, jid
);
484 spin_unlock(&sdp
->sd_jindex_spin
);
487 struct gfs2_jdesc
*gfs2_jdesc_find_dirty(struct gfs2_sbd
*sdp
)
489 struct gfs2_jdesc
*jd
;
492 spin_lock(&sdp
->sd_jindex_spin
);
494 list_for_each_entry(jd
, &sdp
->sd_jindex_list
, jd_list
) {
501 spin_unlock(&sdp
->sd_jindex_spin
);
509 int gfs2_jdesc_check(struct gfs2_jdesc
*jd
)
511 struct gfs2_inode
*ip
= GFS2_I(jd
->jd_inode
);
512 struct gfs2_sbd
*sdp
= GFS2_SB(jd
->jd_inode
);
516 if (ip
->i_di
.di_size
< (8 << 20) || ip
->i_di
.di_size
> (1 << 30) ||
517 (ip
->i_di
.di_size
& (sdp
->sd_sb
.sb_bsize
- 1))) {
518 gfs2_consist_inode(ip
);
521 jd
->jd_blocks
= ip
->i_di
.di_size
>> sdp
->sd_sb
.sb_bsize_shift
;
523 error
= gfs2_write_alloc_required(ip
, 0, ip
->i_di
.di_size
, &ar
);
525 gfs2_consist_inode(ip
);
533 * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
534 * @sdp: the filesystem
539 int gfs2_make_fs_rw(struct gfs2_sbd
*sdp
)
541 struct gfs2_inode
*ip
= GFS2_I(sdp
->sd_jdesc
->jd_inode
);
542 struct gfs2_glock
*j_gl
= ip
->i_gl
;
543 struct gfs2_holder t_gh
;
544 struct gfs2_log_header_host head
;
547 error
= gfs2_glock_nq_init(sdp
->sd_trans_gl
, LM_ST_SHARED
, 0, &t_gh
);
551 j_gl
->gl_ops
->go_inval(j_gl
, DIO_METADATA
);
553 error
= gfs2_find_jhead(sdp
->sd_jdesc
, &head
);
557 if (!(head
.lh_flags
& GFS2_LOG_HEAD_UNMOUNT
)) {
563 /* Initialize some head of the log stuff */
564 sdp
->sd_log_sequence
= head
.lh_sequence
+ 1;
565 gfs2_log_pointers_init(sdp
, head
.lh_blkno
);
567 error
= gfs2_quota_init(sdp
);
571 set_bit(SDF_JOURNAL_LIVE
, &sdp
->sd_flags
);
573 gfs2_glock_dq_uninit(&t_gh
);
578 t_gh
.gh_flags
|= GL_NOCACHE
;
579 gfs2_glock_dq_uninit(&t_gh
);
585 * gfs2_make_fs_ro - Turn a Read-Write FS into a Read-Only one
586 * @sdp: the filesystem
591 int gfs2_make_fs_ro(struct gfs2_sbd
*sdp
)
593 struct gfs2_holder t_gh
;
596 gfs2_quota_sync(sdp
);
597 gfs2_statfs_sync(sdp
);
599 error
= gfs2_glock_nq_init(sdp
->sd_trans_gl
, LM_ST_SHARED
, GL_NOCACHE
,
601 if (error
&& !test_bit(SDF_SHUTDOWN
, &sdp
->sd_flags
))
604 gfs2_meta_syncfs(sdp
);
605 gfs2_log_shutdown(sdp
);
607 clear_bit(SDF_JOURNAL_LIVE
, &sdp
->sd_flags
);
610 gfs2_glock_dq_uninit(&t_gh
);
612 gfs2_quota_cleanup(sdp
);
617 static void gfs2_statfs_change_in(struct gfs2_statfs_change_host
*sc
, const void *buf
)
619 const struct gfs2_statfs_change
*str
= buf
;
621 sc
->sc_total
= be64_to_cpu(str
->sc_total
);
622 sc
->sc_free
= be64_to_cpu(str
->sc_free
);
623 sc
->sc_dinodes
= be64_to_cpu(str
->sc_dinodes
);
626 static void gfs2_statfs_change_out(const struct gfs2_statfs_change_host
*sc
, void *buf
)
628 struct gfs2_statfs_change
*str
= buf
;
630 str
->sc_total
= cpu_to_be64(sc
->sc_total
);
631 str
->sc_free
= cpu_to_be64(sc
->sc_free
);
632 str
->sc_dinodes
= cpu_to_be64(sc
->sc_dinodes
);
635 int gfs2_statfs_init(struct gfs2_sbd
*sdp
)
637 struct gfs2_inode
*m_ip
= GFS2_I(sdp
->sd_statfs_inode
);
638 struct gfs2_statfs_change_host
*m_sc
= &sdp
->sd_statfs_master
;
639 struct gfs2_inode
*l_ip
= GFS2_I(sdp
->sd_sc_inode
);
640 struct gfs2_statfs_change_host
*l_sc
= &sdp
->sd_statfs_local
;
641 struct buffer_head
*m_bh
, *l_bh
;
642 struct gfs2_holder gh
;
645 error
= gfs2_glock_nq_init(m_ip
->i_gl
, LM_ST_EXCLUSIVE
, GL_NOCACHE
,
650 error
= gfs2_meta_inode_buffer(m_ip
, &m_bh
);
654 if (sdp
->sd_args
.ar_spectator
) {
655 spin_lock(&sdp
->sd_statfs_spin
);
656 gfs2_statfs_change_in(m_sc
, m_bh
->b_data
+
657 sizeof(struct gfs2_dinode
));
658 spin_unlock(&sdp
->sd_statfs_spin
);
660 error
= gfs2_meta_inode_buffer(l_ip
, &l_bh
);
664 spin_lock(&sdp
->sd_statfs_spin
);
665 gfs2_statfs_change_in(m_sc
, m_bh
->b_data
+
666 sizeof(struct gfs2_dinode
));
667 gfs2_statfs_change_in(l_sc
, l_bh
->b_data
+
668 sizeof(struct gfs2_dinode
));
669 spin_unlock(&sdp
->sd_statfs_spin
);
677 gfs2_glock_dq_uninit(&gh
);
681 void gfs2_statfs_change(struct gfs2_sbd
*sdp
, s64 total
, s64 free
,
684 struct gfs2_inode
*l_ip
= GFS2_I(sdp
->sd_sc_inode
);
685 struct gfs2_statfs_change_host
*l_sc
= &sdp
->sd_statfs_local
;
686 struct buffer_head
*l_bh
;
689 error
= gfs2_meta_inode_buffer(l_ip
, &l_bh
);
693 gfs2_trans_add_bh(l_ip
->i_gl
, l_bh
, 1);
695 spin_lock(&sdp
->sd_statfs_spin
);
696 l_sc
->sc_total
+= total
;
697 l_sc
->sc_free
+= free
;
698 l_sc
->sc_dinodes
+= dinodes
;
699 gfs2_statfs_change_out(l_sc
, l_bh
->b_data
+ sizeof(struct gfs2_dinode
));
700 spin_unlock(&sdp
->sd_statfs_spin
);
705 int gfs2_statfs_sync(struct gfs2_sbd
*sdp
)
707 struct gfs2_inode
*m_ip
= GFS2_I(sdp
->sd_statfs_inode
);
708 struct gfs2_inode
*l_ip
= GFS2_I(sdp
->sd_sc_inode
);
709 struct gfs2_statfs_change_host
*m_sc
= &sdp
->sd_statfs_master
;
710 struct gfs2_statfs_change_host
*l_sc
= &sdp
->sd_statfs_local
;
711 struct gfs2_holder gh
;
712 struct buffer_head
*m_bh
, *l_bh
;
715 error
= gfs2_glock_nq_init(m_ip
->i_gl
, LM_ST_EXCLUSIVE
, GL_NOCACHE
,
720 error
= gfs2_meta_inode_buffer(m_ip
, &m_bh
);
724 spin_lock(&sdp
->sd_statfs_spin
);
725 gfs2_statfs_change_in(m_sc
, m_bh
->b_data
+
726 sizeof(struct gfs2_dinode
));
727 if (!l_sc
->sc_total
&& !l_sc
->sc_free
&& !l_sc
->sc_dinodes
) {
728 spin_unlock(&sdp
->sd_statfs_spin
);
731 spin_unlock(&sdp
->sd_statfs_spin
);
733 error
= gfs2_meta_inode_buffer(l_ip
, &l_bh
);
737 error
= gfs2_trans_begin(sdp
, 2 * RES_DINODE
, 0);
741 gfs2_trans_add_bh(l_ip
->i_gl
, l_bh
, 1);
743 spin_lock(&sdp
->sd_statfs_spin
);
744 m_sc
->sc_total
+= l_sc
->sc_total
;
745 m_sc
->sc_free
+= l_sc
->sc_free
;
746 m_sc
->sc_dinodes
+= l_sc
->sc_dinodes
;
747 memset(l_sc
, 0, sizeof(struct gfs2_statfs_change
));
748 memset(l_bh
->b_data
+ sizeof(struct gfs2_dinode
),
749 0, sizeof(struct gfs2_statfs_change
));
750 spin_unlock(&sdp
->sd_statfs_spin
);
752 gfs2_trans_add_bh(m_ip
->i_gl
, m_bh
, 1);
753 gfs2_statfs_change_out(m_sc
, m_bh
->b_data
+ sizeof(struct gfs2_dinode
));
762 gfs2_glock_dq_uninit(&gh
);
767 * gfs2_statfs_i - Do a statfs
768 * @sdp: the filesystem
769 * @sg: the sg structure
774 int gfs2_statfs_i(struct gfs2_sbd
*sdp
, struct gfs2_statfs_change_host
*sc
)
776 struct gfs2_statfs_change_host
*m_sc
= &sdp
->sd_statfs_master
;
777 struct gfs2_statfs_change_host
*l_sc
= &sdp
->sd_statfs_local
;
779 spin_lock(&sdp
->sd_statfs_spin
);
782 sc
->sc_total
+= l_sc
->sc_total
;
783 sc
->sc_free
+= l_sc
->sc_free
;
784 sc
->sc_dinodes
+= l_sc
->sc_dinodes
;
786 spin_unlock(&sdp
->sd_statfs_spin
);
790 if (sc
->sc_free
> sc
->sc_total
)
791 sc
->sc_free
= sc
->sc_total
;
792 if (sc
->sc_dinodes
< 0)
799 * statfs_fill - fill in the sg for a given RG
801 * @sc: the sc structure
803 * Returns: 0 on success, -ESTALE if the LVB is invalid
806 static int statfs_slow_fill(struct gfs2_rgrpd
*rgd
,
807 struct gfs2_statfs_change_host
*sc
)
809 gfs2_rgrp_verify(rgd
);
810 sc
->sc_total
+= rgd
->rd_data
;
811 sc
->sc_free
+= rgd
->rd_rg
.rg_free
;
812 sc
->sc_dinodes
+= rgd
->rd_rg
.rg_dinodes
;
817 * gfs2_statfs_slow - Stat a filesystem using asynchronous locking
818 * @sdp: the filesystem
819 * @sc: the sc info that will be returned
821 * Any error (other than a signal) will cause this routine to fall back
822 * to the synchronous version.
824 * FIXME: This really shouldn't busy wait like this.
829 int gfs2_statfs_slow(struct gfs2_sbd
*sdp
, struct gfs2_statfs_change_host
*sc
)
831 struct gfs2_holder ri_gh
;
832 struct gfs2_rgrpd
*rgd_next
;
833 struct gfs2_holder
*gha
, *gh
;
834 unsigned int slots
= 64;
839 memset(sc
, 0, sizeof(struct gfs2_statfs_change_host
));
840 gha
= kcalloc(slots
, sizeof(struct gfs2_holder
), GFP_KERNEL
);
844 error
= gfs2_rindex_hold(sdp
, &ri_gh
);
848 rgd_next
= gfs2_rgrpd_get_first(sdp
);
853 for (x
= 0; x
< slots
; x
++) {
856 if (gh
->gh_gl
&& gfs2_glock_poll(gh
)) {
857 err
= gfs2_glock_wait(gh
);
859 gfs2_holder_uninit(gh
);
863 error
= statfs_slow_fill(
864 gh
->gh_gl
->gl_object
, sc
);
865 gfs2_glock_dq_uninit(gh
);
871 else if (rgd_next
&& !error
) {
872 error
= gfs2_glock_nq_init(rgd_next
->rd_gl
,
876 rgd_next
= gfs2_rgrpd_get_next(rgd_next
);
880 if (signal_pending(current
))
881 error
= -ERESTARTSYS
;
890 gfs2_glock_dq_uninit(&ri_gh
);
898 struct list_head list
;
899 struct gfs2_holder gh
;
903 * gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all
905 * @sdp: the file system
906 * @state: the state to put the transaction lock into
907 * @t_gh: the hold on the transaction lock
912 static int gfs2_lock_fs_check_clean(struct gfs2_sbd
*sdp
,
913 struct gfs2_holder
*t_gh
)
915 struct gfs2_inode
*ip
;
916 struct gfs2_holder ji_gh
;
917 struct gfs2_jdesc
*jd
;
920 struct gfs2_log_header_host lh
;
923 error
= gfs2_jindex_hold(sdp
, &ji_gh
);
927 list_for_each_entry(jd
, &sdp
->sd_jindex_list
, jd_list
) {
928 lfcc
= kmalloc(sizeof(struct lfcc
), GFP_KERNEL
);
933 ip
= GFS2_I(jd
->jd_inode
);
934 error
= gfs2_glock_nq_init(ip
->i_gl
, LM_ST_SHARED
, 0, &lfcc
->gh
);
939 list_add(&lfcc
->list
, &list
);
942 error
= gfs2_glock_nq_init(sdp
->sd_trans_gl
, LM_ST_DEFERRED
,
945 list_for_each_entry(jd
, &sdp
->sd_jindex_list
, jd_list
) {
946 error
= gfs2_jdesc_check(jd
);
949 error
= gfs2_find_jhead(jd
, &lh
);
952 if (!(lh
.lh_flags
& GFS2_LOG_HEAD_UNMOUNT
)) {
959 gfs2_glock_dq_uninit(t_gh
);
962 while (!list_empty(&list
)) {
963 lfcc
= list_entry(list
.next
, struct lfcc
, list
);
964 list_del(&lfcc
->list
);
965 gfs2_glock_dq_uninit(&lfcc
->gh
);
968 gfs2_glock_dq_uninit(&ji_gh
);
973 * gfs2_freeze_fs - freezes the file system
974 * @sdp: the file system
976 * This function flushes data and meta data for all machines by
977 * aquiring the transaction log exclusively. All journals are
978 * ensured to be in a clean state as well.
983 int gfs2_freeze_fs(struct gfs2_sbd
*sdp
)
987 mutex_lock(&sdp
->sd_freeze_lock
);
989 if (!sdp
->sd_freeze_count
++) {
990 error
= gfs2_lock_fs_check_clean(sdp
, &sdp
->sd_freeze_gh
);
992 sdp
->sd_freeze_count
--;
995 mutex_unlock(&sdp
->sd_freeze_lock
);
1001 * gfs2_unfreeze_fs - unfreezes the file system
1002 * @sdp: the file system
1004 * This function allows the file system to proceed by unlocking
1005 * the exclusively held transaction lock. Other GFS2 nodes are
1006 * now free to acquire the lock shared and go on with their lives.
1010 void gfs2_unfreeze_fs(struct gfs2_sbd
*sdp
)
1012 mutex_lock(&sdp
->sd_freeze_lock
);
1014 if (sdp
->sd_freeze_count
&& !--sdp
->sd_freeze_count
)
1015 gfs2_glock_dq_uninit(&sdp
->sd_freeze_gh
);
1017 mutex_unlock(&sdp
->sd_freeze_lock
);