1/*
2 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
3 * All Rights Reserved.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it would be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write the Free Software Foundation,
16 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18
19#include "xfs.h"
20#include "xfs_shared.h"
21#include "xfs_format.h"
22#include "xfs_log_format.h"
23#include "xfs_trans_resv.h"
24#include "xfs_sb.h"
25#include "xfs_mount.h"
26#include "xfs_da_format.h"
27#include "xfs_inode.h"
28#include "xfs_btree.h"
29#include "xfs_bmap.h"
30#include "xfs_alloc.h"
31#include "xfs_error.h"
32#include "xfs_fsops.h"
33#include "xfs_trans.h"
34#include "xfs_buf_item.h"
35#include "xfs_log.h"
36#include "xfs_log_priv.h"
37#include "xfs_da_btree.h"
38#include "xfs_dir2.h"
39#include "xfs_extfree_item.h"
40#include "xfs_mru_cache.h"
41#include "xfs_inode_item.h"
42#include "xfs_icache.h"
43#include "xfs_trace.h"
44#include "xfs_icreate_item.h"
45#include "xfs_filestream.h"
46#include "xfs_quota.h"
47#include "xfs_sysfs.h"
48
49#include <linux/namei.h>
50#include <linux/init.h>
51#include <linux/slab.h>
52#include <linux/mount.h>
53#include <linux/mempool.h>
54#include <linux/writeback.h>
55#include <linux/kthread.h>
56#include <linux/freezer.h>
57#include <linux/parser.h>
58
59static const struct super_operations xfs_super_operations;
60static kmem_zone_t *xfs_ioend_zone;
61mempool_t *xfs_ioend_pool;
62
63static struct kset *xfs_kset;		/* top-level xfs sysfs dir */
64#ifdef DEBUG
65static struct xfs_kobj xfs_dbg_kobj;	/* global debug sysfs attrs */
66#endif
67
68#define MNTOPT_LOGBUFS	"logbufs"	/* number of XFS log buffers */
69#define MNTOPT_LOGBSIZE	"logbsize"	/* size of XFS log buffers */
70#define MNTOPT_LOGDEV	"logdev"	/* log device */
71#define MNTOPT_RTDEV	"rtdev"		/* realtime I/O device */
72#define MNTOPT_BIOSIZE	"biosize"	/* log2 of preferred buffered io size */
73#define MNTOPT_WSYNC	"wsync"		/* safe-mode nfs compatible mount */
74#define MNTOPT_NOALIGN	"noalign"	/* turn off stripe alignment */
75#define MNTOPT_SWALLOC	"swalloc"	/* turn on stripe width allocation */
76#define MNTOPT_SUNIT	"sunit"		/* data volume stripe unit */
77#define MNTOPT_SWIDTH	"swidth"	/* data volume stripe width */
78#define MNTOPT_NOUUID	"nouuid"	/* ignore filesystem UUID */
79#define MNTOPT_MTPT	"mtpt"		/* filesystem mount point */
80#define MNTOPT_GRPID	"grpid"		/* group-ID from parent directory */
81#define MNTOPT_NOGRPID	"nogrpid"	/* group-ID from current process */
82#define MNTOPT_BSDGROUPS    "bsdgroups"    /* group-ID from parent directory */
83#define MNTOPT_SYSVGROUPS   "sysvgroups"   /* group-ID from current process */
84#define MNTOPT_ALLOCSIZE    "allocsize"    /* preferred allocation size */
85#define MNTOPT_NORECOVERY   "norecovery"   /* don't run XFS recovery */
86#define MNTOPT_BARRIER	"barrier"	/* use writer barriers for log write and
87					 * unwritten extent conversion */
88#define MNTOPT_NOBARRIER "nobarrier"	/* .. disable */
89#define MNTOPT_64BITINODE   "inode64"	/* inodes can be allocated anywhere */
90#define MNTOPT_32BITINODE   "inode32"	/* inode allocation limited to
91					 * XFS_MAXINUMBER_32 */
92#define MNTOPT_IKEEP	"ikeep"		/* do not free empty inode clusters */
93#define MNTOPT_NOIKEEP	"noikeep"	/* free empty inode clusters */
94#define MNTOPT_LARGEIO	   "largeio"	/* report large I/O sizes in stat() */
95#define MNTOPT_NOLARGEIO   "nolargeio"	/* do not report large I/O sizes
96					 * in stat(). */
97#define MNTOPT_ATTR2	"attr2"		/* do use attr2 attribute format */
98#define MNTOPT_NOATTR2	"noattr2"	/* do not use attr2 attribute format */
99#define MNTOPT_FILESTREAM  "filestreams" /* use filestreams allocator */
100#define MNTOPT_QUOTA	"quota"		/* disk quotas (user) */
101#define MNTOPT_NOQUOTA	"noquota"	/* no quotas */
102#define MNTOPT_USRQUOTA	"usrquota"	/* user quota enabled */
103#define MNTOPT_GRPQUOTA	"grpquota"	/* group quota enabled */
104#define MNTOPT_PRJQUOTA	"prjquota"	/* project quota enabled */
105#define MNTOPT_UQUOTA	"uquota"	/* user quota (IRIX variant) */
106#define MNTOPT_GQUOTA	"gquota"	/* group quota (IRIX variant) */
107#define MNTOPT_PQUOTA	"pquota"	/* project quota (IRIX variant) */
108#define MNTOPT_UQUOTANOENF "uqnoenforce"/* user quota limit enforcement */
109#define MNTOPT_GQUOTANOENF "gqnoenforce"/* group quota limit enforcement */
110#define MNTOPT_PQUOTANOENF "pqnoenforce"/* project quota limit enforcement */
111#define MNTOPT_QUOTANOENF  "qnoenforce"	/* same as uqnoenforce */
112#define MNTOPT_DISCARD	   "discard"	/* Discard unused blocks */
113#define MNTOPT_NODISCARD   "nodiscard"	/* Do not discard unused blocks */
114
115/*
116 * Table driven mount option parser.
117 *
118 * Currently only used for remount, but it will be used for mount
119 * in the future, too.
120 */
121enum {
122	Opt_barrier,
123	Opt_nobarrier,
124	Opt_inode64,
125	Opt_inode32,
126	Opt_err
127};
128
129static const match_table_t tokens = {
130	{Opt_barrier, "barrier"},
131	{Opt_nobarrier, "nobarrier"},
132	{Opt_inode64, "inode64"},
133	{Opt_inode32, "inode32"},
134	{Opt_err, NULL}
135};
136
137
138STATIC unsigned long
139suffix_kstrtoint(char *s, unsigned int base, int *res)
140{
141	int	last, shift_left_factor = 0, _res;
142	char	*value = s;
143
144	last = strlen(value) - 1;
145	if (value[last] == 'K' || value[last] == 'k') {
146		shift_left_factor = 10;
147		value[last] = '\0';
148	}
149	if (value[last] == 'M' || value[last] == 'm') {
150		shift_left_factor = 20;
151		value[last] = '\0';
152	}
153	if (value[last] == 'G' || value[last] == 'g') {
154		shift_left_factor = 30;
155		value[last] = '\0';
156	}
157
158	if (kstrtoint(s, base, &_res))
159		return -EINVAL;
160	*res = _res << shift_left_factor;
161	return 0;
162}
163
164/*
165 * This function fills in xfs_mount_t fields based on mount args.
166 * Note: the superblock has _not_ yet been read in.
167 *
168 * Note that this function leaks the various device name allocations on
169 * failure.  The caller takes care of them.
170 */
171STATIC int
172xfs_parseargs(
173	struct xfs_mount	*mp,
174	char			*options)
175{
176	struct super_block	*sb = mp->m_super;
177	char			*this_char, *value;
178	int			dsunit = 0;
179	int			dswidth = 0;
180	int			iosize = 0;
181	__uint8_t		iosizelog = 0;
182
183	/*
184	 * set up the mount name first so all the errors will refer to the
185	 * correct device.
186	 */
187	mp->m_fsname = kstrndup(sb->s_id, MAXNAMELEN, GFP_KERNEL);
188	if (!mp->m_fsname)
189		return -ENOMEM;
190	mp->m_fsname_len = strlen(mp->m_fsname) + 1;
191
192	/*
193	 * Copy binary VFS mount flags we are interested in.
194	 */
195	if (sb->s_flags & MS_RDONLY)
196		mp->m_flags |= XFS_MOUNT_RDONLY;
197	if (sb->s_flags & MS_DIRSYNC)
198		mp->m_flags |= XFS_MOUNT_DIRSYNC;
199	if (sb->s_flags & MS_SYNCHRONOUS)
200		mp->m_flags |= XFS_MOUNT_WSYNC;
201
202	/*
203	 * Set some default flags that could be cleared by the mount option
204	 * parsing.
205	 */
206	mp->m_flags |= XFS_MOUNT_BARRIER;
207	mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
208
209	/*
210	 * These can be overridden by the mount option parsing.
211	 */
212	mp->m_logbufs = -1;
213	mp->m_logbsize = -1;
214
215	if (!options)
216		goto done;
217
218	while ((this_char = strsep(&options, ",")) != NULL) {
219		if (!*this_char)
220			continue;
221		if ((value = strchr(this_char, '=')) != NULL)
222			*value++ = 0;
223
224		if (!strcmp(this_char, MNTOPT_LOGBUFS)) {
225			if (!value || !*value) {
226				xfs_warn(mp, "%s option requires an argument",
227					this_char);
228				return -EINVAL;
229			}
230			if (kstrtoint(value, 10, &mp->m_logbufs))
231				return -EINVAL;
232		} else if (!strcmp(this_char, MNTOPT_LOGBSIZE)) {
233			if (!value || !*value) {
234				xfs_warn(mp, "%s option requires an argument",
235					this_char);
236				return -EINVAL;
237			}
238			if (suffix_kstrtoint(value, 10, &mp->m_logbsize))
239				return -EINVAL;
240		} else if (!strcmp(this_char, MNTOPT_LOGDEV)) {
241			if (!value || !*value) {
242				xfs_warn(mp, "%s option requires an argument",
243					this_char);
244				return -EINVAL;
245			}
246			mp->m_logname = kstrndup(value, MAXNAMELEN, GFP_KERNEL);
247			if (!mp->m_logname)
248				return -ENOMEM;
249		} else if (!strcmp(this_char, MNTOPT_MTPT)) {
250			xfs_warn(mp, "%s option not allowed on this system",
251				this_char);
252			return -EINVAL;
253		} else if (!strcmp(this_char, MNTOPT_RTDEV)) {
254			if (!value || !*value) {
255				xfs_warn(mp, "%s option requires an argument",
256					this_char);
257				return -EINVAL;
258			}
259			mp->m_rtname = kstrndup(value, MAXNAMELEN, GFP_KERNEL);
260			if (!mp->m_rtname)
261				return -ENOMEM;
262		} else if (!strcmp(this_char, MNTOPT_BIOSIZE)) {
263			if (!value || !*value) {
264				xfs_warn(mp, "%s option requires an argument",
265					this_char);
266				return -EINVAL;
267			}
268			if (kstrtoint(value, 10, &iosize))
269				return -EINVAL;
270			iosizelog = ffs(iosize) - 1;
271		} else if (!strcmp(this_char, MNTOPT_ALLOCSIZE)) {
272			if (!value || !*value) {
273				xfs_warn(mp, "%s option requires an argument",
274					this_char);
275				return -EINVAL;
276			}
277			if (suffix_kstrtoint(value, 10, &iosize))
278				return -EINVAL;
279			iosizelog = ffs(iosize) - 1;
280		} else if (!strcmp(this_char, MNTOPT_GRPID) ||
281			   !strcmp(this_char, MNTOPT_BSDGROUPS)) {
282			mp->m_flags |= XFS_MOUNT_GRPID;
283		} else if (!strcmp(this_char, MNTOPT_NOGRPID) ||
284			   !strcmp(this_char, MNTOPT_SYSVGROUPS)) {
285			mp->m_flags &= ~XFS_MOUNT_GRPID;
286		} else if (!strcmp(this_char, MNTOPT_WSYNC)) {
287			mp->m_flags |= XFS_MOUNT_WSYNC;
288		} else if (!strcmp(this_char, MNTOPT_NORECOVERY)) {
289			mp->m_flags |= XFS_MOUNT_NORECOVERY;
290		} else if (!strcmp(this_char, MNTOPT_NOALIGN)) {
291			mp->m_flags |= XFS_MOUNT_NOALIGN;
292		} else if (!strcmp(this_char, MNTOPT_SWALLOC)) {
293			mp->m_flags |= XFS_MOUNT_SWALLOC;
294		} else if (!strcmp(this_char, MNTOPT_SUNIT)) {
295			if (!value || !*value) {
296				xfs_warn(mp, "%s option requires an argument",
297					this_char);
298				return -EINVAL;
299			}
300			if (kstrtoint(value, 10, &dsunit))
301				return -EINVAL;
302		} else if (!strcmp(this_char, MNTOPT_SWIDTH)) {
303			if (!value || !*value) {
304				xfs_warn(mp, "%s option requires an argument",
305					this_char);
306				return -EINVAL;
307			}
308			if (kstrtoint(value, 10, &dswidth))
309				return -EINVAL;
310		} else if (!strcmp(this_char, MNTOPT_32BITINODE)) {
311			mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
312		} else if (!strcmp(this_char, MNTOPT_64BITINODE)) {
313			mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
314		} else if (!strcmp(this_char, MNTOPT_NOUUID)) {
315			mp->m_flags |= XFS_MOUNT_NOUUID;
316		} else if (!strcmp(this_char, MNTOPT_BARRIER)) {
317			mp->m_flags |= XFS_MOUNT_BARRIER;
318		} else if (!strcmp(this_char, MNTOPT_NOBARRIER)) {
319			mp->m_flags &= ~XFS_MOUNT_BARRIER;
320		} else if (!strcmp(this_char, MNTOPT_IKEEP)) {
321			mp->m_flags |= XFS_MOUNT_IKEEP;
322		} else if (!strcmp(this_char, MNTOPT_NOIKEEP)) {
323			mp->m_flags &= ~XFS_MOUNT_IKEEP;
324		} else if (!strcmp(this_char, MNTOPT_LARGEIO)) {
325			mp->m_flags &= ~XFS_MOUNT_COMPAT_IOSIZE;
326		} else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) {
327			mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
328		} else if (!strcmp(this_char, MNTOPT_ATTR2)) {
329			mp->m_flags |= XFS_MOUNT_ATTR2;
330		} else if (!strcmp(this_char, MNTOPT_NOATTR2)) {
331			mp->m_flags &= ~XFS_MOUNT_ATTR2;
332			mp->m_flags |= XFS_MOUNT_NOATTR2;
333		} else if (!strcmp(this_char, MNTOPT_FILESTREAM)) {
334			mp->m_flags |= XFS_MOUNT_FILESTREAMS;
335		} else if (!strcmp(this_char, MNTOPT_NOQUOTA)) {
336			mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
337			mp->m_qflags &= ~XFS_ALL_QUOTA_ENFD;
338			mp->m_qflags &= ~XFS_ALL_QUOTA_ACTIVE;
339		} else if (!strcmp(this_char, MNTOPT_QUOTA) ||
340			   !strcmp(this_char, MNTOPT_UQUOTA) ||
341			   !strcmp(this_char, MNTOPT_USRQUOTA)) {
342			mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE |
343					 XFS_UQUOTA_ENFD);
344		} else if (!strcmp(this_char, MNTOPT_QUOTANOENF) ||
345			   !strcmp(this_char, MNTOPT_UQUOTANOENF)) {
346			mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE);
347			mp->m_qflags &= ~XFS_UQUOTA_ENFD;
348		} else if (!strcmp(this_char, MNTOPT_PQUOTA) ||
349			   !strcmp(this_char, MNTOPT_PRJQUOTA)) {
350			mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE |
351					 XFS_PQUOTA_ENFD);
352		} else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) {
353			mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE);
354			mp->m_qflags &= ~XFS_PQUOTA_ENFD;
355		} else if (!strcmp(this_char, MNTOPT_GQUOTA) ||
356			   !strcmp(this_char, MNTOPT_GRPQUOTA)) {
357			mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE |
358					 XFS_GQUOTA_ENFD);
359		} else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) {
360			mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
361			mp->m_qflags &= ~XFS_GQUOTA_ENFD;
362		} else if (!strcmp(this_char, MNTOPT_DISCARD)) {
363			mp->m_flags |= XFS_MOUNT_DISCARD;
364		} else if (!strcmp(this_char, MNTOPT_NODISCARD)) {
365			mp->m_flags &= ~XFS_MOUNT_DISCARD;
366		} else {
367			xfs_warn(mp, "unknown mount option [%s].", this_char);
368			return -EINVAL;
369		}
370	}
371
372	/*
373	 * no recovery flag requires a read-only mount
374	 */
375	if ((mp->m_flags & XFS_MOUNT_NORECOVERY) &&
376	    !(mp->m_flags & XFS_MOUNT_RDONLY)) {
377		xfs_warn(mp, "no-recovery mounts must be read-only.");
378		return -EINVAL;
379	}
380
381	if ((mp->m_flags & XFS_MOUNT_NOALIGN) && (dsunit || dswidth)) {
382		xfs_warn(mp,
383	"sunit and swidth options incompatible with the noalign option");
384		return -EINVAL;
385	}
386
387#ifndef CONFIG_XFS_QUOTA
388	if (XFS_IS_QUOTA_RUNNING(mp)) {
389		xfs_warn(mp, "quota support not available in this kernel.");
390		return -EINVAL;
391	}
392#endif
393
394	if ((dsunit && !dswidth) || (!dsunit && dswidth)) {
395		xfs_warn(mp, "sunit and swidth must be specified together");
396		return -EINVAL;
397	}
398
399	if (dsunit && (dswidth % dsunit != 0)) {
400		xfs_warn(mp,
401	"stripe width (%d) must be a multiple of the stripe unit (%d)",
402			dswidth, dsunit);
403		return -EINVAL;
404	}
405
406done:
407	if (dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) {
408		/*
409		 * At this point the superblock has not been read
410		 * in, therefore we do not know the block size.
411		 * Before the mount call ends we will convert
412		 * these to FSBs.
413		 */
414		mp->m_dalign = dsunit;
415		mp->m_swidth = dswidth;
416	}
417
418	if (mp->m_logbufs != -1 &&
419	    mp->m_logbufs != 0 &&
420	    (mp->m_logbufs < XLOG_MIN_ICLOGS ||
421	     mp->m_logbufs > XLOG_MAX_ICLOGS)) {
422		xfs_warn(mp, "invalid logbufs value: %d [not %d-%d]",
423			mp->m_logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS);
424		return -EINVAL;
425	}
426	if (mp->m_logbsize != -1 &&
427	    mp->m_logbsize !=  0 &&
428	    (mp->m_logbsize < XLOG_MIN_RECORD_BSIZE ||
429	     mp->m_logbsize > XLOG_MAX_RECORD_BSIZE ||
430	     !is_power_of_2(mp->m_logbsize))) {
431		xfs_warn(mp,
432			"invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]",
433			mp->m_logbsize);
434		return -EINVAL;
435	}
436
437	if (iosizelog) {
438		if (iosizelog > XFS_MAX_IO_LOG ||
439		    iosizelog < XFS_MIN_IO_LOG) {
440			xfs_warn(mp, "invalid log iosize: %d [not %d-%d]",
441				iosizelog, XFS_MIN_IO_LOG,
442				XFS_MAX_IO_LOG);
443			return -EINVAL;
444		}
445
446		mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE;
447		mp->m_readio_log = iosizelog;
448		mp->m_writeio_log = iosizelog;
449	}
450
451	return 0;
452}
453
454struct proc_xfs_info {
455	int	flag;
456	char	*str;
457};
458
459STATIC int
460xfs_showargs(
461	struct xfs_mount	*mp,
462	struct seq_file		*m)
463{
464	static struct proc_xfs_info xfs_info_set[] = {
465		/* the few simple ones we can get from the mount struct */
466		{ XFS_MOUNT_IKEEP,		"," MNTOPT_IKEEP },
467		{ XFS_MOUNT_WSYNC,		"," MNTOPT_WSYNC },
468		{ XFS_MOUNT_NOALIGN,		"," MNTOPT_NOALIGN },
469		{ XFS_MOUNT_SWALLOC,		"," MNTOPT_SWALLOC },
470		{ XFS_MOUNT_NOUUID,		"," MNTOPT_NOUUID },
471		{ XFS_MOUNT_NORECOVERY,		"," MNTOPT_NORECOVERY },
472		{ XFS_MOUNT_ATTR2,		"," MNTOPT_ATTR2 },
473		{ XFS_MOUNT_FILESTREAMS,	"," MNTOPT_FILESTREAM },
474		{ XFS_MOUNT_GRPID,		"," MNTOPT_GRPID },
475		{ XFS_MOUNT_DISCARD,		"," MNTOPT_DISCARD },
476		{ XFS_MOUNT_SMALL_INUMS,	"," MNTOPT_32BITINODE },
477		{ 0, NULL }
478	};
479	static struct proc_xfs_info xfs_info_unset[] = {
480		/* the few simple ones we can get from the mount struct */
481		{ XFS_MOUNT_COMPAT_IOSIZE,	"," MNTOPT_LARGEIO },
482		{ XFS_MOUNT_BARRIER,		"," MNTOPT_NOBARRIER },
483		{ XFS_MOUNT_SMALL_INUMS,	"," MNTOPT_64BITINODE },
484		{ 0, NULL }
485	};
486	struct proc_xfs_info	*xfs_infop;
487
488	for (xfs_infop = xfs_info_set; xfs_infop->flag; xfs_infop++) {
489		if (mp->m_flags & xfs_infop->flag)
490			seq_puts(m, xfs_infop->str);
491	}
492	for (xfs_infop = xfs_info_unset; xfs_infop->flag; xfs_infop++) {
493		if (!(mp->m_flags & xfs_infop->flag))
494			seq_puts(m, xfs_infop->str);
495	}
496
497	if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE)
498		seq_printf(m, "," MNTOPT_ALLOCSIZE "=%dk",
499				(int)(1 << mp->m_writeio_log) >> 10);
500
501	if (mp->m_logbufs > 0)
502		seq_printf(m, "," MNTOPT_LOGBUFS "=%d", mp->m_logbufs);
503	if (mp->m_logbsize > 0)
504		seq_printf(m, "," MNTOPT_LOGBSIZE "=%dk", mp->m_logbsize >> 10);
505
506	if (mp->m_logname)
507		seq_show_option(m, MNTOPT_LOGDEV, mp->m_logname);
508	if (mp->m_rtname)
509		seq_show_option(m, MNTOPT_RTDEV, mp->m_rtname);
510
511	if (mp->m_dalign > 0)
512		seq_printf(m, "," MNTOPT_SUNIT "=%d",
513				(int)XFS_FSB_TO_BB(mp, mp->m_dalign));
514	if (mp->m_swidth > 0)
515		seq_printf(m, "," MNTOPT_SWIDTH "=%d",
516				(int)XFS_FSB_TO_BB(mp, mp->m_swidth));
517
518	if (mp->m_qflags & (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD))
519		seq_puts(m, "," MNTOPT_USRQUOTA);
520	else if (mp->m_qflags & XFS_UQUOTA_ACCT)
521		seq_puts(m, "," MNTOPT_UQUOTANOENF);
522
523	if (mp->m_qflags & XFS_PQUOTA_ACCT) {
524		if (mp->m_qflags & XFS_PQUOTA_ENFD)
525			seq_puts(m, "," MNTOPT_PRJQUOTA);
526		else
527			seq_puts(m, "," MNTOPT_PQUOTANOENF);
528	}
529	if (mp->m_qflags & XFS_GQUOTA_ACCT) {
530		if (mp->m_qflags & XFS_GQUOTA_ENFD)
531			seq_puts(m, "," MNTOPT_GRPQUOTA);
532		else
533			seq_puts(m, "," MNTOPT_GQUOTANOENF);
534	}
535
536	if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT))
537		seq_puts(m, "," MNTOPT_NOQUOTA);
538
539	return 0;
540}
541__uint64_t
542xfs_max_file_offset(
543	unsigned int		blockshift)
544{
545	unsigned int		pagefactor = 1;
546	unsigned int		bitshift = BITS_PER_LONG - 1;
547
548	/* Figure out maximum filesize, on Linux this can depend on
549	 * the filesystem blocksize (on 32 bit platforms).
550	 * __block_write_begin does this in an [unsigned] long...
551	 *      page->index << (PAGE_CACHE_SHIFT - bbits)
552	 * So, for page sized blocks (4K on 32 bit platforms),
553	 * this wraps at around 8Tb (hence MAX_LFS_FILESIZE which is
554	 *      (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
555	 * but for smaller blocksizes it is less (bbits = log2 bsize).
556	 * Note1: get_block_t takes a long (implicit cast from above)
557	 * Note2: The Large Block Device (LBD and HAVE_SECTOR_T) patch
558	 * can optionally convert the [unsigned] long from above into
559	 * an [unsigned] long long.
560	 */
561
562#if BITS_PER_LONG == 32
563# if defined(CONFIG_LBDAF)
564	ASSERT(sizeof(sector_t) == 8);
565	pagefactor = PAGE_CACHE_SIZE;
566	bitshift = BITS_PER_LONG;
567# else
568	pagefactor = PAGE_CACHE_SIZE >> (PAGE_CACHE_SHIFT - blockshift);
569# endif
570#endif
571
572	return (((__uint64_t)pagefactor) << bitshift) - 1;
573}
574
575/*
576 * xfs_set_inode32() and xfs_set_inode64() are passed an agcount
577 * because in the growfs case, mp->m_sb.sb_agcount is not updated
578 * yet to the potentially higher ag count.
579 */
580xfs_agnumber_t
581xfs_set_inode32(struct xfs_mount *mp, xfs_agnumber_t agcount)
582{
583	xfs_agnumber_t	index = 0;
584	xfs_agnumber_t	maxagi = 0;
585	xfs_sb_t	*sbp = &mp->m_sb;
586	xfs_agnumber_t	max_metadata;
587	xfs_agino_t	agino;
588	xfs_ino_t	ino;
589	xfs_perag_t	*pag;
590
591	/* Calculate how much should be reserved for inodes to meet
592	 * the max inode percentage.
593	 */
594	if (mp->m_maxicount) {
595		__uint64_t	icount;
596
597		icount = sbp->sb_dblocks * sbp->sb_imax_pct;
598		do_div(icount, 100);
599		icount += sbp->sb_agblocks - 1;
600		do_div(icount, sbp->sb_agblocks);
601		max_metadata = icount;
602	} else {
603		max_metadata = agcount;
604	}
605
606	agino =	XFS_OFFBNO_TO_AGINO(mp, sbp->sb_agblocks - 1, 0);
607
608	for (index = 0; index < agcount; index++) {
609		ino = XFS_AGINO_TO_INO(mp, index, agino);
610
611		if (ino > XFS_MAXINUMBER_32) {
612			pag = xfs_perag_get(mp, index);
613			pag->pagi_inodeok = 0;
614			pag->pagf_metadata = 0;
615			xfs_perag_put(pag);
616			continue;
617		}
618
619		pag = xfs_perag_get(mp, index);
620		pag->pagi_inodeok = 1;
621		maxagi++;
622		if (index < max_metadata)
623			pag->pagf_metadata = 1;
624		xfs_perag_put(pag);
625	}
626	mp->m_flags |= (XFS_MOUNT_32BITINODES |
627			XFS_MOUNT_SMALL_INUMS);
628
629	return maxagi;
630}
631
632xfs_agnumber_t
633xfs_set_inode64(struct xfs_mount *mp, xfs_agnumber_t agcount)
634{
635	xfs_agnumber_t index = 0;
636
637	for (index = 0; index < agcount; index++) {
638		struct xfs_perag	*pag;
639
640		pag = xfs_perag_get(mp, index);
641		pag->pagi_inodeok = 1;
642		pag->pagf_metadata = 0;
643		xfs_perag_put(pag);
644	}
645
646	/* There is no need for lock protection on m_flags,
647	 * the rw_semaphore of the VFS superblock is locked
648	 * during mount/umount/remount operations, so this is
649	 * enough to avoid concurency on the m_flags field
650	 */
651	mp->m_flags &= ~(XFS_MOUNT_32BITINODES |
652			 XFS_MOUNT_SMALL_INUMS);
653	return index;
654}
655
656STATIC int
657xfs_blkdev_get(
658	xfs_mount_t		*mp,
659	const char		*name,
660	struct block_device	**bdevp)
661{
662	int			error = 0;
663
664	*bdevp = blkdev_get_by_path(name, FMODE_READ|FMODE_WRITE|FMODE_EXCL,
665				    mp);
666	if (IS_ERR(*bdevp)) {
667		error = PTR_ERR(*bdevp);
668		xfs_warn(mp, "Invalid device [%s], error=%d", name, error);
669	}
670
671	return error;
672}
673
674STATIC void
675xfs_blkdev_put(
676	struct block_device	*bdev)
677{
678	if (bdev)
679		blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
680}
681
682void
683xfs_blkdev_issue_flush(
684	xfs_buftarg_t		*buftarg)
685{
686	blkdev_issue_flush(buftarg->bt_bdev, GFP_NOFS, NULL);
687}
688
689STATIC void
690xfs_close_devices(
691	struct xfs_mount	*mp)
692{
693	if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
694		struct block_device *logdev = mp->m_logdev_targp->bt_bdev;
695		xfs_free_buftarg(mp, mp->m_logdev_targp);
696		xfs_blkdev_put(logdev);
697	}
698	if (mp->m_rtdev_targp) {
699		struct block_device *rtdev = mp->m_rtdev_targp->bt_bdev;
700		xfs_free_buftarg(mp, mp->m_rtdev_targp);
701		xfs_blkdev_put(rtdev);
702	}
703	xfs_free_buftarg(mp, mp->m_ddev_targp);
704}
705
706/*
707 * The file system configurations are:
708 *	(1) device (partition) with data and internal log
709 *	(2) logical volume with data and log subvolumes.
710 *	(3) logical volume with data, log, and realtime subvolumes.
711 *
712 * We only have to handle opening the log and realtime volumes here if
713 * they are present.  The data subvolume has already been opened by
714 * get_sb_bdev() and is stored in sb->s_bdev.
715 */
716STATIC int
717xfs_open_devices(
718	struct xfs_mount	*mp)
719{
720	struct block_device	*ddev = mp->m_super->s_bdev;
721	struct block_device	*logdev = NULL, *rtdev = NULL;
722	int			error;
723
724	/*
725	 * Open real time and log devices - order is important.
726	 */
727	if (mp->m_logname) {
728		error = xfs_blkdev_get(mp, mp->m_logname, &logdev);
729		if (error)
730			goto out;
731	}
732
733	if (mp->m_rtname) {
734		error = xfs_blkdev_get(mp, mp->m_rtname, &rtdev);
735		if (error)
736			goto out_close_logdev;
737
738		if (rtdev == ddev || rtdev == logdev) {
739			xfs_warn(mp,
740	"Cannot mount filesystem with identical rtdev and ddev/logdev.");
741			error = -EINVAL;
742			goto out_close_rtdev;
743		}
744	}
745
746	/*
747	 * Setup xfs_mount buffer target pointers
748	 */
749	error = -ENOMEM;
750	mp->m_ddev_targp = xfs_alloc_buftarg(mp, ddev);
751	if (!mp->m_ddev_targp)
752		goto out_close_rtdev;
753
754	if (rtdev) {
755		mp->m_rtdev_targp = xfs_alloc_buftarg(mp, rtdev);
756		if (!mp->m_rtdev_targp)
757			goto out_free_ddev_targ;
758	}
759
760	if (logdev && logdev != ddev) {
761		mp->m_logdev_targp = xfs_alloc_buftarg(mp, logdev);
762		if (!mp->m_logdev_targp)
763			goto out_free_rtdev_targ;
764	} else {
765		mp->m_logdev_targp = mp->m_ddev_targp;
766	}
767
768	return 0;
769
770 out_free_rtdev_targ:
771	if (mp->m_rtdev_targp)
772		xfs_free_buftarg(mp, mp->m_rtdev_targp);
773 out_free_ddev_targ:
774	xfs_free_buftarg(mp, mp->m_ddev_targp);
775 out_close_rtdev:
776	xfs_blkdev_put(rtdev);
777 out_close_logdev:
778	if (logdev && logdev != ddev)
779		xfs_blkdev_put(logdev);
780 out:
781	return error;
782}
783
784/*
785 * Setup xfs_mount buffer target pointers based on superblock
786 */
787STATIC int
788xfs_setup_devices(
789	struct xfs_mount	*mp)
790{
791	int			error;
792
793	error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_sectsize);
794	if (error)
795		return error;
796
797	if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
798		unsigned int	log_sector_size = BBSIZE;
799
800		if (xfs_sb_version_hassector(&mp->m_sb))
801			log_sector_size = mp->m_sb.sb_logsectsize;
802		error = xfs_setsize_buftarg(mp->m_logdev_targp,
803					    log_sector_size);
804		if (error)
805			return error;
806	}
807	if (mp->m_rtdev_targp) {
808		error = xfs_setsize_buftarg(mp->m_rtdev_targp,
809					    mp->m_sb.sb_sectsize);
810		if (error)
811			return error;
812	}
813
814	return 0;
815}
816
817STATIC int
818xfs_init_mount_workqueues(
819	struct xfs_mount	*mp)
820{
821	mp->m_buf_workqueue = alloc_workqueue("xfs-buf/%s",
822			WQ_MEM_RECLAIM|WQ_FREEZABLE, 1, mp->m_fsname);
823	if (!mp->m_buf_workqueue)
824		goto out;
825
826	mp->m_data_workqueue = alloc_workqueue("xfs-data/%s",
827			WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
828	if (!mp->m_data_workqueue)
829		goto out_destroy_buf;
830
831	mp->m_unwritten_workqueue = alloc_workqueue("xfs-conv/%s",
832			WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
833	if (!mp->m_unwritten_workqueue)
834		goto out_destroy_data_iodone_queue;
835
836	mp->m_cil_workqueue = alloc_workqueue("xfs-cil/%s",
837			WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
838	if (!mp->m_cil_workqueue)
839		goto out_destroy_unwritten;
840
841	mp->m_reclaim_workqueue = alloc_workqueue("xfs-reclaim/%s",
842			WQ_FREEZABLE, 0, mp->m_fsname);
843	if (!mp->m_reclaim_workqueue)
844		goto out_destroy_cil;
845
846	mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
847			WQ_FREEZABLE|WQ_HIGHPRI, 0, mp->m_fsname);
848	if (!mp->m_log_workqueue)
849		goto out_destroy_reclaim;
850
851	mp->m_eofblocks_workqueue = alloc_workqueue("xfs-eofblocks/%s",
852			WQ_FREEZABLE, 0, mp->m_fsname);
853	if (!mp->m_eofblocks_workqueue)
854		goto out_destroy_log;
855
856	return 0;
857
858out_destroy_log:
859	destroy_workqueue(mp->m_log_workqueue);
860out_destroy_reclaim:
861	destroy_workqueue(mp->m_reclaim_workqueue);
862out_destroy_cil:
863	destroy_workqueue(mp->m_cil_workqueue);
864out_destroy_unwritten:
865	destroy_workqueue(mp->m_unwritten_workqueue);
866out_destroy_data_iodone_queue:
867	destroy_workqueue(mp->m_data_workqueue);
868out_destroy_buf:
869	destroy_workqueue(mp->m_buf_workqueue);
870out:
871	return -ENOMEM;
872}
873
874STATIC void
875xfs_destroy_mount_workqueues(
876	struct xfs_mount	*mp)
877{
878	destroy_workqueue(mp->m_eofblocks_workqueue);
879	destroy_workqueue(mp->m_log_workqueue);
880	destroy_workqueue(mp->m_reclaim_workqueue);
881	destroy_workqueue(mp->m_cil_workqueue);
882	destroy_workqueue(mp->m_data_workqueue);
883	destroy_workqueue(mp->m_unwritten_workqueue);
884	destroy_workqueue(mp->m_buf_workqueue);
885}
886
887/*
888 * Flush all dirty data to disk. Must not be called while holding an XFS_ILOCK
889 * or a page lock. We use sync_inodes_sb() here to ensure we block while waiting
890 * for IO to complete so that we effectively throttle multiple callers to the
891 * rate at which IO is completing.
892 */
893void
894xfs_flush_inodes(
895	struct xfs_mount	*mp)
896{
897	struct super_block	*sb = mp->m_super;
898
899	if (down_read_trylock(&sb->s_umount)) {
900		sync_inodes_sb(sb);
901		up_read(&sb->s_umount);
902	}
903}
904
905/* Catch misguided souls that try to use this interface on XFS */
906STATIC struct inode *
907xfs_fs_alloc_inode(
908	struct super_block	*sb)
909{
910	BUG();
911	return NULL;
912}
913
914/*
915 * Now that the generic code is guaranteed not to be accessing
916 * the linux inode, we can reclaim the inode.
917 */
918STATIC void
919xfs_fs_destroy_inode(
920	struct inode		*inode)
921{
922	struct xfs_inode	*ip = XFS_I(inode);
923
924	trace_xfs_destroy_inode(ip);
925
926	XFS_STATS_INC(vn_reclaim);
927
928	ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0);
929
930	/*
931	 * We should never get here with one of the reclaim flags already set.
932	 */
933	ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIMABLE));
934	ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_IRECLAIM));
935
936	/*
937	 * We always use background reclaim here because even if the
938	 * inode is clean, it still may be under IO and hence we have
939	 * to take the flush lock. The background reclaim path handles
940	 * this more efficiently than we can here, so simply let background
941	 * reclaim tear down all inodes.
942	 */
943	xfs_inode_set_reclaim_tag(ip);
944}
945
946/*
947 * Slab object creation initialisation for the XFS inode.
948 * This covers only the idempotent fields in the XFS inode;
949 * all other fields need to be initialised on allocation
950 * from the slab. This avoids the need to repeatedly initialise
951 * fields in the xfs inode that left in the initialise state
952 * when freeing the inode.
953 */
954STATIC void
955xfs_fs_inode_init_once(
956	void			*inode)
957{
958	struct xfs_inode	*ip = inode;
959
960	memset(ip, 0, sizeof(struct xfs_inode));
961
962	/* vfs inode */
963	inode_init_once(VFS_I(ip));
964
965	/* xfs inode */
966	atomic_set(&ip->i_pincount, 0);
967	spin_lock_init(&ip->i_flags_lock);
968
969	mrlock_init(&ip->i_mmaplock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER,
970		     "xfsino", ip->i_ino);
971	mrlock_init(&ip->i_lock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER,
972		     "xfsino", ip->i_ino);
973}
974
975STATIC void
976xfs_fs_evict_inode(
977	struct inode		*inode)
978{
979	xfs_inode_t		*ip = XFS_I(inode);
980
981	ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock));
982
983	trace_xfs_evict_inode(ip);
984
985	truncate_inode_pages_final(&inode->i_data);
986	clear_inode(inode);
987	XFS_STATS_INC(vn_rele);
988	XFS_STATS_INC(vn_remove);
989
990	xfs_inactive(ip);
991}
992
993/*
994 * We do an unlocked check for XFS_IDONTCACHE here because we are already
995 * serialised against cache hits here via the inode->i_lock and igrab() in
996 * xfs_iget_cache_hit(). Hence a lookup that might clear this flag will not be
997 * racing with us, and it avoids needing to grab a spinlock here for every inode
998 * we drop the final reference on.
999 */
1000STATIC int
1001xfs_fs_drop_inode(
1002	struct inode		*inode)
1003{
1004	struct xfs_inode	*ip = XFS_I(inode);
1005
1006	return generic_drop_inode(inode) || (ip->i_flags & XFS_IDONTCACHE);
1007}
1008
1009STATIC void
1010xfs_free_fsname(
1011	struct xfs_mount	*mp)
1012{
1013	kfree(mp->m_fsname);
1014	kfree(mp->m_rtname);
1015	kfree(mp->m_logname);
1016}
1017
1018STATIC int
1019xfs_fs_sync_fs(
1020	struct super_block	*sb,
1021	int			wait)
1022{
1023	struct xfs_mount	*mp = XFS_M(sb);
1024
1025	/*
1026	 * Doing anything during the async pass would be counterproductive.
1027	 */
1028	if (!wait)
1029		return 0;
1030
1031	xfs_log_force(mp, XFS_LOG_SYNC);
1032	if (laptop_mode) {
1033		/*
1034		 * The disk must be active because we're syncing.
1035		 * We schedule log work now (now that the disk is
1036		 * active) instead of later (when it might not be).
1037		 */
1038		flush_delayed_work(&mp->m_log->l_work);
1039	}
1040
1041	return 0;
1042}
1043
1044STATIC int
1045xfs_fs_statfs(
1046	struct dentry		*dentry,
1047	struct kstatfs		*statp)
1048{
1049	struct xfs_mount	*mp = XFS_M(dentry->d_sb);
1050	xfs_sb_t		*sbp = &mp->m_sb;
1051	struct xfs_inode	*ip = XFS_I(d_inode(dentry));
1052	__uint64_t		fakeinos, id;
1053	__uint64_t		icount;
1054	__uint64_t		ifree;
1055	__uint64_t		fdblocks;
1056	xfs_extlen_t		lsize;
1057	__int64_t		ffree;
1058
1059	statp->f_type = XFS_SB_MAGIC;
1060	statp->f_namelen = MAXNAMELEN - 1;
1061
1062	id = huge_encode_dev(mp->m_ddev_targp->bt_dev);
1063	statp->f_fsid.val[0] = (u32)id;
1064	statp->f_fsid.val[1] = (u32)(id >> 32);
1065
1066	icount = percpu_counter_sum(&mp->m_icount);
1067	ifree = percpu_counter_sum(&mp->m_ifree);
1068	fdblocks = percpu_counter_sum(&mp->m_fdblocks);
1069
1070	spin_lock(&mp->m_sb_lock);
1071	statp->f_bsize = sbp->sb_blocksize;
1072	lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0;
1073	statp->f_blocks = sbp->sb_dblocks - lsize;
1074	spin_unlock(&mp->m_sb_lock);
1075
1076	statp->f_bfree = fdblocks - XFS_ALLOC_SET_ASIDE(mp);
1077	statp->f_bavail = statp->f_bfree;
1078
1079	fakeinos = statp->f_bfree << sbp->sb_inopblog;
1080	statp->f_files = MIN(icount + fakeinos, (__uint64_t)XFS_MAXINUMBER);
1081	if (mp->m_maxicount)
1082		statp->f_files = min_t(typeof(statp->f_files),
1083					statp->f_files,
1084					mp->m_maxicount);
1085
1086	/* If sb_icount overshot maxicount, report actual allocation */
1087	statp->f_files = max_t(typeof(statp->f_files),
1088					statp->f_files,
1089					sbp->sb_icount);
1090
1091	/* make sure statp->f_ffree does not underflow */
1092	ffree = statp->f_files - (icount - ifree);
1093	statp->f_ffree = max_t(__int64_t, ffree, 0);
1094
1095
1096	if ((ip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) &&
1097	    ((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
1098			      (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
1099		xfs_qm_statvfs(ip, statp);
1100	return 0;
1101}
1102
1103STATIC void
1104xfs_save_resvblks(struct xfs_mount *mp)
1105{
1106	__uint64_t resblks = 0;
1107
1108	mp->m_resblks_save = mp->m_resblks;
1109	xfs_reserve_blocks(mp, &resblks, NULL);
1110}
1111
1112STATIC void
1113xfs_restore_resvblks(struct xfs_mount *mp)
1114{
1115	__uint64_t resblks;
1116
1117	if (mp->m_resblks_save) {
1118		resblks = mp->m_resblks_save;
1119		mp->m_resblks_save = 0;
1120	} else
1121		resblks = xfs_default_resblks(mp);
1122
1123	xfs_reserve_blocks(mp, &resblks, NULL);
1124}
1125
1126/*
1127 * Trigger writeback of all the dirty metadata in the file system.
1128 *
1129 * This ensures that the metadata is written to their location on disk rather
1130 * than just existing in transactions in the log. This means after a quiesce
1131 * there is no log replay required to write the inodes to disk - this is the
1132 * primary difference between a sync and a quiesce.
1133 *
1134 * Note: xfs_log_quiesce() stops background log work - the callers must ensure
1135 * it is started again when appropriate.
1136 */
1137static void
1138xfs_quiesce_attr(
1139	struct xfs_mount	*mp)
1140{
1141	int	error = 0;
1142
1143	/* wait for all modifications to complete */
1144	while (atomic_read(&mp->m_active_trans) > 0)
1145		delay(100);
1146
1147	/* force the log to unpin objects from the now complete transactions */
1148	xfs_log_force(mp, XFS_LOG_SYNC);
1149
1150	/* reclaim inodes to do any IO before the freeze completes */
1151	xfs_reclaim_inodes(mp, 0);
1152	xfs_reclaim_inodes(mp, SYNC_WAIT);
1153
1154	/* Push the superblock and write an unmount record */
1155	error = xfs_log_sbcount(mp);
1156	if (error)
1157		xfs_warn(mp, "xfs_attr_quiesce: failed to log sb changes. "
1158				"Frozen image may not be consistent.");
1159	/*
1160	 * Just warn here till VFS can correctly support
1161	 * read-only remount without racing.
1162	 */
1163	WARN_ON(atomic_read(&mp->m_active_trans) != 0);
1164
1165	xfs_log_quiesce(mp);
1166}
1167
1168STATIC int
1169xfs_fs_remount(
1170	struct super_block	*sb,
1171	int			*flags,
1172	char			*options)
1173{
1174	struct xfs_mount	*mp = XFS_M(sb);
1175	xfs_sb_t		*sbp = &mp->m_sb;
1176	substring_t		args[MAX_OPT_ARGS];
1177	char			*p;
1178	int			error;
1179
1180	sync_filesystem(sb);
1181	while ((p = strsep(&options, ",")) != NULL) {
1182		int token;
1183
1184		if (!*p)
1185			continue;
1186
1187		token = match_token(p, tokens, args);
1188		switch (token) {
1189		case Opt_barrier:
1190			mp->m_flags |= XFS_MOUNT_BARRIER;
1191			break;
1192		case Opt_nobarrier:
1193			mp->m_flags &= ~XFS_MOUNT_BARRIER;
1194			break;
1195		case Opt_inode64:
1196			mp->m_maxagi = xfs_set_inode64(mp, sbp->sb_agcount);
1197			break;
1198		case Opt_inode32:
1199			mp->m_maxagi = xfs_set_inode32(mp, sbp->sb_agcount);
1200			break;
1201		default:
1202			/*
1203			 * Logically we would return an error here to prevent
1204			 * users from believing they might have changed
1205			 * mount options using remount which can't be changed.
1206			 *
1207			 * But unfortunately mount(8) adds all options from
1208			 * mtab and fstab to the mount arguments in some cases
1209			 * so we can't blindly reject options, but have to
1210			 * check for each specified option if it actually
1211			 * differs from the currently set option and only
1212			 * reject it if that's the case.
1213			 *
1214			 * Until that is implemented we return success for
1215			 * every remount request, and silently ignore all
1216			 * options that we can't actually change.
1217			 */
1218#if 0
1219			xfs_info(mp,
1220		"mount option \"%s\" not supported for remount", p);
1221			return -EINVAL;
1222#else
1223			break;
1224#endif
1225		}
1226	}
1227
1228	/* ro -> rw */
1229	if ((mp->m_flags & XFS_MOUNT_RDONLY) && !(*flags & MS_RDONLY)) {
1230		if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
1231			xfs_warn(mp,
1232		"ro->rw transition prohibited on norecovery mount");
1233			return -EINVAL;
1234		}
1235
1236		if (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
1237		    xfs_sb_has_ro_compat_feature(sbp,
1238					XFS_SB_FEAT_RO_COMPAT_UNKNOWN)) {
1239			xfs_warn(mp,
1240"ro->rw transition prohibited on unknown (0x%x) ro-compat filesystem",
1241				(sbp->sb_features_ro_compat &
1242					XFS_SB_FEAT_RO_COMPAT_UNKNOWN));
1243			return -EINVAL;
1244		}
1245
1246		mp->m_flags &= ~XFS_MOUNT_RDONLY;
1247
1248		/*
1249		 * If this is the first remount to writeable state we
1250		 * might have some superblock changes to update.
1251		 */
1252		if (mp->m_update_sb) {
1253			error = xfs_sync_sb(mp, false);
1254			if (error) {
1255				xfs_warn(mp, "failed to write sb changes");
1256				return error;
1257			}
1258			mp->m_update_sb = false;
1259		}
1260
1261		/*
1262		 * Fill out the reserve pool if it is empty. Use the stashed
1263		 * value if it is non-zero, otherwise go with the default.
1264		 */
1265		xfs_restore_resvblks(mp);
1266		xfs_log_work_queue(mp);
1267	}
1268
1269	/* rw -> ro */
1270	if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) {
1271		/*
1272		 * Before we sync the metadata, we need to free up the reserve
1273		 * block pool so that the used block count in the superblock on
1274		 * disk is correct at the end of the remount. Stash the current
1275		 * reserve pool size so that if we get remounted rw, we can
1276		 * return it to the same size.
1277		 */
1278		xfs_save_resvblks(mp);
1279		xfs_quiesce_attr(mp);
1280		mp->m_flags |= XFS_MOUNT_RDONLY;
1281	}
1282
1283	return 0;
1284}
1285
1286/*
1287 * Second stage of a freeze. The data is already frozen so we only
1288 * need to take care of the metadata. Once that's done sync the superblock
1289 * to the log to dirty it in case of a crash while frozen. This ensures that we
1290 * will recover the unlinked inode lists on the next mount.
1291 */
1292STATIC int
1293xfs_fs_freeze(
1294	struct super_block	*sb)
1295{
1296	struct xfs_mount	*mp = XFS_M(sb);
1297
1298	xfs_save_resvblks(mp);
1299	xfs_quiesce_attr(mp);
1300	return xfs_sync_sb(mp, true);
1301}
1302
1303STATIC int
1304xfs_fs_unfreeze(
1305	struct super_block	*sb)
1306{
1307	struct xfs_mount	*mp = XFS_M(sb);
1308
1309	xfs_restore_resvblks(mp);
1310	xfs_log_work_queue(mp);
1311	return 0;
1312}
1313
1314STATIC int
1315xfs_fs_show_options(
1316	struct seq_file		*m,
1317	struct dentry		*root)
1318{
1319	return xfs_showargs(XFS_M(root->d_sb), m);
1320}
1321
1322/*
1323 * This function fills in xfs_mount_t fields based on mount args.
1324 * Note: the superblock _has_ now been read in.
1325 */
1326STATIC int
1327xfs_finish_flags(
1328	struct xfs_mount	*mp)
1329{
1330	int			ronly = (mp->m_flags & XFS_MOUNT_RDONLY);
1331
1332	/* Fail a mount where the logbuf is smaller than the log stripe */
1333	if (xfs_sb_version_haslogv2(&mp->m_sb)) {
1334		if (mp->m_logbsize <= 0 &&
1335		    mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE) {
1336			mp->m_logbsize = mp->m_sb.sb_logsunit;
1337		} else if (mp->m_logbsize > 0 &&
1338			   mp->m_logbsize < mp->m_sb.sb_logsunit) {
1339			xfs_warn(mp,
1340		"logbuf size must be greater than or equal to log stripe size");
1341			return -EINVAL;
1342		}
1343	} else {
1344		/* Fail a mount if the logbuf is larger than 32K */
1345		if (mp->m_logbsize > XLOG_BIG_RECORD_BSIZE) {
1346			xfs_warn(mp,
1347		"logbuf size for version 1 logs must be 16K or 32K");
1348			return -EINVAL;
1349		}
1350	}
1351
1352	/*
1353	 * V5 filesystems always use attr2 format for attributes.
1354	 */
1355	if (xfs_sb_version_hascrc(&mp->m_sb) &&
1356	    (mp->m_flags & XFS_MOUNT_NOATTR2)) {
1357		xfs_warn(mp,
1358"Cannot mount a V5 filesystem as %s. %s is always enabled for V5 filesystems.",
1359			MNTOPT_NOATTR2, MNTOPT_ATTR2);
1360		return -EINVAL;
1361	}
1362
1363	/*
1364	 * mkfs'ed attr2 will turn on attr2 mount unless explicitly
1365	 * told by noattr2 to turn it off
1366	 */
1367	if (xfs_sb_version_hasattr2(&mp->m_sb) &&
1368	    !(mp->m_flags & XFS_MOUNT_NOATTR2))
1369		mp->m_flags |= XFS_MOUNT_ATTR2;
1370
1371	/*
1372	 * prohibit r/w mounts of read-only filesystems
1373	 */
1374	if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) {
1375		xfs_warn(mp,
1376			"cannot mount a read-only filesystem as read-write");
1377		return -EROFS;
1378	}
1379
1380	if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) &&
1381	    (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) &&
1382	    !xfs_sb_version_has_pquotino(&mp->m_sb)) {
1383		xfs_warn(mp,
1384		  "Super block does not support project and group quota together");
1385		return -EINVAL;
1386	}
1387
1388	return 0;
1389}
1390
1391static int
1392xfs_init_percpu_counters(
1393	struct xfs_mount	*mp)
1394{
1395	int		error;
1396
1397	error = percpu_counter_init(&mp->m_icount, 0, GFP_KERNEL);
1398	if (error)
1399		return -ENOMEM;
1400
1401	error = percpu_counter_init(&mp->m_ifree, 0, GFP_KERNEL);
1402	if (error)
1403		goto free_icount;
1404
1405	error = percpu_counter_init(&mp->m_fdblocks, 0, GFP_KERNEL);
1406	if (error)
1407		goto free_ifree;
1408
1409	return 0;
1410
1411free_ifree:
1412	percpu_counter_destroy(&mp->m_ifree);
1413free_icount:
1414	percpu_counter_destroy(&mp->m_icount);
1415	return -ENOMEM;
1416}
1417
1418void
1419xfs_reinit_percpu_counters(
1420	struct xfs_mount	*mp)
1421{
1422	percpu_counter_set(&mp->m_icount, mp->m_sb.sb_icount);
1423	percpu_counter_set(&mp->m_ifree, mp->m_sb.sb_ifree);
1424	percpu_counter_set(&mp->m_fdblocks, mp->m_sb.sb_fdblocks);
1425}
1426
1427static void
1428xfs_destroy_percpu_counters(
1429	struct xfs_mount	*mp)
1430{
1431	percpu_counter_destroy(&mp->m_icount);
1432	percpu_counter_destroy(&mp->m_ifree);
1433	percpu_counter_destroy(&mp->m_fdblocks);
1434}
1435
1436STATIC int
1437xfs_fs_fill_super(
1438	struct super_block	*sb,
1439	void			*data,
1440	int			silent)
1441{
1442	struct inode		*root;
1443	struct xfs_mount	*mp = NULL;
1444	int			flags = 0, error = -ENOMEM;
1445
1446	mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL);
1447	if (!mp)
1448		goto out;
1449
1450	spin_lock_init(&mp->m_sb_lock);
1451	mutex_init(&mp->m_growlock);
1452	atomic_set(&mp->m_active_trans, 0);
1453	INIT_DELAYED_WORK(&mp->m_reclaim_work, xfs_reclaim_worker);
1454	INIT_DELAYED_WORK(&mp->m_eofblocks_work, xfs_eofblocks_worker);
1455	mp->m_kobj.kobject.kset = xfs_kset;
1456
1457	mp->m_super = sb;
1458	sb->s_fs_info = mp;
1459
1460	error = xfs_parseargs(mp, (char *)data);
1461	if (error)
1462		goto out_free_fsname;
1463
1464	sb_min_blocksize(sb, BBSIZE);
1465	sb->s_xattr = xfs_xattr_handlers;
1466	sb->s_export_op = &xfs_export_operations;
1467#ifdef CONFIG_XFS_QUOTA
1468	sb->s_qcop = &xfs_quotactl_operations;
1469	sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
1470#endif
1471	sb->s_op = &xfs_super_operations;
1472
1473	if (silent)
1474		flags |= XFS_MFSI_QUIET;
1475
1476	error = xfs_open_devices(mp);
1477	if (error)
1478		goto out_free_fsname;
1479
1480	error = xfs_init_mount_workqueues(mp);
1481	if (error)
1482		goto out_close_devices;
1483
1484	error = xfs_init_percpu_counters(mp);
1485	if (error)
1486		goto out_destroy_workqueues;
1487
1488	error = xfs_readsb(mp, flags);
1489	if (error)
1490		goto out_destroy_counters;
1491
1492	error = xfs_finish_flags(mp);
1493	if (error)
1494		goto out_free_sb;
1495
1496	error = xfs_setup_devices(mp);
1497	if (error)
1498		goto out_free_sb;
1499
1500	error = xfs_filestream_mount(mp);
1501	if (error)
1502		goto out_free_sb;
1503
1504	/*
1505	 * we must configure the block size in the superblock before we run the
1506	 * full mount process as the mount process can lookup and cache inodes.
1507	 */
1508	sb->s_magic = XFS_SB_MAGIC;
1509	sb->s_blocksize = mp->m_sb.sb_blocksize;
1510	sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
1511	sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits);
1512	sb->s_max_links = XFS_MAXLINK;
1513	sb->s_time_gran = 1;
1514	set_posix_acl_flag(sb);
1515
1516	/* version 5 superblocks support inode version counters. */
1517	if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
1518		sb->s_flags |= MS_I_VERSION;
1519
1520	error = xfs_mountfs(mp);
1521	if (error)
1522		goto out_filestream_unmount;
1523
1524	root = igrab(VFS_I(mp->m_rootip));
1525	if (!root) {
1526		error = -ENOENT;
1527		goto out_unmount;
1528	}
1529	sb->s_root = d_make_root(root);
1530	if (!sb->s_root) {
1531		error = -ENOMEM;
1532		goto out_unmount;
1533	}
1534
1535	return 0;
1536
1537 out_filestream_unmount:
1538	xfs_filestream_unmount(mp);
1539 out_free_sb:
1540	xfs_freesb(mp);
1541 out_destroy_counters:
1542	xfs_destroy_percpu_counters(mp);
1543out_destroy_workqueues:
1544	xfs_destroy_mount_workqueues(mp);
1545 out_close_devices:
1546	xfs_close_devices(mp);
1547 out_free_fsname:
1548	xfs_free_fsname(mp);
1549	kfree(mp);
1550 out:
1551	return error;
1552
1553 out_unmount:
1554	xfs_filestream_unmount(mp);
1555	xfs_unmountfs(mp);
1556	goto out_free_sb;
1557}
1558
1559STATIC void
1560xfs_fs_put_super(
1561	struct super_block	*sb)
1562{
1563	struct xfs_mount	*mp = XFS_M(sb);
1564
1565	xfs_notice(mp, "Unmounting Filesystem");
1566	xfs_filestream_unmount(mp);
1567	xfs_unmountfs(mp);
1568
1569	xfs_freesb(mp);
1570	xfs_destroy_percpu_counters(mp);
1571	xfs_destroy_mount_workqueues(mp);
1572	xfs_close_devices(mp);
1573	xfs_free_fsname(mp);
1574	kfree(mp);
1575}
1576
1577STATIC struct dentry *
1578xfs_fs_mount(
1579	struct file_system_type	*fs_type,
1580	int			flags,
1581	const char		*dev_name,
1582	void			*data)
1583{
1584	return mount_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super);
1585}
1586
1587static long
1588xfs_fs_nr_cached_objects(
1589	struct super_block	*sb,
1590	struct shrink_control	*sc)
1591{
1592	return xfs_reclaim_inodes_count(XFS_M(sb));
1593}
1594
1595static long
1596xfs_fs_free_cached_objects(
1597	struct super_block	*sb,
1598	struct shrink_control	*sc)
1599{
1600	return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan);
1601}
1602
1603static const struct super_operations xfs_super_operations = {
1604	.alloc_inode		= xfs_fs_alloc_inode,
1605	.destroy_inode		= xfs_fs_destroy_inode,
1606	.evict_inode		= xfs_fs_evict_inode,
1607	.drop_inode		= xfs_fs_drop_inode,
1608	.put_super		= xfs_fs_put_super,
1609	.sync_fs		= xfs_fs_sync_fs,
1610	.freeze_fs		= xfs_fs_freeze,
1611	.unfreeze_fs		= xfs_fs_unfreeze,
1612	.statfs			= xfs_fs_statfs,
1613	.remount_fs		= xfs_fs_remount,
1614	.show_options		= xfs_fs_show_options,
1615	.nr_cached_objects	= xfs_fs_nr_cached_objects,
1616	.free_cached_objects	= xfs_fs_free_cached_objects,
1617};
1618
1619static struct file_system_type xfs_fs_type = {
1620	.owner			= THIS_MODULE,
1621	.name			= "xfs",
1622	.mount			= xfs_fs_mount,
1623	.kill_sb		= kill_block_super,
1624	.fs_flags		= FS_REQUIRES_DEV,
1625};
1626MODULE_ALIAS_FS("xfs");
1627
1628STATIC int __init
1629xfs_init_zones(void)
1630{
1631
1632	xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend");
1633	if (!xfs_ioend_zone)
1634		goto out;
1635
1636	xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE,
1637						  xfs_ioend_zone);
1638	if (!xfs_ioend_pool)
1639		goto out_destroy_ioend_zone;
1640
1641	xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t),
1642						"xfs_log_ticket");
1643	if (!xfs_log_ticket_zone)
1644		goto out_destroy_ioend_pool;
1645
1646	xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t),
1647						"xfs_bmap_free_item");
1648	if (!xfs_bmap_free_item_zone)
1649		goto out_destroy_log_ticket_zone;
1650
1651	xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t),
1652						"xfs_btree_cur");
1653	if (!xfs_btree_cur_zone)
1654		goto out_destroy_bmap_free_item_zone;
1655
1656	xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t),
1657						"xfs_da_state");
1658	if (!xfs_da_state_zone)
1659		goto out_destroy_btree_cur_zone;
1660
1661	xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork");
1662	if (!xfs_ifork_zone)
1663		goto out_destroy_da_state_zone;
1664
1665	xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans");
1666	if (!xfs_trans_zone)
1667		goto out_destroy_ifork_zone;
1668
1669	xfs_log_item_desc_zone =
1670		kmem_zone_init(sizeof(struct xfs_log_item_desc),
1671			       "xfs_log_item_desc");
1672	if (!xfs_log_item_desc_zone)
1673		goto out_destroy_trans_zone;
1674
1675	/*
1676	 * The size of the zone allocated buf log item is the maximum
1677	 * size possible under XFS.  This wastes a little bit of memory,
1678	 * but it is much faster.
1679	 */
1680	xfs_buf_item_zone = kmem_zone_init(sizeof(struct xfs_buf_log_item),
1681					   "xfs_buf_item");
1682	if (!xfs_buf_item_zone)
1683		goto out_destroy_log_item_desc_zone;
1684
1685	xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) +
1686			((XFS_EFD_MAX_FAST_EXTENTS - 1) *
1687				 sizeof(xfs_extent_t))), "xfs_efd_item");
1688	if (!xfs_efd_zone)
1689		goto out_destroy_buf_item_zone;
1690
1691	xfs_efi_zone = kmem_zone_init((sizeof(xfs_efi_log_item_t) +
1692			((XFS_EFI_MAX_FAST_EXTENTS - 1) *
1693				sizeof(xfs_extent_t))), "xfs_efi_item");
1694	if (!xfs_efi_zone)
1695		goto out_destroy_efd_zone;
1696
1697	xfs_inode_zone =
1698		kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode",
1699			KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | KM_ZONE_SPREAD,
1700			xfs_fs_inode_init_once);
1701	if (!xfs_inode_zone)
1702		goto out_destroy_efi_zone;
1703
1704	xfs_ili_zone =
1705		kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili",
1706					KM_ZONE_SPREAD, NULL);
1707	if (!xfs_ili_zone)
1708		goto out_destroy_inode_zone;
1709	xfs_icreate_zone = kmem_zone_init(sizeof(struct xfs_icreate_item),
1710					"xfs_icr");
1711	if (!xfs_icreate_zone)
1712		goto out_destroy_ili_zone;
1713
1714	return 0;
1715
1716 out_destroy_ili_zone:
1717	kmem_zone_destroy(xfs_ili_zone);
1718 out_destroy_inode_zone:
1719	kmem_zone_destroy(xfs_inode_zone);
1720 out_destroy_efi_zone:
1721	kmem_zone_destroy(xfs_efi_zone);
1722 out_destroy_efd_zone:
1723	kmem_zone_destroy(xfs_efd_zone);
1724 out_destroy_buf_item_zone:
1725	kmem_zone_destroy(xfs_buf_item_zone);
1726 out_destroy_log_item_desc_zone:
1727	kmem_zone_destroy(xfs_log_item_desc_zone);
1728 out_destroy_trans_zone:
1729	kmem_zone_destroy(xfs_trans_zone);
1730 out_destroy_ifork_zone:
1731	kmem_zone_destroy(xfs_ifork_zone);
1732 out_destroy_da_state_zone:
1733	kmem_zone_destroy(xfs_da_state_zone);
1734 out_destroy_btree_cur_zone:
1735	kmem_zone_destroy(xfs_btree_cur_zone);
1736 out_destroy_bmap_free_item_zone:
1737	kmem_zone_destroy(xfs_bmap_free_item_zone);
1738 out_destroy_log_ticket_zone:
1739	kmem_zone_destroy(xfs_log_ticket_zone);
1740 out_destroy_ioend_pool:
1741	mempool_destroy(xfs_ioend_pool);
1742 out_destroy_ioend_zone:
1743	kmem_zone_destroy(xfs_ioend_zone);
1744 out:
1745	return -ENOMEM;
1746}
1747
1748STATIC void
1749xfs_destroy_zones(void)
1750{
1751	/*
1752	 * Make sure all delayed rcu free are flushed before we
1753	 * destroy caches.
1754	 */
1755	rcu_barrier();
1756	kmem_zone_destroy(xfs_icreate_zone);
1757	kmem_zone_destroy(xfs_ili_zone);
1758	kmem_zone_destroy(xfs_inode_zone);
1759	kmem_zone_destroy(xfs_efi_zone);
1760	kmem_zone_destroy(xfs_efd_zone);
1761	kmem_zone_destroy(xfs_buf_item_zone);
1762	kmem_zone_destroy(xfs_log_item_desc_zone);
1763	kmem_zone_destroy(xfs_trans_zone);
1764	kmem_zone_destroy(xfs_ifork_zone);
1765	kmem_zone_destroy(xfs_da_state_zone);
1766	kmem_zone_destroy(xfs_btree_cur_zone);
1767	kmem_zone_destroy(xfs_bmap_free_item_zone);
1768	kmem_zone_destroy(xfs_log_ticket_zone);
1769	mempool_destroy(xfs_ioend_pool);
1770	kmem_zone_destroy(xfs_ioend_zone);
1771
1772}
1773
1774STATIC int __init
1775xfs_init_workqueues(void)
1776{
1777	/*
1778	 * The allocation workqueue can be used in memory reclaim situations
1779	 * (writepage path), and parallelism is only limited by the number of
1780	 * AGs in all the filesystems mounted. Hence use the default large
1781	 * max_active value for this workqueue.
1782	 */
1783	xfs_alloc_wq = alloc_workqueue("xfsalloc",
1784			WQ_MEM_RECLAIM|WQ_FREEZABLE, 0);
1785	if (!xfs_alloc_wq)
1786		return -ENOMEM;
1787
1788	return 0;
1789}
1790
1791STATIC void
1792xfs_destroy_workqueues(void)
1793{
1794	destroy_workqueue(xfs_alloc_wq);
1795}
1796
1797STATIC int __init
1798init_xfs_fs(void)
1799{
1800	int			error;
1801
1802	printk(KERN_INFO XFS_VERSION_STRING " with "
1803			 XFS_BUILD_OPTIONS " enabled\n");
1804
1805	xfs_dir_startup();
1806
1807	error = xfs_init_zones();
1808	if (error)
1809		goto out;
1810
1811	error = xfs_init_workqueues();
1812	if (error)
1813		goto out_destroy_zones;
1814
1815	error = xfs_mru_cache_init();
1816	if (error)
1817		goto out_destroy_wq;
1818
1819	error = xfs_buf_init();
1820	if (error)
1821		goto out_mru_cache_uninit;
1822
1823	error = xfs_init_procfs();
1824	if (error)
1825		goto out_buf_terminate;
1826
1827	error = xfs_sysctl_register();
1828	if (error)
1829		goto out_cleanup_procfs;
1830
1831	xfs_kset = kset_create_and_add("xfs", NULL, fs_kobj);
1832	if (!xfs_kset) {
1833		error = -ENOMEM;
1834		goto out_sysctl_unregister;;
1835	}
1836
1837#ifdef DEBUG
1838	xfs_dbg_kobj.kobject.kset = xfs_kset;
1839	error = xfs_sysfs_init(&xfs_dbg_kobj, &xfs_dbg_ktype, NULL, "debug");
1840	if (error)
1841		goto out_kset_unregister;
1842#endif
1843
1844	error = xfs_qm_init();
1845	if (error)
1846		goto out_remove_kobj;
1847
1848	error = register_filesystem(&xfs_fs_type);
1849	if (error)
1850		goto out_qm_exit;
1851	return 0;
1852
1853 out_qm_exit:
1854	xfs_qm_exit();
1855 out_remove_kobj:
1856#ifdef DEBUG
1857	xfs_sysfs_del(&xfs_dbg_kobj);
1858 out_kset_unregister:
1859#endif
1860	kset_unregister(xfs_kset);
1861 out_sysctl_unregister:
1862	xfs_sysctl_unregister();
1863 out_cleanup_procfs:
1864	xfs_cleanup_procfs();
1865 out_buf_terminate:
1866	xfs_buf_terminate();
1867 out_mru_cache_uninit:
1868	xfs_mru_cache_uninit();
1869 out_destroy_wq:
1870	xfs_destroy_workqueues();
1871 out_destroy_zones:
1872	xfs_destroy_zones();
1873 out:
1874	return error;
1875}
1876
1877STATIC void __exit
1878exit_xfs_fs(void)
1879{
1880	xfs_qm_exit();
1881	unregister_filesystem(&xfs_fs_type);
1882#ifdef DEBUG
1883	xfs_sysfs_del(&xfs_dbg_kobj);
1884#endif
1885	kset_unregister(xfs_kset);
1886	xfs_sysctl_unregister();
1887	xfs_cleanup_procfs();
1888	xfs_buf_terminate();
1889	xfs_mru_cache_uninit();
1890	xfs_destroy_workqueues();
1891	xfs_destroy_zones();
1892}
1893
1894module_init(init_xfs_fs);
1895module_exit(exit_xfs_fs);
1896
1897MODULE_AUTHOR("Silicon Graphics, Inc.");
1898MODULE_DESCRIPTION(XFS_VERSION_STRING " with " XFS_BUILD_OPTIONS " enabled");
1899MODULE_LICENSE("GPL");
1900