Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
super.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3  * Copyright (C) 2004-2007 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/bio.h>
11 #include <linux/sched.h>
12 #include <linux/slab.h>
13 #include <linux/spinlock.h>
14 #include <linux/completion.h>
15 #include <linux/buffer_head.h>
16 #include <linux/statfs.h>
17 #include <linux/seq_file.h>
18 #include <linux/mount.h>
19 #include <linux/kthread.h>
20 #include <linux/delay.h>
21 #include <linux/gfs2_ondisk.h>
22 #include <linux/crc32.h>
23 #include <linux/time.h>
24 #include <linux/wait.h>
25 #include <linux/writeback.h>
26 #include <linux/backing-dev.h>
27 
28 #include "gfs2.h"
29 #include "incore.h"
30 #include "bmap.h"
31 #include "dir.h"
32 #include "glock.h"
33 #include "glops.h"
34 #include "inode.h"
35 #include "log.h"
36 #include "meta_io.h"
37 #include "quota.h"
38 #include "recovery.h"
39 #include "rgrp.h"
40 #include "super.h"
41 #include "trans.h"
42 #include "util.h"
43 #include "sys.h"
44 #include "xattr.h"
45 
46 #define args_neq(a1, a2, x) ((a1)->ar_##x != (a2)->ar_##x)
47 
48 enum {
84 };
85 
86 static const match_table_t tokens = {
87  {Opt_lockproto, "lockproto=%s"},
88  {Opt_locktable, "locktable=%s"},
89  {Opt_hostdata, "hostdata=%s"},
90  {Opt_spectator, "spectator"},
91  {Opt_spectator, "norecovery"},
92  {Opt_ignore_local_fs, "ignore_local_fs"},
93  {Opt_localflocks, "localflocks"},
94  {Opt_localcaching, "localcaching"},
95  {Opt_debug, "debug"},
96  {Opt_nodebug, "nodebug"},
97  {Opt_upgrade, "upgrade"},
98  {Opt_acl, "acl"},
99  {Opt_noacl, "noacl"},
100  {Opt_quota_off, "quota=off"},
101  {Opt_quota_account, "quota=account"},
102  {Opt_quota_on, "quota=on"},
103  {Opt_quota, "quota"},
104  {Opt_noquota, "noquota"},
105  {Opt_suiddir, "suiddir"},
106  {Opt_nosuiddir, "nosuiddir"},
107  {Opt_data_writeback, "data=writeback"},
108  {Opt_data_ordered, "data=ordered"},
109  {Opt_meta, "meta"},
110  {Opt_discard, "discard"},
111  {Opt_nodiscard, "nodiscard"},
112  {Opt_commit, "commit=%d"},
113  {Opt_err_withdraw, "errors=withdraw"},
114  {Opt_err_panic, "errors=panic"},
115  {Opt_statfs_quantum, "statfs_quantum=%d"},
116  {Opt_statfs_percent, "statfs_percent=%d"},
117  {Opt_quota_quantum, "quota_quantum=%d"},
118  {Opt_barrier, "barrier"},
119  {Opt_nobarrier, "nobarrier"},
120  {Opt_rgrplvb, "rgrplvb"},
121  {Opt_norgrplvb, "norgrplvb"},
122  {Opt_error, NULL}
123 };
124 
133 int gfs2_mount_args(struct gfs2_args *args, char *options)
134 {
135  char *o;
136  int token;
138  int rv;
139 
140  /* Split the options into tokens with the "," character and
141  process them */
142 
143  while (1) {
144  o = strsep(&options, ",");
145  if (o == NULL)
146  break;
147  if (*o == '\0')
148  continue;
149 
150  token = match_token(o, tokens, tmp);
151  switch (token) {
152  case Opt_lockproto:
153  match_strlcpy(args->ar_lockproto, &tmp[0],
155  break;
156  case Opt_locktable:
157  match_strlcpy(args->ar_locktable, &tmp[0],
159  break;
160  case Opt_hostdata:
161  match_strlcpy(args->ar_hostdata, &tmp[0],
163  break;
164  case Opt_spectator:
165  args->ar_spectator = 1;
166  break;
167  case Opt_ignore_local_fs:
168  /* Retained for backwards compat only */
169  break;
170  case Opt_localflocks:
171  args->ar_localflocks = 1;
172  break;
173  case Opt_localcaching:
174  /* Retained for backwards compat only */
175  break;
176  case Opt_debug:
177  if (args->ar_errors == GFS2_ERRORS_PANIC) {
178  printk(KERN_WARNING "GFS2: -o debug and -o errors=panic "
179  "are mutually exclusive.\n");
180  return -EINVAL;
181  }
182  args->ar_debug = 1;
183  break;
184  case Opt_nodebug:
185  args->ar_debug = 0;
186  break;
187  case Opt_upgrade:
188  /* Retained for backwards compat only */
189  break;
190  case Opt_acl:
191  args->ar_posix_acl = 1;
192  break;
193  case Opt_noacl:
194  args->ar_posix_acl = 0;
195  break;
196  case Opt_quota_off:
197  case Opt_noquota:
198  args->ar_quota = GFS2_QUOTA_OFF;
199  break;
200  case Opt_quota_account:
202  break;
203  case Opt_quota_on:
204  case Opt_quota:
205  args->ar_quota = GFS2_QUOTA_ON;
206  break;
207  case Opt_suiddir:
208  args->ar_suiddir = 1;
209  break;
210  case Opt_nosuiddir:
211  args->ar_suiddir = 0;
212  break;
213  case Opt_data_writeback:
215  break;
216  case Opt_data_ordered:
217  args->ar_data = GFS2_DATA_ORDERED;
218  break;
219  case Opt_meta:
220  args->ar_meta = 1;
221  break;
222  case Opt_discard:
223  args->ar_discard = 1;
224  break;
225  case Opt_nodiscard:
226  args->ar_discard = 0;
227  break;
228  case Opt_commit:
229  rv = match_int(&tmp[0], &args->ar_commit);
230  if (rv || args->ar_commit <= 0) {
231  printk(KERN_WARNING "GFS2: commit mount option requires a positive numeric argument\n");
232  return rv ? rv : -EINVAL;
233  }
234  break;
235  case Opt_statfs_quantum:
236  rv = match_int(&tmp[0], &args->ar_statfs_quantum);
237  if (rv || args->ar_statfs_quantum < 0) {
238  printk(KERN_WARNING "GFS2: statfs_quantum mount option requires a non-negative numeric argument\n");
239  return rv ? rv : -EINVAL;
240  }
241  break;
242  case Opt_quota_quantum:
243  rv = match_int(&tmp[0], &args->ar_quota_quantum);
244  if (rv || args->ar_quota_quantum <= 0) {
245  printk(KERN_WARNING "GFS2: quota_quantum mount option requires a positive numeric argument\n");
246  return rv ? rv : -EINVAL;
247  }
248  break;
249  case Opt_statfs_percent:
250  rv = match_int(&tmp[0], &args->ar_statfs_percent);
251  if (rv || args->ar_statfs_percent < 0 ||
252  args->ar_statfs_percent > 100) {
253  printk(KERN_WARNING "statfs_percent mount option requires a numeric argument between 0 and 100\n");
254  return rv ? rv : -EINVAL;
255  }
256  break;
257  case Opt_err_withdraw:
259  break;
260  case Opt_err_panic:
261  if (args->ar_debug) {
262  printk(KERN_WARNING "GFS2: -o debug and -o errors=panic "
263  "are mutually exclusive.\n");
264  return -EINVAL;
265  }
267  break;
268  case Opt_barrier:
269  args->ar_nobarrier = 0;
270  break;
271  case Opt_nobarrier:
272  args->ar_nobarrier = 1;
273  break;
274  case Opt_rgrplvb:
275  args->ar_rgrplvb = 1;
276  break;
277  case Opt_norgrplvb:
278  args->ar_rgrplvb = 0;
279  break;
280  case Opt_error:
281  default:
282  printk(KERN_WARNING "GFS2: invalid mount option: %s\n", o);
283  return -EINVAL;
284  }
285  }
286 
287  return 0;
288 }
289 
296 void gfs2_jindex_free(struct gfs2_sbd *sdp)
297 {
298  struct list_head list, *head;
299  struct gfs2_jdesc *jd;
300  struct gfs2_journal_extent *jext;
301 
302  spin_lock(&sdp->sd_jindex_spin);
303  list_add(&list, &sdp->sd_jindex_list);
304  list_del_init(&sdp->sd_jindex_list);
305  sdp->sd_journals = 0;
306  spin_unlock(&sdp->sd_jindex_spin);
307 
308  while (!list_empty(&list)) {
309  jd = list_entry(list.next, struct gfs2_jdesc, jd_list);
310  head = &jd->extent_list;
311  while (!list_empty(head)) {
312  jext = list_entry(head->next,
313  struct gfs2_journal_extent,
314  extent_list);
315  list_del(&jext->extent_list);
316  kfree(jext);
317  }
318  list_del(&jd->jd_list);
319  iput(jd->jd_inode);
320  kfree(jd);
321  }
322 }
323 
324 static struct gfs2_jdesc *jdesc_find_i(struct list_head *head, unsigned int jid)
325 {
326  struct gfs2_jdesc *jd;
327  int found = 0;
328 
329  list_for_each_entry(jd, head, jd_list) {
330  if (jd->jd_jid == jid) {
331  found = 1;
332  break;
333  }
334  }
335 
336  if (!found)
337  jd = NULL;
338 
339  return jd;
340 }
341 
342 struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid)
343 {
344  struct gfs2_jdesc *jd;
345 
346  spin_lock(&sdp->sd_jindex_spin);
347  jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
348  spin_unlock(&sdp->sd_jindex_spin);
349 
350  return jd;
351 }
352 
354 {
355  struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
356  struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode);
357  u64 size = i_size_read(jd->jd_inode);
358 
359  if (gfs2_check_internal_file_size(jd->jd_inode, 8 << 20, 1 << 30))
360  return -EIO;
361 
362  jd->jd_blocks = size >> sdp->sd_sb.sb_bsize_shift;
363 
364  if (gfs2_write_alloc_required(ip, 0, size)) {
365  gfs2_consist_inode(ip);
366  return -EIO;
367  }
368 
369  return 0;
370 }
371 
379 int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
380 {
381  struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode);
382  struct gfs2_glock *j_gl = ip->i_gl;
383  struct gfs2_holder t_gh;
384  struct gfs2_log_header_host head;
385  int error;
386 
387  error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, 0, &t_gh);
388  if (error)
389  return error;
390 
391  j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
392 
393  error = gfs2_find_jhead(sdp->sd_jdesc, &head);
394  if (error)
395  goto fail;
396 
397  if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
398  gfs2_consist(sdp);
399  error = -EIO;
400  goto fail;
401  }
402 
403  /* Initialize some head of the log stuff */
404  sdp->sd_log_sequence = head.lh_sequence + 1;
405  gfs2_log_pointers_init(sdp, head.lh_blkno);
406 
407  error = gfs2_quota_init(sdp);
408  if (error)
409  goto fail;
410 
412 
413  gfs2_glock_dq_uninit(&t_gh);
414 
415  return 0;
416 
417 fail:
418  t_gh.gh_flags |= GL_NOCACHE;
419  gfs2_glock_dq_uninit(&t_gh);
420 
421  return error;
422 }
423 
425 {
426  const struct gfs2_statfs_change *str = buf;
427 
428  sc->sc_total = be64_to_cpu(str->sc_total);
429  sc->sc_free = be64_to_cpu(str->sc_free);
430  sc->sc_dinodes = be64_to_cpu(str->sc_dinodes);
431 }
432 
433 static void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf)
434 {
435  struct gfs2_statfs_change *str = buf;
436 
437  str->sc_total = cpu_to_be64(sc->sc_total);
438  str->sc_free = cpu_to_be64(sc->sc_free);
439  str->sc_dinodes = cpu_to_be64(sc->sc_dinodes);
440 }
441 
442 int gfs2_statfs_init(struct gfs2_sbd *sdp)
443 {
444  struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
445  struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
446  struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
447  struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
448  struct buffer_head *m_bh, *l_bh;
449  struct gfs2_holder gh;
450  int error;
451 
452  error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
453  &gh);
454  if (error)
455  return error;
456 
457  error = gfs2_meta_inode_buffer(m_ip, &m_bh);
458  if (error)
459  goto out;
460 
461  if (sdp->sd_args.ar_spectator) {
462  spin_lock(&sdp->sd_statfs_spin);
463  gfs2_statfs_change_in(m_sc, m_bh->b_data +
464  sizeof(struct gfs2_dinode));
465  spin_unlock(&sdp->sd_statfs_spin);
466  } else {
467  error = gfs2_meta_inode_buffer(l_ip, &l_bh);
468  if (error)
469  goto out_m_bh;
470 
471  spin_lock(&sdp->sd_statfs_spin);
472  gfs2_statfs_change_in(m_sc, m_bh->b_data +
473  sizeof(struct gfs2_dinode));
474  gfs2_statfs_change_in(l_sc, l_bh->b_data +
475  sizeof(struct gfs2_dinode));
476  spin_unlock(&sdp->sd_statfs_spin);
477 
478  brelse(l_bh);
479  }
480 
481 out_m_bh:
482  brelse(m_bh);
483 out:
485  return 0;
486 }
487 
488 void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
489  s64 dinodes)
490 {
491  struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
492  struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
493  struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
494  struct buffer_head *l_bh;
495  s64 x, y;
496  int need_sync = 0;
497  int error;
498 
499  error = gfs2_meta_inode_buffer(l_ip, &l_bh);
500  if (error)
501  return;
502 
503  gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
504 
505  spin_lock(&sdp->sd_statfs_spin);
506  l_sc->sc_total += total;
507  l_sc->sc_free += free;
508  l_sc->sc_dinodes += dinodes;
509  gfs2_statfs_change_out(l_sc, l_bh->b_data + sizeof(struct gfs2_dinode));
510  if (sdp->sd_args.ar_statfs_percent) {
511  x = 100 * l_sc->sc_free;
512  y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent;
513  if (x >= y || x <= -y)
514  need_sync = 1;
515  }
516  spin_unlock(&sdp->sd_statfs_spin);
517 
518  brelse(l_bh);
519  if (need_sync)
520  gfs2_wake_up_statfs(sdp);
521 }
522 
523 void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
524  struct buffer_head *l_bh)
525 {
526  struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
527  struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
528  struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
529  struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
530 
531  gfs2_trans_add_bh(l_ip->i_gl, l_bh, 1);
532 
533  spin_lock(&sdp->sd_statfs_spin);
534  m_sc->sc_total += l_sc->sc_total;
535  m_sc->sc_free += l_sc->sc_free;
536  m_sc->sc_dinodes += l_sc->sc_dinodes;
537  memset(l_sc, 0, sizeof(struct gfs2_statfs_change));
538  memset(l_bh->b_data + sizeof(struct gfs2_dinode),
539  0, sizeof(struct gfs2_statfs_change));
540  spin_unlock(&sdp->sd_statfs_spin);
541 
542  gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
543  gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
544 }
545 
547 {
548  struct gfs2_sbd *sdp = sb->s_fs_info;
549  struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
550  struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
551  struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
552  struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
553  struct gfs2_holder gh;
554  struct buffer_head *m_bh, *l_bh;
555  int error;
556 
557  error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
558  &gh);
559  if (error)
560  return error;
561 
562  error = gfs2_meta_inode_buffer(m_ip, &m_bh);
563  if (error)
564  goto out;
565 
566  spin_lock(&sdp->sd_statfs_spin);
567  gfs2_statfs_change_in(m_sc, m_bh->b_data +
568  sizeof(struct gfs2_dinode));
569  if (!l_sc->sc_total && !l_sc->sc_free && !l_sc->sc_dinodes) {
570  spin_unlock(&sdp->sd_statfs_spin);
571  goto out_bh;
572  }
573  spin_unlock(&sdp->sd_statfs_spin);
574 
575  error = gfs2_meta_inode_buffer(l_ip, &l_bh);
576  if (error)
577  goto out_bh;
578 
579  error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
580  if (error)
581  goto out_bh2;
582 
583  update_statfs(sdp, m_bh, l_bh);
584  sdp->sd_statfs_force_sync = 0;
585 
586  gfs2_trans_end(sdp);
587 
588 out_bh2:
589  brelse(l_bh);
590 out_bh:
591  brelse(m_bh);
592 out:
594  return error;
595 }
596 
597 struct lfcc {
598  struct list_head list;
599  struct gfs2_holder gh;
600 };
601 
612 static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp,
613  struct gfs2_holder *t_gh)
614 {
615  struct gfs2_inode *ip;
616  struct gfs2_jdesc *jd;
617  struct lfcc *lfcc;
618  LIST_HEAD(list);
619  struct gfs2_log_header_host lh;
620  int error;
621 
622  list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
623  lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL);
624  if (!lfcc) {
625  error = -ENOMEM;
626  goto out;
627  }
628  ip = GFS2_I(jd->jd_inode);
629  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &lfcc->gh);
630  if (error) {
631  kfree(lfcc);
632  goto out;
633  }
634  list_add(&lfcc->list, &list);
635  }
636 
637  error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_DEFERRED,
638  GL_NOCACHE, t_gh);
639 
640  list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
641  error = gfs2_jdesc_check(jd);
642  if (error)
643  break;
644  error = gfs2_find_jhead(jd, &lh);
645  if (error)
646  break;
647  if (!(lh.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
648  error = -EBUSY;
649  break;
650  }
651  }
652 
653  if (error)
654  gfs2_glock_dq_uninit(t_gh);
655 
656 out:
657  while (!list_empty(&list)) {
658  lfcc = list_entry(list.next, struct lfcc, list);
659  list_del(&lfcc->list);
660  gfs2_glock_dq_uninit(&lfcc->gh);
661  kfree(lfcc);
662  }
663  return error;
664 }
665 
677 int gfs2_freeze_fs(struct gfs2_sbd *sdp)
678 {
679  int error = 0;
680 
681  mutex_lock(&sdp->sd_freeze_lock);
682 
683  if (!sdp->sd_freeze_count++) {
684  error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
685  if (error)
686  sdp->sd_freeze_count--;
687  }
688 
690 
691  return error;
692 }
693 
704 void gfs2_unfreeze_fs(struct gfs2_sbd *sdp)
705 {
706  mutex_lock(&sdp->sd_freeze_lock);
707 
708  if (sdp->sd_freeze_count && !--sdp->sd_freeze_count)
710 
712 }
713 
714 void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
715 {
716  struct gfs2_dinode *str = buf;
717 
718  str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
719  str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI);
720  str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI);
721  str->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
722  str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
723  str->di_mode = cpu_to_be32(ip->i_inode.i_mode);
724  str->di_uid = cpu_to_be32(ip->i_inode.i_uid);
725  str->di_gid = cpu_to_be32(ip->i_inode.i_gid);
726  str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink);
727  str->di_size = cpu_to_be64(i_size_read(&ip->i_inode));
728  str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
729  str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec);
730  str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec);
731  str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec);
732 
733  str->di_goal_meta = cpu_to_be64(ip->i_goal);
734  str->di_goal_data = cpu_to_be64(ip->i_goal);
736 
737  str->di_flags = cpu_to_be32(ip->i_diskflags);
738  str->di_height = cpu_to_be16(ip->i_height);
739  str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) &&
740  !(ip->i_diskflags & GFS2_DIF_EXHASH) ?
741  GFS2_FORMAT_DE : 0);
742  str->di_depth = cpu_to_be16(ip->i_depth);
743  str->di_entries = cpu_to_be32(ip->i_entries);
744 
745  str->di_eattr = cpu_to_be64(ip->i_eattr);
746  str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec);
747  str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec);
748  str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec);
749 }
750 
759 static int gfs2_write_inode(struct inode *inode, struct writeback_control *wbc)
760 {
761  struct gfs2_inode *ip = GFS2_I(inode);
762  struct gfs2_sbd *sdp = GFS2_SB(inode);
763  struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl);
764  struct backing_dev_info *bdi = metamapping->backing_dev_info;
765  int ret = 0;
766 
767  if (wbc->sync_mode == WB_SYNC_ALL)
768  gfs2_log_flush(GFS2_SB(inode), ip->i_gl);
769  if (bdi->dirty_exceeded)
770  gfs2_ail1_flush(sdp, wbc);
771  else
772  filemap_fdatawrite(metamapping);
773  if (wbc->sync_mode == WB_SYNC_ALL)
774  ret = filemap_fdatawait(metamapping);
775  if (ret)
776  mark_inode_dirty_sync(inode);
777  return ret;
778 }
779 
793 static void gfs2_dirty_inode(struct inode *inode, int flags)
794 {
795  struct gfs2_inode *ip = GFS2_I(inode);
796  struct gfs2_sbd *sdp = GFS2_SB(inode);
797  struct buffer_head *bh;
798  struct gfs2_holder gh;
799  int need_unlock = 0;
800  int need_endtrans = 0;
801  int ret;
802 
803  if (!(flags & (I_DIRTY_DATASYNC|I_DIRTY_SYNC)))
804  return;
805 
806  if (!gfs2_glock_is_locked_by_me(ip->i_gl)) {
807  ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
808  if (ret) {
809  fs_err(sdp, "dirty_inode: glock %d\n", ret);
810  return;
811  }
812  need_unlock = 1;
813  } else if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE))
814  return;
815 
816  if (current->journal_info == NULL) {
817  ret = gfs2_trans_begin(sdp, RES_DINODE, 0);
818  if (ret) {
819  fs_err(sdp, "dirty_inode: gfs2_trans_begin %d\n", ret);
820  goto out;
821  }
822  need_endtrans = 1;
823  }
824 
825  ret = gfs2_meta_inode_buffer(ip, &bh);
826  if (ret == 0) {
827  gfs2_trans_add_bh(ip->i_gl, bh, 1);
828  gfs2_dinode_out(ip, bh->b_data);
829  brelse(bh);
830  }
831 
832  if (need_endtrans)
833  gfs2_trans_end(sdp);
834 out:
835  if (need_unlock)
837 }
838 
846 static int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
847 {
848  struct gfs2_holder t_gh;
849  int error;
850 
852  gfs2_quota_sync(sdp->sd_vfs, 0);
853  gfs2_statfs_sync(sdp->sd_vfs, 0);
854 
855  error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, GL_NOCACHE,
856  &t_gh);
857  if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
858  return error;
859 
860  gfs2_meta_syncfs(sdp);
861  gfs2_log_shutdown(sdp);
862 
864 
865  if (t_gh.gh_gl)
866  gfs2_glock_dq_uninit(&t_gh);
867 
868  gfs2_quota_cleanup(sdp);
869 
870  return error;
871 }
872 
873 static int gfs2_umount_recovery_wait(void *word)
874 {
875  schedule();
876  return 0;
877 }
878 
885 static void gfs2_put_super(struct super_block *sb)
886 {
887  struct gfs2_sbd *sdp = sb->s_fs_info;
888  int error;
889  struct gfs2_jdesc *jd;
890 
891  /* Unfreeze the filesystem, if we need to */
892 
893  mutex_lock(&sdp->sd_freeze_lock);
894  if (sdp->sd_freeze_count)
897 
898  /* No more recovery requests */
900  smp_mb();
901 
902  /* Wait on outstanding recovery */
903 restart:
904  spin_lock(&sdp->sd_jindex_spin);
906  if (!test_bit(JDF_RECOVERY, &jd->jd_flags))
907  continue;
908  spin_unlock(&sdp->sd_jindex_spin);
909  wait_on_bit(&jd->jd_flags, JDF_RECOVERY,
910  gfs2_umount_recovery_wait, TASK_UNINTERRUPTIBLE);
911  goto restart;
912  }
913  spin_unlock(&sdp->sd_jindex_spin);
914 
917 
918  if (!(sb->s_flags & MS_RDONLY)) {
919  error = gfs2_make_fs_ro(sdp);
920  if (error)
921  gfs2_io_error(sdp);
922  }
923  /* At this point, we're through modifying the disk */
924 
925  /* Release stuff */
926 
927  iput(sdp->sd_jindex);
928  iput(sdp->sd_statfs_inode);
929  iput(sdp->sd_rindex);
930  iput(sdp->sd_quota_inode);
931 
934 
935  if (!sdp->sd_args.ar_spectator) {
940  iput(sdp->sd_sc_inode);
941  iput(sdp->sd_qc_inode);
942  }
943 
945  gfs2_clear_rgrpd(sdp);
946  gfs2_jindex_free(sdp);
947  /* Take apart glock structures and buffer lists */
948  gfs2_gl_hash_clear(sdp);
949  /* Unmount the locking protocol */
950  gfs2_lm_unmount(sdp);
951 
952  /* At this point, we're through participating in the lockspace */
953  gfs2_sys_fs_del(sdp);
954 }
955 
963 static int gfs2_sync_fs(struct super_block *sb, int wait)
964 {
965  struct gfs2_sbd *sdp = sb->s_fs_info;
966 
967  gfs2_quota_sync(sb, -1);
968  if (wait && sdp)
969  gfs2_log_flush(sdp, NULL);
970  return 0;
971 }
972 
979 static int gfs2_freeze(struct super_block *sb)
980 {
981  struct gfs2_sbd *sdp = sb->s_fs_info;
982  int error;
983 
984  if (test_bit(SDF_SHUTDOWN, &sdp->sd_flags))
985  return -EINVAL;
986 
987  for (;;) {
988  error = gfs2_freeze_fs(sdp);
989  if (!error)
990  break;
991 
992  switch (error) {
993  case -EBUSY:
994  fs_err(sdp, "waiting for recovery before freeze\n");
995  break;
996 
997  default:
998  fs_err(sdp, "error freezing FS: %d\n", error);
999  break;
1000  }
1001 
1002  fs_err(sdp, "retrying...\n");
1003  msleep(1000);
1004  }
1005  return 0;
1006 }
1007 
1014 static int gfs2_unfreeze(struct super_block *sb)
1015 {
1017  return 0;
1018 }
1019 
1028 static int statfs_slow_fill(struct gfs2_rgrpd *rgd,
1029  struct gfs2_statfs_change_host *sc)
1030 {
1031  gfs2_rgrp_verify(rgd);
1032  sc->sc_total += rgd->rd_data;
1033  sc->sc_free += rgd->rd_free;
1034  sc->sc_dinodes += rgd->rd_dinodes;
1035  return 0;
1036 }
1037 
1051 static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
1052 {
1053  struct gfs2_rgrpd *rgd_next;
1054  struct gfs2_holder *gha, *gh;
1055  unsigned int slots = 64;
1056  unsigned int x;
1057  int done;
1058  int error = 0, err;
1059 
1060  memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
1061  gha = kcalloc(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
1062  if (!gha)
1063  return -ENOMEM;
1064 
1065  rgd_next = gfs2_rgrpd_get_first(sdp);
1066 
1067  for (;;) {
1068  done = 1;
1069 
1070  for (x = 0; x < slots; x++) {
1071  gh = gha + x;
1072 
1073  if (gh->gh_gl && gfs2_glock_poll(gh)) {
1074  err = gfs2_glock_wait(gh);
1075  if (err) {
1076  gfs2_holder_uninit(gh);
1077  error = err;
1078  } else {
1079  if (!error)
1080  error = statfs_slow_fill(
1081  gh->gh_gl->gl_object, sc);
1083  }
1084  }
1085 
1086  if (gh->gh_gl)
1087  done = 0;
1088  else if (rgd_next && !error) {
1089  error = gfs2_glock_nq_init(rgd_next->rd_gl,
1090  LM_ST_SHARED,
1091  GL_ASYNC,
1092  gh);
1093  rgd_next = gfs2_rgrpd_get_next(rgd_next);
1094  done = 0;
1095  }
1096 
1097  if (signal_pending(current))
1098  error = -ERESTARTSYS;
1099  }
1100 
1101  if (done)
1102  break;
1103 
1104  yield();
1105  }
1106 
1107  kfree(gha);
1108  return error;
1109 }
1110 
1119 static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
1120 {
1121  struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
1122  struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
1123 
1124  spin_lock(&sdp->sd_statfs_spin);
1125 
1126  *sc = *m_sc;
1127  sc->sc_total += l_sc->sc_total;
1128  sc->sc_free += l_sc->sc_free;
1129  sc->sc_dinodes += l_sc->sc_dinodes;
1130 
1131  spin_unlock(&sdp->sd_statfs_spin);
1132 
1133  if (sc->sc_free < 0)
1134  sc->sc_free = 0;
1135  if (sc->sc_free > sc->sc_total)
1136  sc->sc_free = sc->sc_total;
1137  if (sc->sc_dinodes < 0)
1138  sc->sc_dinodes = 0;
1139 
1140  return 0;
1141 }
1142 
1151 static int gfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
1152 {
1153  struct super_block *sb = dentry->d_inode->i_sb;
1154  struct gfs2_sbd *sdp = sb->s_fs_info;
1155  struct gfs2_statfs_change_host sc;
1156  int error;
1157 
1158  error = gfs2_rindex_update(sdp);
1159  if (error)
1160  return error;
1161 
1162  if (gfs2_tune_get(sdp, gt_statfs_slow))
1163  error = gfs2_statfs_slow(sdp, &sc);
1164  else
1165  error = gfs2_statfs_i(sdp, &sc);
1166 
1167  if (error)
1168  return error;
1169 
1170  buf->f_type = GFS2_MAGIC;
1171  buf->f_bsize = sdp->sd_sb.sb_bsize;
1172  buf->f_blocks = sc.sc_total;
1173  buf->f_bfree = sc.sc_free;
1174  buf->f_bavail = sc.sc_free;
1175  buf->f_files = sc.sc_dinodes + sc.sc_free;
1176  buf->f_ffree = sc.sc_free;
1177  buf->f_namelen = GFS2_FNAMESIZE;
1178 
1179  return 0;
1180 }
1181 
1191 static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
1192 {
1193  struct gfs2_sbd *sdp = sb->s_fs_info;
1194  struct gfs2_args args = sdp->sd_args; /* Default to current settings */
1195  struct gfs2_tune *gt = &sdp->sd_tune;
1196  int error;
1197 
1198  spin_lock(&gt->gt_spin);
1199  args.ar_commit = gt->gt_logd_secs;
1201  if (gt->gt_statfs_slow)
1202  args.ar_statfs_quantum = 0;
1203  else
1205  spin_unlock(&gt->gt_spin);
1206  error = gfs2_mount_args(&args, data);
1207  if (error)
1208  return error;
1209 
1210  /* Not allowed to change locking details */
1211  if (strcmp(args.ar_lockproto, sdp->sd_args.ar_lockproto) ||
1212  strcmp(args.ar_locktable, sdp->sd_args.ar_locktable) ||
1213  strcmp(args.ar_hostdata, sdp->sd_args.ar_hostdata))
1214  return -EINVAL;
1215 
1216  /* Some flags must not be changed */
1217  if (args_neq(&args, &sdp->sd_args, spectator) ||
1218  args_neq(&args, &sdp->sd_args, localflocks) ||
1219  args_neq(&args, &sdp->sd_args, meta))
1220  return -EINVAL;
1221 
1222  if (sdp->sd_args.ar_spectator)
1223  *flags |= MS_RDONLY;
1224 
1225  if ((sb->s_flags ^ *flags) & MS_RDONLY) {
1226  if (*flags & MS_RDONLY)
1227  error = gfs2_make_fs_ro(sdp);
1228  else
1229  error = gfs2_make_fs_rw(sdp);
1230  if (error)
1231  return error;
1232  }
1233 
1234  sdp->sd_args = args;
1235  if (sdp->sd_args.ar_posix_acl)
1236  sb->s_flags |= MS_POSIXACL;
1237  else
1238  sb->s_flags &= ~MS_POSIXACL;
1239  if (sdp->sd_args.ar_nobarrier)
1241  else
1243  spin_lock(&gt->gt_spin);
1244  gt->gt_logd_secs = args.ar_commit;
1246  if (args.ar_statfs_quantum) {
1247  gt->gt_statfs_slow = 0;
1249  }
1250  else {
1251  gt->gt_statfs_slow = 1;
1252  gt->gt_statfs_quantum = 30;
1253  }
1254  spin_unlock(&gt->gt_spin);
1255 
1256  gfs2_online_uevent(sdp);
1257  return 0;
1258 }
1259 
1275 static int gfs2_drop_inode(struct inode *inode)
1276 {
1277  struct gfs2_inode *ip = GFS2_I(inode);
1278 
1279  if (inode->i_nlink) {
1280  struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
1281  if (gl && test_bit(GLF_DEMOTE, &gl->gl_flags))
1282  clear_nlink(inode);
1283  }
1284  return generic_drop_inode(inode);
1285 }
1286 
1287 static int is_ancestor(const struct dentry *d1, const struct dentry *d2)
1288 {
1289  do {
1290  if (d1 == d2)
1291  return 1;
1292  d1 = d1->d_parent;
1293  } while (!IS_ROOT(d1));
1294  return 0;
1295 }
1296 
1305 static int gfs2_show_options(struct seq_file *s, struct dentry *root)
1306 {
1307  struct gfs2_sbd *sdp = root->d_sb->s_fs_info;
1308  struct gfs2_args *args = &sdp->sd_args;
1309  int val;
1310 
1311  if (is_ancestor(root, sdp->sd_master_dir))
1312  seq_printf(s, ",meta");
1313  if (args->ar_lockproto[0])
1314  seq_printf(s, ",lockproto=%s", args->ar_lockproto);
1315  if (args->ar_locktable[0])
1316  seq_printf(s, ",locktable=%s", args->ar_locktable);
1317  if (args->ar_hostdata[0])
1318  seq_printf(s, ",hostdata=%s", args->ar_hostdata);
1319  if (args->ar_spectator)
1320  seq_printf(s, ",spectator");
1321  if (args->ar_localflocks)
1322  seq_printf(s, ",localflocks");
1323  if (args->ar_debug)
1324  seq_printf(s, ",debug");
1325  if (args->ar_posix_acl)
1326  seq_printf(s, ",acl");
1327  if (args->ar_quota != GFS2_QUOTA_DEFAULT) {
1328  char *state;
1329  switch (args->ar_quota) {
1330  case GFS2_QUOTA_OFF:
1331  state = "off";
1332  break;
1333  case GFS2_QUOTA_ACCOUNT:
1334  state = "account";
1335  break;
1336  case GFS2_QUOTA_ON:
1337  state = "on";
1338  break;
1339  default:
1340  state = "unknown";
1341  break;
1342  }
1343  seq_printf(s, ",quota=%s", state);
1344  }
1345  if (args->ar_suiddir)
1346  seq_printf(s, ",suiddir");
1347  if (args->ar_data != GFS2_DATA_DEFAULT) {
1348  char *state;
1349  switch (args->ar_data) {
1350  case GFS2_DATA_WRITEBACK:
1351  state = "writeback";
1352  break;
1353  case GFS2_DATA_ORDERED:
1354  state = "ordered";
1355  break;
1356  default:
1357  state = "unknown";
1358  break;
1359  }
1360  seq_printf(s, ",data=%s", state);
1361  }
1362  if (args->ar_discard)
1363  seq_printf(s, ",discard");
1364  val = sdp->sd_tune.gt_logd_secs;
1365  if (val != 30)
1366  seq_printf(s, ",commit=%d", val);
1367  val = sdp->sd_tune.gt_statfs_quantum;
1368  if (val != 30)
1369  seq_printf(s, ",statfs_quantum=%d", val);
1370  else if (sdp->sd_tune.gt_statfs_slow)
1371  seq_puts(s, ",statfs_quantum=0");
1372  val = sdp->sd_tune.gt_quota_quantum;
1373  if (val != 60)
1374  seq_printf(s, ",quota_quantum=%d", val);
1375  if (args->ar_statfs_percent)
1376  seq_printf(s, ",statfs_percent=%d", args->ar_statfs_percent);
1377  if (args->ar_errors != GFS2_ERRORS_DEFAULT) {
1378  const char *state;
1379 
1380  switch (args->ar_errors) {
1381  case GFS2_ERRORS_WITHDRAW:
1382  state = "withdraw";
1383  break;
1384  case GFS2_ERRORS_PANIC:
1385  state = "panic";
1386  break;
1387  default:
1388  state = "unknown";
1389  break;
1390  }
1391  seq_printf(s, ",errors=%s", state);
1392  }
1393  if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags))
1394  seq_printf(s, ",nobarrier");
1395  if (test_bit(SDF_DEMOTE, &sdp->sd_flags))
1396  seq_printf(s, ",demote_interface_used");
1397  if (args->ar_rgrplvb)
1398  seq_printf(s, ",rgrplvb");
1399  return 0;
1400 }
1401 
1402 static void gfs2_final_release_pages(struct gfs2_inode *ip)
1403 {
1404  struct inode *inode = &ip->i_inode;
1405  struct gfs2_glock *gl = ip->i_gl;
1406 
1407  truncate_inode_pages(gfs2_glock2aspace(ip->i_gl), 0);
1408  truncate_inode_pages(&inode->i_data, 0);
1409 
1410  if (atomic_read(&gl->gl_revokes) == 0) {
1411  clear_bit(GLF_LFLUSH, &gl->gl_flags);
1412  clear_bit(GLF_DIRTY, &gl->gl_flags);
1413  }
1414 }
1415 
1416 static int gfs2_dinode_dealloc(struct gfs2_inode *ip)
1417 {
1418  struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1419  struct gfs2_rgrpd *rgd;
1420  struct gfs2_holder gh;
1421  int error;
1422 
1423  if (gfs2_get_inode_blocks(&ip->i_inode) != 1) {
1424  gfs2_consist_inode(ip);
1425  return -EIO;
1426  }
1427 
1428  error = gfs2_rindex_update(sdp);
1429  if (error)
1430  return error;
1431 
1433  if (error)
1434  return error;
1435 
1436  rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1);
1437  if (!rgd) {
1438  gfs2_consist_inode(ip);
1439  error = -EIO;
1440  goto out_qs;
1441  }
1442 
1443  error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
1444  if (error)
1445  goto out_qs;
1446 
1448  sdp->sd_jdesc->jd_blocks);
1449  if (error)
1450  goto out_rg_gunlock;
1451 
1452  gfs2_free_di(rgd, ip);
1453 
1454  gfs2_final_release_pages(ip);
1455 
1456  gfs2_trans_end(sdp);
1457 
1458 out_rg_gunlock:
1459  gfs2_glock_dq_uninit(&gh);
1460 out_qs:
1461  gfs2_quota_unhold(ip);
1462  return error;
1463 }
1464 
1486 static void gfs2_evict_inode(struct inode *inode)
1487 {
1488  struct super_block *sb = inode->i_sb;
1489  struct gfs2_sbd *sdp = sb->s_fs_info;
1490  struct gfs2_inode *ip = GFS2_I(inode);
1491  struct gfs2_holder gh;
1492  int error;
1493 
1494  if (inode->i_nlink || (sb->s_flags & MS_RDONLY))
1495  goto out;
1496 
1497  /* Must not read inode block until block type has been verified */
1498  error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh);
1499  if (unlikely(error)) {
1501  goto out;
1502  }
1503 
1504  if (!test_bit(GIF_ALLOC_FAILED, &ip->i_flags)) {
1506  if (error)
1507  goto out_truncate;
1508  }
1509 
1510  if (test_bit(GIF_INVALID, &ip->i_flags)) {
1511  error = gfs2_inode_refresh(ip);
1512  if (error)
1513  goto out_truncate;
1514  }
1515 
1516  ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
1519  error = gfs2_glock_nq(&ip->i_iopen_gh);
1520  if (error)
1521  goto out_truncate;
1522 
1523  /* Case 1 starts here */
1524 
1525  if (S_ISDIR(inode->i_mode) &&
1526  (ip->i_diskflags & GFS2_DIF_EXHASH)) {
1527  error = gfs2_dir_exhash_dealloc(ip);
1528  if (error)
1529  goto out_unlock;
1530  }
1531 
1532  if (ip->i_eattr) {
1533  error = gfs2_ea_dealloc(ip);
1534  if (error)
1535  goto out_unlock;
1536  }
1537 
1538  if (!gfs2_is_stuffed(ip)) {
1539  error = gfs2_file_dealloc(ip);
1540  if (error)
1541  goto out_unlock;
1542  }
1543 
1544  error = gfs2_dinode_dealloc(ip);
1545  goto out_unlock;
1546 
1547 out_truncate:
1548  gfs2_log_flush(sdp, ip->i_gl);
1549  if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) {
1550  struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl);
1551  filemap_fdatawrite(metamapping);
1552  filemap_fdatawait(metamapping);
1553  }
1554  write_inode_now(inode, 1);
1555  gfs2_ail_flush(ip->i_gl, 0);
1556 
1557  /* Case 2 starts here */
1558  error = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
1559  if (error)
1560  goto out_unlock;
1561  /* Needs to be done before glock release & also in a transaction */
1562  truncate_inode_pages(&inode->i_data, 0);
1563  gfs2_trans_end(sdp);
1564 
1565 out_unlock:
1566  /* Error path for case 1 */
1567  if (gfs2_rs_active(ip->i_res))
1568  gfs2_rs_deltree(ip, ip->i_res);
1569 
1570  if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags))
1571  gfs2_glock_dq(&ip->i_iopen_gh);
1573  gfs2_glock_dq_uninit(&gh);
1574  if (error && error != GLR_TRYFAILED && error != -EROFS)
1575  fs_warn(sdp, "gfs2_evict_inode: %d\n", error);
1576 out:
1577  /* Case 3 starts here */
1578  truncate_inode_pages(&inode->i_data, 0);
1579  gfs2_rs_delete(ip);
1580  clear_inode(inode);
1581  gfs2_dir_hash_inval(ip);
1582  ip->i_gl->gl_object = NULL;
1583  flush_delayed_work(&ip->i_gl->gl_work);
1585  gfs2_glock_put(ip->i_gl);
1586  ip->i_gl = NULL;
1587  if (ip->i_iopen_gh.gh_gl) {
1588  ip->i_iopen_gh.gh_gl->gl_object = NULL;
1590  }
1591 }
1592 
1593 static struct inode *gfs2_alloc_inode(struct super_block *sb)
1594 {
1595  struct gfs2_inode *ip;
1596 
1597  ip = kmem_cache_alloc(gfs2_inode_cachep, GFP_KERNEL);
1598  if (ip) {
1599  ip->i_flags = 0;
1600  ip->i_gl = NULL;
1601  ip->i_rgd = NULL;
1602  ip->i_res = NULL;
1603  }
1604  return &ip->i_inode;
1605 }
1606 
1607 static void gfs2_i_callback(struct rcu_head *head)
1608 {
1609  struct inode *inode = container_of(head, struct inode, i_rcu);
1610  kmem_cache_free(gfs2_inode_cachep, inode);
1611 }
1612 
1613 static void gfs2_destroy_inode(struct inode *inode)
1614 {
1615  call_rcu(&inode->i_rcu, gfs2_i_callback);
1616 }
1617 
1619  .alloc_inode = gfs2_alloc_inode,
1620  .destroy_inode = gfs2_destroy_inode,
1621  .write_inode = gfs2_write_inode,
1622  .dirty_inode = gfs2_dirty_inode,
1623  .evict_inode = gfs2_evict_inode,
1624  .put_super = gfs2_put_super,
1625  .sync_fs = gfs2_sync_fs,
1626  .freeze_fs = gfs2_freeze,
1627  .unfreeze_fs = gfs2_unfreeze,
1628  .statfs = gfs2_statfs,
1629  .remount_fs = gfs2_remount_fs,
1630  .drop_inode = gfs2_drop_inode,
1631  .show_options = gfs2_show_options,
1632 };
1633