1/*
2 * super.c
3 *
4 * PURPOSE
5 *  Super block routines for the OSTA-UDF(tm) filesystem.
6 *
7 * DESCRIPTION
8 *  OSTA-UDF(tm) = Optical Storage Technology Association
9 *  Universal Disk Format.
10 *
11 *  This code is based on version 2.00 of the UDF specification,
12 *  and revision 3 of the ECMA 167 standard [equivalent to ISO 13346].
13 *    http://www.osta.org/
14 *    http://www.ecma.ch/
15 *    http://www.iso.org/
16 *
17 * COPYRIGHT
18 *  This file is distributed under the terms of the GNU General Public
19 *  License (GPL). Copies of the GPL can be obtained from:
20 *    ftp://prep.ai.mit.edu/pub/gnu/GPL
21 *  Each contributing author retains all rights to their own work.
22 *
23 *  (C) 1998 Dave Boynton
24 *  (C) 1998-2004 Ben Fennema
25 *  (C) 2000 Stelias Computing Inc
26 *
27 * HISTORY
28 *
29 *  09/24/98 dgb  changed to allow compiling outside of kernel, and
30 *                added some debugging.
31 *  10/01/98 dgb  updated to allow (some) possibility of compiling w/2.0.34
32 *  10/16/98      attempting some multi-session support
33 *  10/17/98      added freespace count for "df"
34 *  11/11/98 gr   added novrs option
35 *  11/26/98 dgb  added fileset,anchor mount options
36 *  12/06/98 blf  really hosed things royally. vat/sparing support. sequenced
37 *                vol descs. rewrote option handling based on isofs
38 *  12/20/98      find the free space bitmap (if it exists)
39 */
40
41#include "udfdecl.h"
42
43#include <linux/blkdev.h>
44#include <linux/slab.h>
45#include <linux/kernel.h>
46#include <linux/module.h>
47#include <linux/parser.h>
48#include <linux/stat.h>
49#include <linux/cdrom.h>
50#include <linux/nls.h>
51#include <linux/vfs.h>
52#include <linux/vmalloc.h>
53#include <linux/errno.h>
54#include <linux/mount.h>
55#include <linux/seq_file.h>
56#include <linux/bitmap.h>
57#include <linux/crc-itu-t.h>
58#include <linux/log2.h>
59#include <asm/byteorder.h>
60
61#include "udf_sb.h"
62#include "udf_i.h"
63
64#include <linux/init.h>
65#include <linux/uaccess.h>
66
67#define VDS_POS_PRIMARY_VOL_DESC	0
68#define VDS_POS_UNALLOC_SPACE_DESC	1
69#define VDS_POS_LOGICAL_VOL_DESC	2
70#define VDS_POS_PARTITION_DESC		3
71#define VDS_POS_IMP_USE_VOL_DESC	4
72#define VDS_POS_VOL_DESC_PTR		5
73#define VDS_POS_TERMINATING_DESC	6
74#define VDS_POS_LENGTH			7
75
76#define UDF_DEFAULT_BLOCKSIZE 2048
77
78#define VSD_FIRST_SECTOR_OFFSET		32768
79#define VSD_MAX_SECTOR_OFFSET		0x800000
80
81enum { UDF_MAX_LINKS = 0xffff };
82
83/* These are the "meat" - everything else is stuffing */
84static int udf_fill_super(struct super_block *, void *, int);
85static void udf_put_super(struct super_block *);
86static int udf_sync_fs(struct super_block *, int);
87static int udf_remount_fs(struct super_block *, int *, char *);
88static void udf_load_logicalvolint(struct super_block *, struct kernel_extent_ad);
89static int udf_find_fileset(struct super_block *, struct kernel_lb_addr *,
90			    struct kernel_lb_addr *);
91static void udf_load_fileset(struct super_block *, struct buffer_head *,
92			     struct kernel_lb_addr *);
93static void udf_open_lvid(struct super_block *);
94static void udf_close_lvid(struct super_block *);
95static unsigned int udf_count_free(struct super_block *);
96static int udf_statfs(struct dentry *, struct kstatfs *);
97static int udf_show_options(struct seq_file *, struct dentry *);
98
99struct logicalVolIntegrityDescImpUse *udf_sb_lvidiu(struct super_block *sb)
100{
101	struct logicalVolIntegrityDesc *lvid;
102	unsigned int partnum;
103	unsigned int offset;
104
105	if (!UDF_SB(sb)->s_lvid_bh)
106		return NULL;
107	lvid = (struct logicalVolIntegrityDesc *)UDF_SB(sb)->s_lvid_bh->b_data;
108	partnum = le32_to_cpu(lvid->numOfPartitions);
109	if ((sb->s_blocksize - sizeof(struct logicalVolIntegrityDescImpUse) -
110	     offsetof(struct logicalVolIntegrityDesc, impUse)) /
111	     (2 * sizeof(uint32_t)) < partnum) {
112		udf_err(sb, "Logical volume integrity descriptor corrupted "
113			"(numOfPartitions = %u)!\n", partnum);
114		return NULL;
115	}
116	/* The offset is to skip freeSpaceTable and sizeTable arrays */
117	offset = partnum * 2 * sizeof(uint32_t);
118	return (struct logicalVolIntegrityDescImpUse *)&(lvid->impUse[offset]);
119}
120
121/* UDF filesystem type */
122static struct dentry *udf_mount(struct file_system_type *fs_type,
123		      int flags, const char *dev_name, void *data)
124{
125	return mount_bdev(fs_type, flags, dev_name, data, udf_fill_super);
126}
127
128static struct file_system_type udf_fstype = {
129	.owner		= THIS_MODULE,
130	.name		= "udf",
131	.mount		= udf_mount,
132	.kill_sb	= kill_block_super,
133	.fs_flags	= FS_REQUIRES_DEV,
134};
135MODULE_ALIAS_FS("udf");
136
137static struct kmem_cache *udf_inode_cachep;
138
139static struct inode *udf_alloc_inode(struct super_block *sb)
140{
141	struct udf_inode_info *ei;
142	ei = kmem_cache_alloc(udf_inode_cachep, GFP_KERNEL);
143	if (!ei)
144		return NULL;
145
146	ei->i_unique = 0;
147	ei->i_lenExtents = 0;
148	ei->i_next_alloc_block = 0;
149	ei->i_next_alloc_goal = 0;
150	ei->i_strat4096 = 0;
151	init_rwsem(&ei->i_data_sem);
152	ei->cached_extent.lstart = -1;
153	spin_lock_init(&ei->i_extent_cache_lock);
154
155	return &ei->vfs_inode;
156}
157
158static void udf_i_callback(struct rcu_head *head)
159{
160	struct inode *inode = container_of(head, struct inode, i_rcu);
161	kmem_cache_free(udf_inode_cachep, UDF_I(inode));
162}
163
164static void udf_destroy_inode(struct inode *inode)
165{
166	call_rcu(&inode->i_rcu, udf_i_callback);
167}
168
169static void init_once(void *foo)
170{
171	struct udf_inode_info *ei = (struct udf_inode_info *)foo;
172
173	ei->i_ext.i_data = NULL;
174	inode_init_once(&ei->vfs_inode);
175}
176
177static int __init init_inodecache(void)
178{
179	udf_inode_cachep = kmem_cache_create("udf_inode_cache",
180					     sizeof(struct udf_inode_info),
181					     0, (SLAB_RECLAIM_ACCOUNT |
182						 SLAB_MEM_SPREAD),
183					     init_once);
184	if (!udf_inode_cachep)
185		return -ENOMEM;
186	return 0;
187}
188
189static void destroy_inodecache(void)
190{
191	/*
192	 * Make sure all delayed rcu free inodes are flushed before we
193	 * destroy cache.
194	 */
195	rcu_barrier();
196	kmem_cache_destroy(udf_inode_cachep);
197}
198
199/* Superblock operations */
200static const struct super_operations udf_sb_ops = {
201	.alloc_inode	= udf_alloc_inode,
202	.destroy_inode	= udf_destroy_inode,
203	.write_inode	= udf_write_inode,
204	.evict_inode	= udf_evict_inode,
205	.put_super	= udf_put_super,
206	.sync_fs	= udf_sync_fs,
207	.statfs		= udf_statfs,
208	.remount_fs	= udf_remount_fs,
209	.show_options	= udf_show_options,
210};
211
212struct udf_options {
213	unsigned char novrs;
214	unsigned int blocksize;
215	unsigned int session;
216	unsigned int lastblock;
217	unsigned int anchor;
218	unsigned int volume;
219	unsigned short partition;
220	unsigned int fileset;
221	unsigned int rootdir;
222	unsigned int flags;
223	umode_t umask;
224	kgid_t gid;
225	kuid_t uid;
226	umode_t fmode;
227	umode_t dmode;
228	struct nls_table *nls_map;
229};
230
231static int __init init_udf_fs(void)
232{
233	int err;
234
235	err = init_inodecache();
236	if (err)
237		goto out1;
238	err = register_filesystem(&udf_fstype);
239	if (err)
240		goto out;
241
242	return 0;
243
244out:
245	destroy_inodecache();
246
247out1:
248	return err;
249}
250
251static void __exit exit_udf_fs(void)
252{
253	unregister_filesystem(&udf_fstype);
254	destroy_inodecache();
255}
256
257module_init(init_udf_fs)
258module_exit(exit_udf_fs)
259
260static int udf_sb_alloc_partition_maps(struct super_block *sb, u32 count)
261{
262	struct udf_sb_info *sbi = UDF_SB(sb);
263
264	sbi->s_partmaps = kcalloc(count, sizeof(struct udf_part_map),
265				  GFP_KERNEL);
266	if (!sbi->s_partmaps) {
267		udf_err(sb, "Unable to allocate space for %d partition maps\n",
268			count);
269		sbi->s_partitions = 0;
270		return -ENOMEM;
271	}
272
273	sbi->s_partitions = count;
274	return 0;
275}
276
277static void udf_sb_free_bitmap(struct udf_bitmap *bitmap)
278{
279	int i;
280	int nr_groups = bitmap->s_nr_groups;
281	int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) *
282						nr_groups);
283
284	for (i = 0; i < nr_groups; i++)
285		if (bitmap->s_block_bitmap[i])
286			brelse(bitmap->s_block_bitmap[i]);
287
288	if (size <= PAGE_SIZE)
289		kfree(bitmap);
290	else
291		vfree(bitmap);
292}
293
294static void udf_free_partition(struct udf_part_map *map)
295{
296	int i;
297	struct udf_meta_data *mdata;
298
299	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE)
300		iput(map->s_uspace.s_table);
301	if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE)
302		iput(map->s_fspace.s_table);
303	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP)
304		udf_sb_free_bitmap(map->s_uspace.s_bitmap);
305	if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP)
306		udf_sb_free_bitmap(map->s_fspace.s_bitmap);
307	if (map->s_partition_type == UDF_SPARABLE_MAP15)
308		for (i = 0; i < 4; i++)
309			brelse(map->s_type_specific.s_sparing.s_spar_map[i]);
310	else if (map->s_partition_type == UDF_METADATA_MAP25) {
311		mdata = &map->s_type_specific.s_metadata;
312		iput(mdata->s_metadata_fe);
313		mdata->s_metadata_fe = NULL;
314
315		iput(mdata->s_mirror_fe);
316		mdata->s_mirror_fe = NULL;
317
318		iput(mdata->s_bitmap_fe);
319		mdata->s_bitmap_fe = NULL;
320	}
321}
322
323static void udf_sb_free_partitions(struct super_block *sb)
324{
325	struct udf_sb_info *sbi = UDF_SB(sb);
326	int i;
327	if (sbi->s_partmaps == NULL)
328		return;
329	for (i = 0; i < sbi->s_partitions; i++)
330		udf_free_partition(&sbi->s_partmaps[i]);
331	kfree(sbi->s_partmaps);
332	sbi->s_partmaps = NULL;
333}
334
335static int udf_show_options(struct seq_file *seq, struct dentry *root)
336{
337	struct super_block *sb = root->d_sb;
338	struct udf_sb_info *sbi = UDF_SB(sb);
339
340	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_STRICT))
341		seq_puts(seq, ",nostrict");
342	if (UDF_QUERY_FLAG(sb, UDF_FLAG_BLOCKSIZE_SET))
343		seq_printf(seq, ",bs=%lu", sb->s_blocksize);
344	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNHIDE))
345		seq_puts(seq, ",unhide");
346	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UNDELETE))
347		seq_puts(seq, ",undelete");
348	if (!UDF_QUERY_FLAG(sb, UDF_FLAG_USE_AD_IN_ICB))
349		seq_puts(seq, ",noadinicb");
350	if (UDF_QUERY_FLAG(sb, UDF_FLAG_USE_SHORT_AD))
351		seq_puts(seq, ",shortad");
352	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_FORGET))
353		seq_puts(seq, ",uid=forget");
354	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_IGNORE))
355		seq_puts(seq, ",uid=ignore");
356	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_FORGET))
357		seq_puts(seq, ",gid=forget");
358	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_IGNORE))
359		seq_puts(seq, ",gid=ignore");
360	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_SET))
361		seq_printf(seq, ",uid=%u", from_kuid(&init_user_ns, sbi->s_uid));
362	if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_SET))
363		seq_printf(seq, ",gid=%u", from_kgid(&init_user_ns, sbi->s_gid));
364	if (sbi->s_umask != 0)
365		seq_printf(seq, ",umask=%ho", sbi->s_umask);
366	if (sbi->s_fmode != UDF_INVALID_MODE)
367		seq_printf(seq, ",mode=%ho", sbi->s_fmode);
368	if (sbi->s_dmode != UDF_INVALID_MODE)
369		seq_printf(seq, ",dmode=%ho", sbi->s_dmode);
370	if (UDF_QUERY_FLAG(sb, UDF_FLAG_SESSION_SET))
371		seq_printf(seq, ",session=%u", sbi->s_session);
372	if (UDF_QUERY_FLAG(sb, UDF_FLAG_LASTBLOCK_SET))
373		seq_printf(seq, ",lastblock=%u", sbi->s_last_block);
374	if (sbi->s_anchor != 0)
375		seq_printf(seq, ",anchor=%u", sbi->s_anchor);
376	/*
377	 * volume, partition, fileset and rootdir seem to be ignored
378	 * currently
379	 */
380	if (UDF_QUERY_FLAG(sb, UDF_FLAG_UTF8))
381		seq_puts(seq, ",utf8");
382	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP) && sbi->s_nls_map)
383		seq_printf(seq, ",iocharset=%s", sbi->s_nls_map->charset);
384
385	return 0;
386}
387
388/*
389 * udf_parse_options
390 *
391 * PURPOSE
392 *	Parse mount options.
393 *
394 * DESCRIPTION
395 *	The following mount options are supported:
396 *
397 *	gid=		Set the default group.
398 *	umask=		Set the default umask.
399 *	mode=		Set the default file permissions.
400 *	dmode=		Set the default directory permissions.
401 *	uid=		Set the default user.
402 *	bs=		Set the block size.
403 *	unhide		Show otherwise hidden files.
404 *	undelete	Show deleted files in lists.
405 *	adinicb		Embed data in the inode (default)
406 *	noadinicb	Don't embed data in the inode
407 *	shortad		Use short ad's
408 *	longad		Use long ad's (default)
409 *	nostrict	Unset strict conformance
410 *	iocharset=	Set the NLS character set
411 *
412 *	The remaining are for debugging and disaster recovery:
413 *
414 *	novrs		Skip volume sequence recognition
415 *
416 *	The following expect a offset from 0.
417 *
418 *	session=	Set the CDROM session (default= last session)
419 *	anchor=		Override standard anchor location. (default= 256)
420 *	volume=		Override the VolumeDesc location. (unused)
421 *	partition=	Override the PartitionDesc location. (unused)
422 *	lastblock=	Set the last block of the filesystem/
423 *
424 *	The following expect a offset from the partition root.
425 *
426 *	fileset=	Override the fileset block location. (unused)
427 *	rootdir=	Override the root directory location. (unused)
428 *		WARNING: overriding the rootdir to a non-directory may
429 *		yield highly unpredictable results.
430 *
431 * PRE-CONDITIONS
432 *	options		Pointer to mount options string.
433 *	uopts		Pointer to mount options variable.
434 *
435 * POST-CONDITIONS
436 *	<return>	1	Mount options parsed okay.
437 *	<return>	0	Error parsing mount options.
438 *
439 * HISTORY
440 *	July 1, 1997 - Andrew E. Mileski
441 *	Written, tested, and released.
442 */
443
444enum {
445	Opt_novrs, Opt_nostrict, Opt_bs, Opt_unhide, Opt_undelete,
446	Opt_noadinicb, Opt_adinicb, Opt_shortad, Opt_longad,
447	Opt_gid, Opt_uid, Opt_umask, Opt_session, Opt_lastblock,
448	Opt_anchor, Opt_volume, Opt_partition, Opt_fileset,
449	Opt_rootdir, Opt_utf8, Opt_iocharset,
450	Opt_err, Opt_uforget, Opt_uignore, Opt_gforget, Opt_gignore,
451	Opt_fmode, Opt_dmode
452};
453
454static const match_table_t tokens = {
455	{Opt_novrs,	"novrs"},
456	{Opt_nostrict,	"nostrict"},
457	{Opt_bs,	"bs=%u"},
458	{Opt_unhide,	"unhide"},
459	{Opt_undelete,	"undelete"},
460	{Opt_noadinicb,	"noadinicb"},
461	{Opt_adinicb,	"adinicb"},
462	{Opt_shortad,	"shortad"},
463	{Opt_longad,	"longad"},
464	{Opt_uforget,	"uid=forget"},
465	{Opt_uignore,	"uid=ignore"},
466	{Opt_gforget,	"gid=forget"},
467	{Opt_gignore,	"gid=ignore"},
468	{Opt_gid,	"gid=%u"},
469	{Opt_uid,	"uid=%u"},
470	{Opt_umask,	"umask=%o"},
471	{Opt_session,	"session=%u"},
472	{Opt_lastblock,	"lastblock=%u"},
473	{Opt_anchor,	"anchor=%u"},
474	{Opt_volume,	"volume=%u"},
475	{Opt_partition,	"partition=%u"},
476	{Opt_fileset,	"fileset=%u"},
477	{Opt_rootdir,	"rootdir=%u"},
478	{Opt_utf8,	"utf8"},
479	{Opt_iocharset,	"iocharset=%s"},
480	{Opt_fmode,     "mode=%o"},
481	{Opt_dmode,     "dmode=%o"},
482	{Opt_err,	NULL}
483};
484
485static int udf_parse_options(char *options, struct udf_options *uopt,
486			     bool remount)
487{
488	char *p;
489	int option;
490
491	uopt->novrs = 0;
492	uopt->partition = 0xFFFF;
493	uopt->session = 0xFFFFFFFF;
494	uopt->lastblock = 0;
495	uopt->anchor = 0;
496	uopt->volume = 0xFFFFFFFF;
497	uopt->rootdir = 0xFFFFFFFF;
498	uopt->fileset = 0xFFFFFFFF;
499	uopt->nls_map = NULL;
500
501	if (!options)
502		return 1;
503
504	while ((p = strsep(&options, ",")) != NULL) {
505		substring_t args[MAX_OPT_ARGS];
506		int token;
507		unsigned n;
508		if (!*p)
509			continue;
510
511		token = match_token(p, tokens, args);
512		switch (token) {
513		case Opt_novrs:
514			uopt->novrs = 1;
515			break;
516		case Opt_bs:
517			if (match_int(&args[0], &option))
518				return 0;
519			n = option;
520			if (n != 512 && n != 1024 && n != 2048 && n != 4096)
521				return 0;
522			uopt->blocksize = n;
523			uopt->flags |= (1 << UDF_FLAG_BLOCKSIZE_SET);
524			break;
525		case Opt_unhide:
526			uopt->flags |= (1 << UDF_FLAG_UNHIDE);
527			break;
528		case Opt_undelete:
529			uopt->flags |= (1 << UDF_FLAG_UNDELETE);
530			break;
531		case Opt_noadinicb:
532			uopt->flags &= ~(1 << UDF_FLAG_USE_AD_IN_ICB);
533			break;
534		case Opt_adinicb:
535			uopt->flags |= (1 << UDF_FLAG_USE_AD_IN_ICB);
536			break;
537		case Opt_shortad:
538			uopt->flags |= (1 << UDF_FLAG_USE_SHORT_AD);
539			break;
540		case Opt_longad:
541			uopt->flags &= ~(1 << UDF_FLAG_USE_SHORT_AD);
542			break;
543		case Opt_gid:
544			if (match_int(args, &option))
545				return 0;
546			uopt->gid = make_kgid(current_user_ns(), option);
547			if (!gid_valid(uopt->gid))
548				return 0;
549			uopt->flags |= (1 << UDF_FLAG_GID_SET);
550			break;
551		case Opt_uid:
552			if (match_int(args, &option))
553				return 0;
554			uopt->uid = make_kuid(current_user_ns(), option);
555			if (!uid_valid(uopt->uid))
556				return 0;
557			uopt->flags |= (1 << UDF_FLAG_UID_SET);
558			break;
559		case Opt_umask:
560			if (match_octal(args, &option))
561				return 0;
562			uopt->umask = option;
563			break;
564		case Opt_nostrict:
565			uopt->flags &= ~(1 << UDF_FLAG_STRICT);
566			break;
567		case Opt_session:
568			if (match_int(args, &option))
569				return 0;
570			uopt->session = option;
571			if (!remount)
572				uopt->flags |= (1 << UDF_FLAG_SESSION_SET);
573			break;
574		case Opt_lastblock:
575			if (match_int(args, &option))
576				return 0;
577			uopt->lastblock = option;
578			if (!remount)
579				uopt->flags |= (1 << UDF_FLAG_LASTBLOCK_SET);
580			break;
581		case Opt_anchor:
582			if (match_int(args, &option))
583				return 0;
584			uopt->anchor = option;
585			break;
586		case Opt_volume:
587			if (match_int(args, &option))
588				return 0;
589			uopt->volume = option;
590			break;
591		case Opt_partition:
592			if (match_int(args, &option))
593				return 0;
594			uopt->partition = option;
595			break;
596		case Opt_fileset:
597			if (match_int(args, &option))
598				return 0;
599			uopt->fileset = option;
600			break;
601		case Opt_rootdir:
602			if (match_int(args, &option))
603				return 0;
604			uopt->rootdir = option;
605			break;
606		case Opt_utf8:
607			uopt->flags |= (1 << UDF_FLAG_UTF8);
608			break;
609#ifdef CONFIG_UDF_NLS
610		case Opt_iocharset:
611			uopt->nls_map = load_nls(args[0].from);
612			uopt->flags |= (1 << UDF_FLAG_NLS_MAP);
613			break;
614#endif
615		case Opt_uignore:
616			uopt->flags |= (1 << UDF_FLAG_UID_IGNORE);
617			break;
618		case Opt_uforget:
619			uopt->flags |= (1 << UDF_FLAG_UID_FORGET);
620			break;
621		case Opt_gignore:
622			uopt->flags |= (1 << UDF_FLAG_GID_IGNORE);
623			break;
624		case Opt_gforget:
625			uopt->flags |= (1 << UDF_FLAG_GID_FORGET);
626			break;
627		case Opt_fmode:
628			if (match_octal(args, &option))
629				return 0;
630			uopt->fmode = option & 0777;
631			break;
632		case Opt_dmode:
633			if (match_octal(args, &option))
634				return 0;
635			uopt->dmode = option & 0777;
636			break;
637		default:
638			pr_err("bad mount option \"%s\" or missing value\n", p);
639			return 0;
640		}
641	}
642	return 1;
643}
644
645static int udf_remount_fs(struct super_block *sb, int *flags, char *options)
646{
647	struct udf_options uopt;
648	struct udf_sb_info *sbi = UDF_SB(sb);
649	int error = 0;
650	struct logicalVolIntegrityDescImpUse *lvidiu = udf_sb_lvidiu(sb);
651
652	sync_filesystem(sb);
653	if (lvidiu) {
654		int write_rev = le16_to_cpu(lvidiu->minUDFWriteRev);
655		if (write_rev > UDF_MAX_WRITE_VERSION && !(*flags & MS_RDONLY))
656			return -EACCES;
657	}
658
659	uopt.flags = sbi->s_flags;
660	uopt.uid   = sbi->s_uid;
661	uopt.gid   = sbi->s_gid;
662	uopt.umask = sbi->s_umask;
663	uopt.fmode = sbi->s_fmode;
664	uopt.dmode = sbi->s_dmode;
665
666	if (!udf_parse_options(options, &uopt, true))
667		return -EINVAL;
668
669	write_lock(&sbi->s_cred_lock);
670	sbi->s_flags = uopt.flags;
671	sbi->s_uid   = uopt.uid;
672	sbi->s_gid   = uopt.gid;
673	sbi->s_umask = uopt.umask;
674	sbi->s_fmode = uopt.fmode;
675	sbi->s_dmode = uopt.dmode;
676	write_unlock(&sbi->s_cred_lock);
677
678	if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
679		goto out_unlock;
680
681	if (*flags & MS_RDONLY)
682		udf_close_lvid(sb);
683	else
684		udf_open_lvid(sb);
685
686out_unlock:
687	return error;
688}
689
690/* Check Volume Structure Descriptors (ECMA 167 2/9.1) */
691/* We also check any "CD-ROM Volume Descriptor Set" (ECMA 167 2/8.3.1) */
692static loff_t udf_check_vsd(struct super_block *sb)
693{
694	struct volStructDesc *vsd = NULL;
695	loff_t sector = VSD_FIRST_SECTOR_OFFSET;
696	int sectorsize;
697	struct buffer_head *bh = NULL;
698	int nsr02 = 0;
699	int nsr03 = 0;
700	struct udf_sb_info *sbi;
701
702	sbi = UDF_SB(sb);
703	if (sb->s_blocksize < sizeof(struct volStructDesc))
704		sectorsize = sizeof(struct volStructDesc);
705	else
706		sectorsize = sb->s_blocksize;
707
708	sector += (sbi->s_session << sb->s_blocksize_bits);
709
710	udf_debug("Starting at sector %u (%ld byte sectors)\n",
711		  (unsigned int)(sector >> sb->s_blocksize_bits),
712		  sb->s_blocksize);
713	/* Process the sequence (if applicable). The hard limit on the sector
714	 * offset is arbitrary, hopefully large enough so that all valid UDF
715	 * filesystems will be recognised. There is no mention of an upper
716	 * bound to the size of the volume recognition area in the standard.
717	 *  The limit will prevent the code to read all the sectors of a
718	 * specially crafted image (like a bluray disc full of CD001 sectors),
719	 * potentially causing minutes or even hours of uninterruptible I/O
720	 * activity. This actually happened with uninitialised SSD partitions
721	 * (all 0xFF) before the check for the limit and all valid IDs were
722	 * added */
723	for (; !nsr02 && !nsr03 && sector < VSD_MAX_SECTOR_OFFSET;
724	     sector += sectorsize) {
725		/* Read a block */
726		bh = udf_tread(sb, sector >> sb->s_blocksize_bits);
727		if (!bh)
728			break;
729
730		/* Look for ISO  descriptors */
731		vsd = (struct volStructDesc *)(bh->b_data +
732					      (sector & (sb->s_blocksize - 1)));
733
734		if (!strncmp(vsd->stdIdent, VSD_STD_ID_CD001,
735				    VSD_STD_ID_LEN)) {
736			switch (vsd->structType) {
737			case 0:
738				udf_debug("ISO9660 Boot Record found\n");
739				break;
740			case 1:
741				udf_debug("ISO9660 Primary Volume Descriptor found\n");
742				break;
743			case 2:
744				udf_debug("ISO9660 Supplementary Volume Descriptor found\n");
745				break;
746			case 3:
747				udf_debug("ISO9660 Volume Partition Descriptor found\n");
748				break;
749			case 255:
750				udf_debug("ISO9660 Volume Descriptor Set Terminator found\n");
751				break;
752			default:
753				udf_debug("ISO9660 VRS (%u) found\n",
754					  vsd->structType);
755				break;
756			}
757		} else if (!strncmp(vsd->stdIdent, VSD_STD_ID_BEA01,
758				    VSD_STD_ID_LEN))
759			; /* nothing */
760		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_TEA01,
761				    VSD_STD_ID_LEN)) {
762			brelse(bh);
763			break;
764		} else if (!strncmp(vsd->stdIdent, VSD_STD_ID_NSR02,
765				    VSD_STD_ID_LEN))
766			nsr02 = sector;
767		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_NSR03,
768				    VSD_STD_ID_LEN))
769			nsr03 = sector;
770		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_BOOT2,
771				    VSD_STD_ID_LEN))
772			; /* nothing */
773		else if (!strncmp(vsd->stdIdent, VSD_STD_ID_CDW02,
774				    VSD_STD_ID_LEN))
775			; /* nothing */
776		else {
777			/* invalid id : end of volume recognition area */
778			brelse(bh);
779			break;
780		}
781		brelse(bh);
782	}
783
784	if (nsr03)
785		return nsr03;
786	else if (nsr02)
787		return nsr02;
788	else if (!bh && sector - (sbi->s_session << sb->s_blocksize_bits) ==
789			VSD_FIRST_SECTOR_OFFSET)
790		return -1;
791	else
792		return 0;
793}
794
795static int udf_find_fileset(struct super_block *sb,
796			    struct kernel_lb_addr *fileset,
797			    struct kernel_lb_addr *root)
798{
799	struct buffer_head *bh = NULL;
800	long lastblock;
801	uint16_t ident;
802	struct udf_sb_info *sbi;
803
804	if (fileset->logicalBlockNum != 0xFFFFFFFF ||
805	    fileset->partitionReferenceNum != 0xFFFF) {
806		bh = udf_read_ptagged(sb, fileset, 0, &ident);
807
808		if (!bh) {
809			return 1;
810		} else if (ident != TAG_IDENT_FSD) {
811			brelse(bh);
812			return 1;
813		}
814
815	}
816
817	sbi = UDF_SB(sb);
818	if (!bh) {
819		/* Search backwards through the partitions */
820		struct kernel_lb_addr newfileset;
821
822/* --> cvg: FIXME - is it reasonable? */
823		return 1;
824
825		for (newfileset.partitionReferenceNum = sbi->s_partitions - 1;
826		     (newfileset.partitionReferenceNum != 0xFFFF &&
827		      fileset->logicalBlockNum == 0xFFFFFFFF &&
828		      fileset->partitionReferenceNum == 0xFFFF);
829		     newfileset.partitionReferenceNum--) {
830			lastblock = sbi->s_partmaps
831					[newfileset.partitionReferenceNum]
832						.s_partition_len;
833			newfileset.logicalBlockNum = 0;
834
835			do {
836				bh = udf_read_ptagged(sb, &newfileset, 0,
837						      &ident);
838				if (!bh) {
839					newfileset.logicalBlockNum++;
840					continue;
841				}
842
843				switch (ident) {
844				case TAG_IDENT_SBD:
845				{
846					struct spaceBitmapDesc *sp;
847					sp = (struct spaceBitmapDesc *)
848								bh->b_data;
849					newfileset.logicalBlockNum += 1 +
850						((le32_to_cpu(sp->numOfBytes) +
851						  sizeof(struct spaceBitmapDesc)
852						  - 1) >> sb->s_blocksize_bits);
853					brelse(bh);
854					break;
855				}
856				case TAG_IDENT_FSD:
857					*fileset = newfileset;
858					break;
859				default:
860					newfileset.logicalBlockNum++;
861					brelse(bh);
862					bh = NULL;
863					break;
864				}
865			} while (newfileset.logicalBlockNum < lastblock &&
866				 fileset->logicalBlockNum == 0xFFFFFFFF &&
867				 fileset->partitionReferenceNum == 0xFFFF);
868		}
869	}
870
871	if ((fileset->logicalBlockNum != 0xFFFFFFFF ||
872	     fileset->partitionReferenceNum != 0xFFFF) && bh) {
873		udf_debug("Fileset at block=%d, partition=%d\n",
874			  fileset->logicalBlockNum,
875			  fileset->partitionReferenceNum);
876
877		sbi->s_partition = fileset->partitionReferenceNum;
878		udf_load_fileset(sb, bh, root);
879		brelse(bh);
880		return 0;
881	}
882	return 1;
883}
884
885/*
886 * Load primary Volume Descriptor Sequence
887 *
888 * Return <0 on error, 0 on success. -EAGAIN is special meaning next sequence
889 * should be tried.
890 */
891static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
892{
893	struct primaryVolDesc *pvoldesc;
894	struct ustr *instr, *outstr;
895	struct buffer_head *bh;
896	uint16_t ident;
897	int ret = -ENOMEM;
898
899	instr = kmalloc(sizeof(struct ustr), GFP_NOFS);
900	if (!instr)
901		return -ENOMEM;
902
903	outstr = kmalloc(sizeof(struct ustr), GFP_NOFS);
904	if (!outstr)
905		goto out1;
906
907	bh = udf_read_tagged(sb, block, block, &ident);
908	if (!bh) {
909		ret = -EAGAIN;
910		goto out2;
911	}
912
913	if (ident != TAG_IDENT_PVD) {
914		ret = -EIO;
915		goto out_bh;
916	}
917
918	pvoldesc = (struct primaryVolDesc *)bh->b_data;
919
920	if (udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time,
921			      pvoldesc->recordingDateAndTime)) {
922#ifdef UDFFS_DEBUG
923		struct timestamp *ts = &pvoldesc->recordingDateAndTime;
924		udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n",
925			  le16_to_cpu(ts->year), ts->month, ts->day, ts->hour,
926			  ts->minute, le16_to_cpu(ts->typeAndTimezone));
927#endif
928	}
929
930	if (!udf_build_ustr(instr, pvoldesc->volIdent, 32))
931		if (udf_CS0toUTF8(outstr, instr)) {
932			strncpy(UDF_SB(sb)->s_volume_ident, outstr->u_name,
933				outstr->u_len > 31 ? 31 : outstr->u_len);
934			udf_debug("volIdent[] = '%s'\n",
935				  UDF_SB(sb)->s_volume_ident);
936		}
937
938	if (!udf_build_ustr(instr, pvoldesc->volSetIdent, 128))
939		if (udf_CS0toUTF8(outstr, instr))
940			udf_debug("volSetIdent[] = '%s'\n", outstr->u_name);
941
942	ret = 0;
943out_bh:
944	brelse(bh);
945out2:
946	kfree(outstr);
947out1:
948	kfree(instr);
949	return ret;
950}
951
952struct inode *udf_find_metadata_inode_efe(struct super_block *sb,
953					u32 meta_file_loc, u32 partition_num)
954{
955	struct kernel_lb_addr addr;
956	struct inode *metadata_fe;
957
958	addr.logicalBlockNum = meta_file_loc;
959	addr.partitionReferenceNum = partition_num;
960
961	metadata_fe = udf_iget_special(sb, &addr);
962
963	if (IS_ERR(metadata_fe)) {
964		udf_warn(sb, "metadata inode efe not found\n");
965		return metadata_fe;
966	}
967	if (UDF_I(metadata_fe)->i_alloc_type != ICBTAG_FLAG_AD_SHORT) {
968		udf_warn(sb, "metadata inode efe does not have short allocation descriptors!\n");
969		iput(metadata_fe);
970		return ERR_PTR(-EIO);
971	}
972
973	return metadata_fe;
974}
975
976static int udf_load_metadata_files(struct super_block *sb, int partition)
977{
978	struct udf_sb_info *sbi = UDF_SB(sb);
979	struct udf_part_map *map;
980	struct udf_meta_data *mdata;
981	struct kernel_lb_addr addr;
982	struct inode *fe;
983
984	map = &sbi->s_partmaps[partition];
985	mdata = &map->s_type_specific.s_metadata;
986
987	/* metadata address */
988	udf_debug("Metadata file location: block = %d part = %d\n",
989		  mdata->s_meta_file_loc, map->s_partition_num);
990
991	fe = udf_find_metadata_inode_efe(sb, mdata->s_meta_file_loc,
992					 map->s_partition_num);
993	if (IS_ERR(fe)) {
994		/* mirror file entry */
995		udf_debug("Mirror metadata file location: block = %d part = %d\n",
996			  mdata->s_mirror_file_loc, map->s_partition_num);
997
998		fe = udf_find_metadata_inode_efe(sb, mdata->s_mirror_file_loc,
999						 map->s_partition_num);
1000
1001		if (IS_ERR(fe)) {
1002			udf_err(sb, "Both metadata and mirror metadata inode efe can not found\n");
1003			return PTR_ERR(fe);
1004		}
1005		mdata->s_mirror_fe = fe;
1006	} else
1007		mdata->s_metadata_fe = fe;
1008
1009
1010	/*
1011	 * bitmap file entry
1012	 * Note:
1013	 * Load only if bitmap file location differs from 0xFFFFFFFF (DCN-5102)
1014	*/
1015	if (mdata->s_bitmap_file_loc != 0xFFFFFFFF) {
1016		addr.logicalBlockNum = mdata->s_bitmap_file_loc;
1017		addr.partitionReferenceNum = map->s_partition_num;
1018
1019		udf_debug("Bitmap file location: block = %d part = %d\n",
1020			  addr.logicalBlockNum, addr.partitionReferenceNum);
1021
1022		fe = udf_iget_special(sb, &addr);
1023		if (IS_ERR(fe)) {
1024			if (sb->s_flags & MS_RDONLY)
1025				udf_warn(sb, "bitmap inode efe not found but it's ok since the disc is mounted read-only\n");
1026			else {
1027				udf_err(sb, "bitmap inode efe not found and attempted read-write mount\n");
1028				return PTR_ERR(fe);
1029			}
1030		} else
1031			mdata->s_bitmap_fe = fe;
1032	}
1033
1034	udf_debug("udf_load_metadata_files Ok\n");
1035	return 0;
1036}
1037
1038static void udf_load_fileset(struct super_block *sb, struct buffer_head *bh,
1039			     struct kernel_lb_addr *root)
1040{
1041	struct fileSetDesc *fset;
1042
1043	fset = (struct fileSetDesc *)bh->b_data;
1044
1045	*root = lelb_to_cpu(fset->rootDirectoryICB.extLocation);
1046
1047	UDF_SB(sb)->s_serial_number = le16_to_cpu(fset->descTag.tagSerialNum);
1048
1049	udf_debug("Rootdir at block=%d, partition=%d\n",
1050		  root->logicalBlockNum, root->partitionReferenceNum);
1051}
1052
1053int udf_compute_nr_groups(struct super_block *sb, u32 partition)
1054{
1055	struct udf_part_map *map = &UDF_SB(sb)->s_partmaps[partition];
1056	return DIV_ROUND_UP(map->s_partition_len +
1057			    (sizeof(struct spaceBitmapDesc) << 3),
1058			    sb->s_blocksize * 8);
1059}
1060
1061static struct udf_bitmap *udf_sb_alloc_bitmap(struct super_block *sb, u32 index)
1062{
1063	struct udf_bitmap *bitmap;
1064	int nr_groups;
1065	int size;
1066
1067	nr_groups = udf_compute_nr_groups(sb, index);
1068	size = sizeof(struct udf_bitmap) +
1069		(sizeof(struct buffer_head *) * nr_groups);
1070
1071	if (size <= PAGE_SIZE)
1072		bitmap = kzalloc(size, GFP_KERNEL);
1073	else
1074		bitmap = vzalloc(size); /* TODO: get rid of vzalloc */
1075
1076	if (bitmap == NULL)
1077		return NULL;
1078
1079	bitmap->s_nr_groups = nr_groups;
1080	return bitmap;
1081}
1082
1083static int udf_fill_partdesc_info(struct super_block *sb,
1084		struct partitionDesc *p, int p_index)
1085{
1086	struct udf_part_map *map;
1087	struct udf_sb_info *sbi = UDF_SB(sb);
1088	struct partitionHeaderDesc *phd;
1089
1090	map = &sbi->s_partmaps[p_index];
1091
1092	map->s_partition_len = le32_to_cpu(p->partitionLength); /* blocks */
1093	map->s_partition_root = le32_to_cpu(p->partitionStartingLocation);
1094
1095	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_READ_ONLY))
1096		map->s_partition_flags |= UDF_PART_FLAG_READ_ONLY;
1097	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_WRITE_ONCE))
1098		map->s_partition_flags |= UDF_PART_FLAG_WRITE_ONCE;
1099	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_REWRITABLE))
1100		map->s_partition_flags |= UDF_PART_FLAG_REWRITABLE;
1101	if (p->accessType == cpu_to_le32(PD_ACCESS_TYPE_OVERWRITABLE))
1102		map->s_partition_flags |= UDF_PART_FLAG_OVERWRITABLE;
1103
1104	udf_debug("Partition (%d type %x) starts at physical %d, block length %d\n",
1105		  p_index, map->s_partition_type,
1106		  map->s_partition_root, map->s_partition_len);
1107
1108	if (strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR02) &&
1109	    strcmp(p->partitionContents.ident, PD_PARTITION_CONTENTS_NSR03))
1110		return 0;
1111
1112	phd = (struct partitionHeaderDesc *)p->partitionContentsUse;
1113	if (phd->unallocSpaceTable.extLength) {
1114		struct kernel_lb_addr loc = {
1115			.logicalBlockNum = le32_to_cpu(
1116				phd->unallocSpaceTable.extPosition),
1117			.partitionReferenceNum = p_index,
1118		};
1119		struct inode *inode;
1120
1121		inode = udf_iget_special(sb, &loc);
1122		if (IS_ERR(inode)) {
1123			udf_debug("cannot load unallocSpaceTable (part %d)\n",
1124				  p_index);
1125			return PTR_ERR(inode);
1126		}
1127		map->s_uspace.s_table = inode;
1128		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_TABLE;
1129		udf_debug("unallocSpaceTable (part %d) @ %ld\n",
1130			  p_index, map->s_uspace.s_table->i_ino);
1131	}
1132
1133	if (phd->unallocSpaceBitmap.extLength) {
1134		struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index);
1135		if (!bitmap)
1136			return -ENOMEM;
1137		map->s_uspace.s_bitmap = bitmap;
1138		bitmap->s_extPosition = le32_to_cpu(
1139				phd->unallocSpaceBitmap.extPosition);
1140		map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_BITMAP;
1141		udf_debug("unallocSpaceBitmap (part %d) @ %d\n",
1142			  p_index, bitmap->s_extPosition);
1143	}
1144
1145	if (phd->partitionIntegrityTable.extLength)
1146		udf_debug("partitionIntegrityTable (part %d)\n", p_index);
1147
1148	if (phd->freedSpaceTable.extLength) {
1149		struct kernel_lb_addr loc = {
1150			.logicalBlockNum = le32_to_cpu(
1151				phd->freedSpaceTable.extPosition),
1152			.partitionReferenceNum = p_index,
1153		};
1154		struct inode *inode;
1155
1156		inode = udf_iget_special(sb, &loc);
1157		if (IS_ERR(inode)) {
1158			udf_debug("cannot load freedSpaceTable (part %d)\n",
1159				  p_index);
1160			return PTR_ERR(inode);
1161		}
1162		map->s_fspace.s_table = inode;
1163		map->s_partition_flags |= UDF_PART_FLAG_FREED_TABLE;
1164		udf_debug("freedSpaceTable (part %d) @ %ld\n",
1165			  p_index, map->s_fspace.s_table->i_ino);
1166	}
1167
1168	if (phd->freedSpaceBitmap.extLength) {
1169		struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index);
1170		if (!bitmap)
1171			return -ENOMEM;
1172		map->s_fspace.s_bitmap = bitmap;
1173		bitmap->s_extPosition = le32_to_cpu(
1174				phd->freedSpaceBitmap.extPosition);
1175		map->s_partition_flags |= UDF_PART_FLAG_FREED_BITMAP;
1176		udf_debug("freedSpaceBitmap (part %d) @ %d\n",
1177			  p_index, bitmap->s_extPosition);
1178	}
1179	return 0;
1180}
1181
1182static void udf_find_vat_block(struct super_block *sb, int p_index,
1183			       int type1_index, sector_t start_block)
1184{
1185	struct udf_sb_info *sbi = UDF_SB(sb);
1186	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1187	sector_t vat_block;
1188	struct kernel_lb_addr ino;
1189	struct inode *inode;
1190
1191	/*
1192	 * VAT file entry is in the last recorded block. Some broken disks have
1193	 * it a few blocks before so try a bit harder...
1194	 */
1195	ino.partitionReferenceNum = type1_index;
1196	for (vat_block = start_block;
1197	     vat_block >= map->s_partition_root &&
1198	     vat_block >= start_block - 3; vat_block--) {
1199		ino.logicalBlockNum = vat_block - map->s_partition_root;
1200		inode = udf_iget_special(sb, &ino);
1201		if (!IS_ERR(inode)) {
1202			sbi->s_vat_inode = inode;
1203			break;
1204		}
1205	}
1206}
1207
1208static int udf_load_vat(struct super_block *sb, int p_index, int type1_index)
1209{
1210	struct udf_sb_info *sbi = UDF_SB(sb);
1211	struct udf_part_map *map = &sbi->s_partmaps[p_index];
1212	struct buffer_head *bh = NULL;
1213	struct udf_inode_info *vati;
1214	uint32_t pos;
1215	struct virtualAllocationTable20 *vat20;
1216	sector_t blocks = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
1217
1218	udf_find_vat_block(sb, p_index, type1_index, sbi->s_last_block);
1219	if (!sbi->s_vat_inode &&
1220	    sbi->s_last_block != blocks - 1) {
1221		pr_notice("Failed to read VAT inode from the last recorded block (%lu), retrying with the last block of the device (%lu).\n",
1222			  (unsigned long)sbi->s_last_block,
1223			  (unsigned long)blocks - 1);
1224		udf_find_vat_block(sb, p_index, type1_index, blocks - 1);
1225	}
1226	if (!sbi->s_vat_inode)
1227		return -EIO;
1228
1229	if (map->s_partition_type == UDF_VIRTUAL_MAP15) {
1230		map->s_type_specific.s_virtual.s_start_offset = 0;
1231		map->s_type_specific.s_virtual.s_num_entries =
1232			(sbi->s_vat_inode->i_size - 36) >> 2;
1233	} else if (map->s_partition_type == UDF_VIRTUAL_MAP20) {
1234		vati = UDF_I(sbi->s_vat_inode);
1235		if (vati->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
1236			pos = udf_block_map(sbi->s_vat_inode, 0);
1237			bh = sb_bread(sb, pos);
1238			if (!bh)
1239				return -EIO;
1240			vat20 = (struct virtualAllocationTable20 *)bh->b_data;
1241		} else {
1242			vat20 = (struct virtualAllocationTable20 *)
1243							vati->i_ext.i_data;
1244		}
1245
1246		map->s_type_specific.s_virtual.s_start_offset =
1247			le16_to_cpu(vat20->lengthHeader);
1248		map->s_type_specific.s_virtual.s_num_entries =
1249			(sbi->s_vat_inode->i_size -
1250				map->s_type_specific.s_virtual.
1251					s_start_offset) >> 2;
1252		brelse(bh);
1253	}
1254	return 0;
1255}
1256
1257/*
1258 * Load partition descriptor block
1259 *
1260 * Returns <0 on error, 0 on success, -EAGAIN is special - try next descriptor
1261 * sequence.
1262 */
1263static int udf_load_partdesc(struct super_block *sb, sector_t block)
1264{
1265	struct buffer_head *bh;
1266	struct partitionDesc *p;
1267	struct udf_part_map *map;
1268	struct udf_sb_info *sbi = UDF_SB(sb);
1269	int i, type1_idx;
1270	uint16_t partitionNumber;
1271	uint16_t ident;
1272	int ret;
1273
1274	bh = udf_read_tagged(sb, block, block, &ident);
1275	if (!bh)
1276		return -EAGAIN;
1277	if (ident != TAG_IDENT_PD) {
1278		ret = 0;
1279		goto out_bh;
1280	}
1281
1282	p = (struct partitionDesc *)bh->b_data;
1283	partitionNumber = le16_to_cpu(p->partitionNumber);
1284
1285	/* First scan for TYPE1, SPARABLE and METADATA partitions */
1286	for (i = 0; i < sbi->s_partitions; i++) {
1287		map = &sbi->s_partmaps[i];
1288		udf_debug("Searching map: (%d == %d)\n",
1289			  map->s_partition_num, partitionNumber);
1290		if (map->s_partition_num == partitionNumber &&
1291		    (map->s_partition_type == UDF_TYPE1_MAP15 ||
1292		     map->s_partition_type == UDF_SPARABLE_MAP15))
1293			break;
1294	}
1295
1296	if (i >= sbi->s_partitions) {
1297		udf_debug("Partition (%d) not found in partition map\n",
1298			  partitionNumber);
1299		ret = 0;
1300		goto out_bh;
1301	}
1302
1303	ret = udf_fill_partdesc_info(sb, p, i);
1304	if (ret < 0)
1305		goto out_bh;
1306
1307	/*
1308	 * Now rescan for VIRTUAL or METADATA partitions when SPARABLE and
1309	 * PHYSICAL partitions are already set up
1310	 */
1311	type1_idx = i;
1312#ifdef UDFFS_DEBUG
1313	map = NULL; /* supress 'maybe used uninitialized' warning */
1314#endif
1315	for (i = 0; i < sbi->s_partitions; i++) {
1316		map = &sbi->s_partmaps[i];
1317
1318		if (map->s_partition_num == partitionNumber &&
1319		    (map->s_partition_type == UDF_VIRTUAL_MAP15 ||
1320		     map->s_partition_type == UDF_VIRTUAL_MAP20 ||
1321		     map->s_partition_type == UDF_METADATA_MAP25))
1322			break;
1323	}
1324
1325	if (i >= sbi->s_partitions) {
1326		ret = 0;
1327		goto out_bh;
1328	}
1329
1330	ret = udf_fill_partdesc_info(sb, p, i);
1331	if (ret < 0)
1332		goto out_bh;
1333
1334	if (map->s_partition_type == UDF_METADATA_MAP25) {
1335		ret = udf_load_metadata_files(sb, i);
1336		if (ret < 0) {
1337			udf_err(sb, "error loading MetaData partition map %d\n",
1338				i);
1339			goto out_bh;
1340		}
1341	} else {
1342		/*
1343		 * If we have a partition with virtual map, we don't handle
1344		 * writing to it (we overwrite blocks instead of relocating
1345		 * them).
1346		 */
1347		if (!(sb->s_flags & MS_RDONLY)) {
1348			ret = -EACCES;
1349			goto out_bh;
1350		}
1351		ret = udf_load_vat(sb, i, type1_idx);
1352		if (ret < 0)
1353			goto out_bh;
1354	}
1355	ret = 0;
1356out_bh:
1357	/* In case loading failed, we handle cleanup in udf_fill_super */
1358	brelse(bh);
1359	return ret;
1360}
1361
1362static int udf_load_sparable_map(struct super_block *sb,
1363				 struct udf_part_map *map,
1364				 struct sparablePartitionMap *spm)
1365{
1366	uint32_t loc;
1367	uint16_t ident;
1368	struct sparingTable *st;
1369	struct udf_sparing_data *sdata = &map->s_type_specific.s_sparing;
1370	int i;
1371	struct buffer_head *bh;
1372
1373	map->s_partition_type = UDF_SPARABLE_MAP15;
1374	sdata->s_packet_len = le16_to_cpu(spm->packetLength);
1375	if (!is_power_of_2(sdata->s_packet_len)) {
1376		udf_err(sb, "error loading logical volume descriptor: "
1377			"Invalid packet length %u\n",
1378			(unsigned)sdata->s_packet_len);
1379		return -EIO;
1380	}
1381	if (spm->numSparingTables > 4) {
1382		udf_err(sb, "error loading logical volume descriptor: "
1383			"Too many sparing tables (%d)\n",
1384			(int)spm->numSparingTables);
1385		return -EIO;
1386	}
1387
1388	for (i = 0; i < spm->numSparingTables; i++) {
1389		loc = le32_to_cpu(spm->locSparingTable[i]);
1390		bh = udf_read_tagged(sb, loc, loc, &ident);
1391		if (!bh)
1392			continue;
1393
1394		st = (struct sparingTable *)bh->b_data;
1395		if (ident != 0 ||
1396		    strncmp(st->sparingIdent.ident, UDF_ID_SPARING,
1397			    strlen(UDF_ID_SPARING)) ||
1398		    sizeof(*st) + le16_to_cpu(st->reallocationTableLen) >
1399							sb->s_blocksize) {
1400			brelse(bh);
1401			continue;
1402		}
1403
1404		sdata->s_spar_map[i] = bh;
1405	}
1406	map->s_partition_func = udf_get_pblock_spar15;
1407	return 0;
1408}
1409
1410static int udf_load_logicalvol(struct super_block *sb, sector_t block,
1411			       struct kernel_lb_addr *fileset)
1412{
1413	struct logicalVolDesc *lvd;
1414	int i, offset;
1415	uint8_t type;
1416	struct udf_sb_info *sbi = UDF_SB(sb);
1417	struct genericPartitionMap *gpm;
1418	uint16_t ident;
1419	struct buffer_head *bh;
1420	unsigned int table_len;
1421	int ret;
1422
1423	bh = udf_read_tagged(sb, block, block, &ident);
1424	if (!bh)
1425		return -EAGAIN;
1426	BUG_ON(ident != TAG_IDENT_LVD);
1427	lvd = (struct logicalVolDesc *)bh->b_data;
1428	table_len = le32_to_cpu(lvd->mapTableLength);
1429	if (table_len > sb->s_blocksize - sizeof(*lvd)) {
1430		udf_err(sb, "error loading logical volume descriptor: "
1431			"Partition table too long (%u > %lu)\n", table_len,
1432			sb->s_blocksize - sizeof(*lvd));
1433		ret = -EIO;
1434		goto out_bh;
1435	}
1436
1437	ret = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
1438	if (ret)
1439		goto out_bh;
1440
1441	for (i = 0, offset = 0;
1442	     i < sbi->s_partitions && offset < table_len;
1443	     i++, offset += gpm->partitionMapLength) {
1444		struct udf_part_map *map = &sbi->s_partmaps[i];
1445		gpm = (struct genericPartitionMap *)
1446				&(lvd->partitionMaps[offset]);
1447		type = gpm->partitionMapType;
1448		if (type == 1) {
1449			struct genericPartitionMap1 *gpm1 =
1450				(struct genericPartitionMap1 *)gpm;
1451			map->s_partition_type = UDF_TYPE1_MAP15;
1452			map->s_volumeseqnum = le16_to_cpu(gpm1->volSeqNum);
1453			map->s_partition_num = le16_to_cpu(gpm1->partitionNum);
1454			map->s_partition_func = NULL;
1455		} else if (type == 2) {
1456			struct udfPartitionMap2 *upm2 =
1457						(struct udfPartitionMap2 *)gpm;
1458			if (!strncmp(upm2->partIdent.ident, UDF_ID_VIRTUAL,
1459						strlen(UDF_ID_VIRTUAL))) {
1460				u16 suf =
1461					le16_to_cpu(((__le16 *)upm2->partIdent.
1462							identSuffix)[0]);
1463				if (suf < 0x0200) {
1464					map->s_partition_type =
1465							UDF_VIRTUAL_MAP15;
1466					map->s_partition_func =
1467							udf_get_pblock_virt15;
1468				} else {
1469					map->s_partition_type =
1470							UDF_VIRTUAL_MAP20;
1471					map->s_partition_func =
1472							udf_get_pblock_virt20;
1473				}
1474			} else if (!strncmp(upm2->partIdent.ident,
1475						UDF_ID_SPARABLE,
1476						strlen(UDF_ID_SPARABLE))) {
1477				ret = udf_load_sparable_map(sb, map,
1478					(struct sparablePartitionMap *)gpm);
1479				if (ret < 0)
1480					goto out_bh;
1481			} else if (!strncmp(upm2->partIdent.ident,
1482						UDF_ID_METADATA,
1483						strlen(UDF_ID_METADATA))) {
1484				struct udf_meta_data *mdata =
1485					&map->s_type_specific.s_metadata;
1486				struct metadataPartitionMap *mdm =
1487						(struct metadataPartitionMap *)
1488						&(lvd->partitionMaps[offset]);
1489				udf_debug("Parsing Logical vol part %d type %d  id=%s\n",
1490					  i, type, UDF_ID_METADATA);
1491
1492				map->s_partition_type = UDF_METADATA_MAP25;
1493				map->s_partition_func = udf_get_pblock_meta25;
1494
1495				mdata->s_meta_file_loc   =
1496					le32_to_cpu(mdm->metadataFileLoc);
1497				mdata->s_mirror_file_loc =
1498					le32_to_cpu(mdm->metadataMirrorFileLoc);
1499				mdata->s_bitmap_file_loc =
1500					le32_to_cpu(mdm->metadataBitmapFileLoc);
1501				mdata->s_alloc_unit_size =
1502					le32_to_cpu(mdm->allocUnitSize);
1503				mdata->s_align_unit_size =
1504					le16_to_cpu(mdm->alignUnitSize);
1505				if (mdm->flags & 0x01)
1506					mdata->s_flags |= MF_DUPLICATE_MD;
1507
1508				udf_debug("Metadata Ident suffix=0x%x\n",
1509					  le16_to_cpu(*(__le16 *)
1510						      mdm->partIdent.identSuffix));
1511				udf_debug("Metadata part num=%d\n",
1512					  le16_to_cpu(mdm->partitionNum));
1513				udf_debug("Metadata part alloc unit size=%d\n",
1514					  le32_to_cpu(mdm->allocUnitSize));
1515				udf_debug("Metadata file loc=%d\n",
1516					  le32_to_cpu(mdm->metadataFileLoc));
1517				udf_debug("Mirror file loc=%d\n",
1518					  le32_to_cpu(mdm->metadataMirrorFileLoc));
1519				udf_debug("Bitmap file loc=%d\n",
1520					  le32_to_cpu(mdm->metadataBitmapFileLoc));
1521				udf_debug("Flags: %d %d\n",
1522					  mdata->s_flags, mdm->flags);
1523			} else {
1524				udf_debug("Unknown ident: %s\n",
1525					  upm2->partIdent.ident);
1526				continue;
1527			}
1528			map->s_volumeseqnum = le16_to_cpu(upm2->volSeqNum);
1529			map->s_partition_num = le16_to_cpu(upm2->partitionNum);
1530		}
1531		udf_debug("Partition (%d:%d) type %d on volume %d\n",
1532			  i, map->s_partition_num, type, map->s_volumeseqnum);
1533	}
1534
1535	if (fileset) {
1536		struct long_ad *la = (struct long_ad *)&(lvd->logicalVolContentsUse[0]);
1537
1538		*fileset = lelb_to_cpu(la->extLocation);
1539		udf_debug("FileSet found in LogicalVolDesc at block=%d, partition=%d\n",
1540			  fileset->logicalBlockNum,
1541			  fileset->partitionReferenceNum);
1542	}
1543	if (lvd->integritySeqExt.extLength)
1544		udf_load_logicalvolint(sb, leea_to_cpu(lvd->integritySeqExt));
1545	ret = 0;
1546out_bh:
1547	brelse(bh);
1548	return ret;
1549}
1550
1551/*
1552 * udf_load_logicalvolint
1553 *
1554 */
1555static void udf_load_logicalvolint(struct super_block *sb, struct kernel_extent_ad loc)
1556{
1557	struct buffer_head *bh = NULL;
1558	uint16_t ident;
1559	struct udf_sb_info *sbi = UDF_SB(sb);
1560	struct logicalVolIntegrityDesc *lvid;
1561
1562	while (loc.extLength > 0 &&
1563	       (bh = udf_read_tagged(sb, loc.extLocation,
1564				     loc.extLocation, &ident)) &&
1565	       ident == TAG_IDENT_LVID) {
1566		sbi->s_lvid_bh = bh;
1567		lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
1568
1569		if (lvid->nextIntegrityExt.extLength)
1570			udf_load_logicalvolint(sb,
1571				leea_to_cpu(lvid->nextIntegrityExt));
1572
1573		if (sbi->s_lvid_bh != bh)
1574			brelse(bh);
1575		loc.extLength -= sb->s_blocksize;
1576		loc.extLocation++;
1577	}
1578	if (sbi->s_lvid_bh != bh)
1579		brelse(bh);
1580}
1581
1582/*
1583 * Process a main/reserve volume descriptor sequence.
1584 *   @block		First block of first extent of the sequence.
1585 *   @lastblock		Lastblock of first extent of the sequence.
1586 *   @fileset		There we store extent containing root fileset
1587 *
1588 * Returns <0 on error, 0 on success. -EAGAIN is special - try next descriptor
1589 * sequence
1590 */
1591static noinline int udf_process_sequence(
1592		struct super_block *sb,
1593		sector_t block, sector_t lastblock,
1594		struct kernel_lb_addr *fileset)
1595{
1596	struct buffer_head *bh = NULL;
1597	struct udf_vds_record vds[VDS_POS_LENGTH];
1598	struct udf_vds_record *curr;
1599	struct generic_desc *gd;
1600	struct volDescPtr *vdp;
1601	bool done = false;
1602	uint32_t vdsn;
1603	uint16_t ident;
1604	long next_s = 0, next_e = 0;
1605	int ret;
1606
1607	memset(vds, 0, sizeof(struct udf_vds_record) * VDS_POS_LENGTH);
1608
1609	/*
1610	 * Read the main descriptor sequence and find which descriptors
1611	 * are in it.
1612	 */
1613	for (; (!done && block <= lastblock); block++) {
1614
1615		bh = udf_read_tagged(sb, block, block, &ident);
1616		if (!bh) {
1617			udf_err(sb,
1618				"Block %llu of volume descriptor sequence is corrupted or we could not read it\n",
1619				(unsigned long long)block);
1620			return -EAGAIN;
1621		}
1622
1623		/* Process each descriptor (ISO 13346 3/8.3-8.4) */
1624		gd = (struct generic_desc *)bh->b_data;
1625		vdsn = le32_to_cpu(gd->volDescSeqNum);
1626		switch (ident) {
1627		case TAG_IDENT_PVD: /* ISO 13346 3/10.1 */
1628			curr = &vds[VDS_POS_PRIMARY_VOL_DESC];
1629			if (vdsn >= curr->volDescSeqNum) {
1630				curr->volDescSeqNum = vdsn;
1631				curr->block = block;
1632			}
1633			break;
1634		case TAG_IDENT_VDP: /* ISO 13346 3/10.3 */
1635			curr = &vds[VDS_POS_VOL_DESC_PTR];
1636			if (vdsn >= curr->volDescSeqNum) {
1637				curr->volDescSeqNum = vdsn;
1638				curr->block = block;
1639
1640				vdp = (struct volDescPtr *)bh->b_data;
1641				next_s = le32_to_cpu(
1642					vdp->nextVolDescSeqExt.extLocation);
1643				next_e = le32_to_cpu(
1644					vdp->nextVolDescSeqExt.extLength);
1645				next_e = next_e >> sb->s_blocksize_bits;
1646				next_e += next_s;
1647			}
1648			break;
1649		case TAG_IDENT_IUVD: /* ISO 13346 3/10.4 */
1650			curr = &vds[VDS_POS_IMP_USE_VOL_DESC];
1651			if (vdsn >= curr->volDescSeqNum) {
1652				curr->volDescSeqNum = vdsn;
1653				curr->block = block;
1654			}
1655			break;
1656		case TAG_IDENT_PD: /* ISO 13346 3/10.5 */
1657			curr = &vds[VDS_POS_PARTITION_DESC];
1658			if (!curr->block)
1659				curr->block = block;
1660			break;
1661		case TAG_IDENT_LVD: /* ISO 13346 3/10.6 */
1662			curr = &vds[VDS_POS_LOGICAL_VOL_DESC];
1663			if (vdsn >= curr->volDescSeqNum) {
1664				curr->volDescSeqNum = vdsn;
1665				curr->block = block;
1666			}
1667			break;
1668		case TAG_IDENT_USD: /* ISO 13346 3/10.8 */
1669			curr = &vds[VDS_POS_UNALLOC_SPACE_DESC];
1670			if (vdsn >= curr->volDescSeqNum) {
1671				curr->volDescSeqNum = vdsn;
1672				curr->block = block;
1673			}
1674			break;
1675		case TAG_IDENT_TD: /* ISO 13346 3/10.9 */
1676			vds[VDS_POS_TERMINATING_DESC].block = block;
1677			if (next_e) {
1678				block = next_s;
1679				lastblock = next_e;
1680				next_s = next_e = 0;
1681			} else
1682				done = true;
1683			break;
1684		}
1685		brelse(bh);
1686	}
1687	/*
1688	 * Now read interesting descriptors again and process them
1689	 * in a suitable order
1690	 */
1691	if (!vds[VDS_POS_PRIMARY_VOL_DESC].block) {
1692		udf_err(sb, "Primary Volume Descriptor not found!\n");
1693		return -EAGAIN;
1694	}
1695	ret = udf_load_pvoldesc(sb, vds[VDS_POS_PRIMARY_VOL_DESC].block);
1696	if (ret < 0)
1697		return ret;
1698
1699	if (vds[VDS_POS_LOGICAL_VOL_DESC].block) {
1700		ret = udf_load_logicalvol(sb,
1701					  vds[VDS_POS_LOGICAL_VOL_DESC].block,
1702					  fileset);
1703		if (ret < 0)
1704			return ret;
1705	}
1706
1707	if (vds[VDS_POS_PARTITION_DESC].block) {
1708		/*
1709		 * We rescan the whole descriptor sequence to find
1710		 * partition descriptor blocks and process them.
1711		 */
1712		for (block = vds[VDS_POS_PARTITION_DESC].block;
1713		     block < vds[VDS_POS_TERMINATING_DESC].block;
1714		     block++) {
1715			ret = udf_load_partdesc(sb, block);
1716			if (ret < 0)
1717				return ret;
1718		}
1719	}
1720
1721	return 0;
1722}
1723
1724/*
1725 * Load Volume Descriptor Sequence described by anchor in bh
1726 *
1727 * Returns <0 on error, 0 on success
1728 */
1729static int udf_load_sequence(struct super_block *sb, struct buffer_head *bh,
1730			     struct kernel_lb_addr *fileset)
1731{
1732	struct anchorVolDescPtr *anchor;
1733	sector_t main_s, main_e, reserve_s, reserve_e;
1734	int ret;
1735
1736	anchor = (struct anchorVolDescPtr *)bh->b_data;
1737
1738	/* Locate the main sequence */
1739	main_s = le32_to_cpu(anchor->mainVolDescSeqExt.extLocation);
1740	main_e = le32_to_cpu(anchor->mainVolDescSeqExt.extLength);
1741	main_e = main_e >> sb->s_blocksize_bits;
1742	main_e += main_s;
1743
1744	/* Locate the reserve sequence */
1745	reserve_s = le32_to_cpu(anchor->reserveVolDescSeqExt.extLocation);
1746	reserve_e = le32_to_cpu(anchor->reserveVolDescSeqExt.extLength);
1747	reserve_e = reserve_e >> sb->s_blocksize_bits;
1748	reserve_e += reserve_s;
1749
1750	/* Process the main & reserve sequences */
1751	/* responsible for finding the PartitionDesc(s) */
1752	ret = udf_process_sequence(sb, main_s, main_e, fileset);
1753	if (ret != -EAGAIN)
1754		return ret;
1755	udf_sb_free_partitions(sb);
1756	ret = udf_process_sequence(sb, reserve_s, reserve_e, fileset);
1757	if (ret < 0) {
1758		udf_sb_free_partitions(sb);
1759		/* No sequence was OK, return -EIO */
1760		if (ret == -EAGAIN)
1761			ret = -EIO;
1762	}
1763	return ret;
1764}
1765
1766/*
1767 * Check whether there is an anchor block in the given block and
1768 * load Volume Descriptor Sequence if so.
1769 *
1770 * Returns <0 on error, 0 on success, -EAGAIN is special - try next anchor
1771 * block
1772 */
1773static int udf_check_anchor_block(struct super_block *sb, sector_t block,
1774				  struct kernel_lb_addr *fileset)
1775{
1776	struct buffer_head *bh;
1777	uint16_t ident;
1778	int ret;
1779
1780	if (UDF_QUERY_FLAG(sb, UDF_FLAG_VARCONV) &&
1781	    udf_fixed_to_variable(block) >=
1782	    sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits)
1783		return -EAGAIN;
1784
1785	bh = udf_read_tagged(sb, block, block, &ident);
1786	if (!bh)
1787		return -EAGAIN;
1788	if (ident != TAG_IDENT_AVDP) {
1789		brelse(bh);
1790		return -EAGAIN;
1791	}
1792	ret = udf_load_sequence(sb, bh, fileset);
1793	brelse(bh);
1794	return ret;
1795}
1796
1797/*
1798 * Search for an anchor volume descriptor pointer.
1799 *
1800 * Returns < 0 on error, 0 on success. -EAGAIN is special - try next set
1801 * of anchors.
1802 */
1803static int udf_scan_anchors(struct super_block *sb, sector_t *lastblock,
1804			    struct kernel_lb_addr *fileset)
1805{
1806	sector_t last[6];
1807	int i;
1808	struct udf_sb_info *sbi = UDF_SB(sb);
1809	int last_count = 0;
1810	int ret;
1811
1812	/* First try user provided anchor */
1813	if (sbi->s_anchor) {
1814		ret = udf_check_anchor_block(sb, sbi->s_anchor, fileset);
1815		if (ret != -EAGAIN)
1816			return ret;
1817	}
1818	/*
1819	 * according to spec, anchor is in either:
1820	 *     block 256
1821	 *     lastblock-256
1822	 *     lastblock
1823	 *  however, if the disc isn't closed, it could be 512.
1824	 */
1825	ret = udf_check_anchor_block(sb, sbi->s_session + 256, fileset);
1826	if (ret != -EAGAIN)
1827		return ret;
1828	/*
1829	 * The trouble is which block is the last one. Drives often misreport
1830	 * this so we try various possibilities.
1831	 */
1832	last[last_count++] = *lastblock;
1833	if (*lastblock >= 1)
1834		last[last_count++] = *lastblock - 1;
1835	last[last_count++] = *lastblock + 1;
1836	if (*lastblock >= 2)
1837		last[last_count++] = *lastblock - 2;
1838	if (*lastblock >= 150)
1839		last[last_count++] = *lastblock - 150;
1840	if (*lastblock >= 152)
1841		last[last_count++] = *lastblock - 152;
1842
1843	for (i = 0; i < last_count; i++) {
1844		if (last[i] >= sb->s_bdev->bd_inode->i_size >>
1845				sb->s_blocksize_bits)
1846			continue;
1847		ret = udf_check_anchor_block(sb, last[i], fileset);
1848		if (ret != -EAGAIN) {
1849			if (!ret)
1850				*lastblock = last[i];
1851			return ret;
1852		}
1853		if (last[i] < 256)
1854			continue;
1855		ret = udf_check_anchor_block(sb, last[i] - 256, fileset);
1856		if (ret != -EAGAIN) {
1857			if (!ret)
1858				*lastblock = last[i];
1859			return ret;
1860		}
1861	}
1862
1863	/* Finally try block 512 in case media is open */
1864	return udf_check_anchor_block(sb, sbi->s_session + 512, fileset);
1865}
1866
1867/*
1868 * Find an anchor volume descriptor and load Volume Descriptor Sequence from
1869 * area specified by it. The function expects sbi->s_lastblock to be the last
1870 * block on the media.
1871 *
1872 * Return <0 on error, 0 if anchor found. -EAGAIN is special meaning anchor
1873 * was not found.
1874 */
1875static int udf_find_anchor(struct super_block *sb,
1876			   struct kernel_lb_addr *fileset)
1877{
1878	struct udf_sb_info *sbi = UDF_SB(sb);
1879	sector_t lastblock = sbi->s_last_block;
1880	int ret;
1881
1882	ret = udf_scan_anchors(sb, &lastblock, fileset);
1883	if (ret != -EAGAIN)
1884		goto out;
1885
1886	/* No anchor found? Try VARCONV conversion of block numbers */
1887	UDF_SET_FLAG(sb, UDF_FLAG_VARCONV);
1888	lastblock = udf_variable_to_fixed(sbi->s_last_block);
1889	/* Firstly, we try to not convert number of the last block */
1890	ret = udf_scan_anchors(sb, &lastblock, fileset);
1891	if (ret != -EAGAIN)
1892		goto out;
1893
1894	lastblock = sbi->s_last_block;
1895	/* Secondly, we try with converted number of the last block */
1896	ret = udf_scan_anchors(sb, &lastblock, fileset);
1897	if (ret < 0) {
1898		/* VARCONV didn't help. Clear it. */
1899		UDF_CLEAR_FLAG(sb, UDF_FLAG_VARCONV);
1900	}
1901out:
1902	if (ret == 0)
1903		sbi->s_last_block = lastblock;
1904	return ret;
1905}
1906
1907/*
1908 * Check Volume Structure Descriptor, find Anchor block and load Volume
1909 * Descriptor Sequence.
1910 *
1911 * Returns < 0 on error, 0 on success. -EAGAIN is special meaning anchor
1912 * block was not found.
1913 */
1914static int udf_load_vrs(struct super_block *sb, struct udf_options *uopt,
1915			int silent, struct kernel_lb_addr *fileset)
1916{
1917	struct udf_sb_info *sbi = UDF_SB(sb);
1918	loff_t nsr_off;
1919	int ret;
1920
1921	if (!sb_set_blocksize(sb, uopt->blocksize)) {
1922		if (!silent)
1923			udf_warn(sb, "Bad block size\n");
1924		return -EINVAL;
1925	}
1926	sbi->s_last_block = uopt->lastblock;
1927	if (!uopt->novrs) {
1928		/* Check that it is NSR02 compliant */
1929		nsr_off = udf_check_vsd(sb);
1930		if (!nsr_off) {
1931			if (!silent)
1932				udf_warn(sb, "No VRS found\n");
1933			return 0;
1934		}
1935		if (nsr_off == -1)
1936			udf_debug("Failed to read sector at offset %d. "
1937				  "Assuming open disc. Skipping validity "
1938				  "check\n", VSD_FIRST_SECTOR_OFFSET);
1939		if (!sbi->s_last_block)
1940			sbi->s_last_block = udf_get_last_block(sb);
1941	} else {
1942		udf_debug("Validity check skipped because of novrs option\n");
1943	}
1944
1945	/* Look for anchor block and load Volume Descriptor Sequence */
1946	sbi->s_anchor = uopt->anchor;
1947	ret = udf_find_anchor(sb, fileset);
1948	if (ret < 0) {
1949		if (!silent && ret == -EAGAIN)
1950			udf_warn(sb, "No anchor found\n");
1951		return ret;
1952	}
1953	return 0;
1954}
1955
1956static void udf_open_lvid(struct super_block *sb)
1957{
1958	struct udf_sb_info *sbi = UDF_SB(sb);
1959	struct buffer_head *bh = sbi->s_lvid_bh;
1960	struct logicalVolIntegrityDesc *lvid;
1961	struct logicalVolIntegrityDescImpUse *lvidiu;
1962
1963	if (!bh)
1964		return;
1965	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
1966	lvidiu = udf_sb_lvidiu(sb);
1967	if (!lvidiu)
1968		return;
1969
1970	mutex_lock(&sbi->s_alloc_mutex);
1971	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1972	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
1973	udf_time_to_disk_stamp(&lvid->recordingDateAndTime,
1974				CURRENT_TIME);
1975	lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);
1976
1977	lvid->descTag.descCRC = cpu_to_le16(
1978		crc_itu_t(0, (char *)lvid + sizeof(struct tag),
1979			le16_to_cpu(lvid->descTag.descCRCLength)));
1980
1981	lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag);
1982	mark_buffer_dirty(bh);
1983	sbi->s_lvid_dirty = 0;
1984	mutex_unlock(&sbi->s_alloc_mutex);
1985	/* Make opening of filesystem visible on the media immediately */
1986	sync_dirty_buffer(bh);
1987}
1988
1989static void udf_close_lvid(struct super_block *sb)
1990{
1991	struct udf_sb_info *sbi = UDF_SB(sb);
1992	struct buffer_head *bh = sbi->s_lvid_bh;
1993	struct logicalVolIntegrityDesc *lvid;
1994	struct logicalVolIntegrityDescImpUse *lvidiu;
1995
1996	if (!bh)
1997		return;
1998	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
1999	lvidiu = udf_sb_lvidiu(sb);
2000	if (!lvidiu)
2001		return;
2002
2003	mutex_lock(&sbi->s_alloc_mutex);
2004	lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
2005	lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
2006	udf_time_to_disk_stamp(&lvid->recordingDateAndTime, CURRENT_TIME);
2007	if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev))
2008		lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION);
2009	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFReadRev))
2010		lvidiu->minUDFReadRev = cpu_to_le16(sbi->s_udfrev);
2011	if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFWriteRev))
2012		lvidiu->minUDFWriteRev = cpu_to_le16(sbi->s_udfrev);
2013	lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_CLOSE);
2014
2015	lvid->descTag.descCRC = cpu_to_le16(
2016			crc_itu_t(0, (char *)lvid + sizeof(struct tag),
2017				le16_to_cpu(lvid->descTag.descCRCLength)));
2018
2019	lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag);
2020	/*
2021	 * We set buffer uptodate unconditionally here to avoid spurious
2022	 * warnings from mark_buffer_dirty() when previous EIO has marked
2023	 * the buffer as !uptodate
2024	 */
2025	set_buffer_uptodate(bh);
2026	mark_buffer_dirty(bh);
2027	sbi->s_lvid_dirty = 0;
2028	mutex_unlock(&sbi->s_alloc_mutex);
2029	/* Make closing of filesystem visible on the media immediately */
2030	sync_dirty_buffer(bh);
2031}
2032
2033u64 lvid_get_unique_id(struct super_block *sb)
2034{
2035	struct buffer_head *bh;
2036	struct udf_sb_info *sbi = UDF_SB(sb);
2037	struct logicalVolIntegrityDesc *lvid;
2038	struct logicalVolHeaderDesc *lvhd;
2039	u64 uniqueID;
2040	u64 ret;
2041
2042	bh = sbi->s_lvid_bh;
2043	if (!bh)
2044		return 0;
2045
2046	lvid = (struct logicalVolIntegrityDesc *)bh->b_data;
2047	lvhd = (struct logicalVolHeaderDesc *)lvid->logicalVolContentsUse;
2048
2049	mutex_lock(&sbi->s_alloc_mutex);
2050	ret = uniqueID = le64_to_cpu(lvhd->uniqueID);
2051	if (!(++uniqueID & 0xFFFFFFFF))
2052		uniqueID += 16;
2053	lvhd->uniqueID = cpu_to_le64(uniqueID);
2054	mutex_unlock(&sbi->s_alloc_mutex);
2055	mark_buffer_dirty(bh);
2056
2057	return ret;
2058}
2059
2060static int udf_fill_super(struct super_block *sb, void *options, int silent)
2061{
2062	int ret = -EINVAL;
2063	struct inode *inode = NULL;
2064	struct udf_options uopt;
2065	struct kernel_lb_addr rootdir, fileset;
2066	struct udf_sb_info *sbi;
2067
2068	uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT);
2069	uopt.uid = INVALID_UID;
2070	uopt.gid = INVALID_GID;
2071	uopt.umask = 0;
2072	uopt.fmode = UDF_INVALID_MODE;
2073	uopt.dmode = UDF_INVALID_MODE;
2074
2075	sbi = kzalloc(sizeof(struct udf_sb_info), GFP_KERNEL);
2076	if (!sbi)
2077		return -ENOMEM;
2078
2079	sb->s_fs_info = sbi;
2080
2081	mutex_init(&sbi->s_alloc_mutex);
2082
2083	if (!udf_parse_options((char *)options, &uopt, false))
2084		goto parse_options_failure;
2085
2086	if (uopt.flags & (1 << UDF_FLAG_UTF8) &&
2087	    uopt.flags & (1 << UDF_FLAG_NLS_MAP)) {
2088		udf_err(sb, "utf8 cannot be combined with iocharset\n");
2089		goto parse_options_failure;
2090	}
2091#ifdef CONFIG_UDF_NLS
2092	if ((uopt.flags & (1 << UDF_FLAG_NLS_MAP)) && !uopt.nls_map) {
2093		uopt.nls_map = load_nls_default();
2094		if (!uopt.nls_map)
2095			uopt.flags &= ~(1 << UDF_FLAG_NLS_MAP);
2096		else
2097			udf_debug("Using default NLS map\n");
2098	}
2099#endif
2100	if (!(uopt.flags & (1 << UDF_FLAG_NLS_MAP)))
2101		uopt.flags |= (1 << UDF_FLAG_UTF8);
2102
2103	fileset.logicalBlockNum = 0xFFFFFFFF;
2104	fileset.partitionReferenceNum = 0xFFFF;
2105
2106	sbi->s_flags = uopt.flags;
2107	sbi->s_uid = uopt.uid;
2108	sbi->s_gid = uopt.gid;
2109	sbi->s_umask = uopt.umask;
2110	sbi->s_fmode = uopt.fmode;
2111	sbi->s_dmode = uopt.dmode;
2112	sbi->s_nls_map = uopt.nls_map;
2113	rwlock_init(&sbi->s_cred_lock);
2114
2115	if (uopt.session == 0xFFFFFFFF)
2116		sbi->s_session = udf_get_last_session(sb);
2117	else
2118		sbi->s_session = uopt.session;
2119
2120	udf_debug("Multi-session=%d\n", sbi->s_session);
2121
2122	/* Fill in the rest of the superblock */
2123	sb->s_op = &udf_sb_ops;
2124	sb->s_export_op = &udf_export_ops;
2125
2126	sb->s_magic = UDF_SUPER_MAGIC;
2127	sb->s_time_gran = 1000;
2128
2129	if (uopt.flags & (1 << UDF_FLAG_BLOCKSIZE_SET)) {
2130		ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2131	} else {
2132		uopt.blocksize = bdev_logical_block_size(sb->s_bdev);
2133		ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2134		if (ret == -EAGAIN && uopt.blocksize != UDF_DEFAULT_BLOCKSIZE) {
2135			if (!silent)
2136				pr_notice("Rescanning with blocksize %d\n",
2137					  UDF_DEFAULT_BLOCKSIZE);
2138			brelse(sbi->s_lvid_bh);
2139			sbi->s_lvid_bh = NULL;
2140			uopt.blocksize = UDF_DEFAULT_BLOCKSIZE;
2141			ret = udf_load_vrs(sb, &uopt, silent, &fileset);
2142		}
2143	}
2144	if (ret < 0) {
2145		if (ret == -EAGAIN) {
2146			udf_warn(sb, "No partition found (1)\n");
2147			ret = -EINVAL;
2148		}
2149		goto error_out;
2150	}
2151
2152	udf_debug("Lastblock=%d\n", sbi->s_last_block);
2153
2154	if (sbi->s_lvid_bh) {
2155		struct logicalVolIntegrityDescImpUse *lvidiu =
2156							udf_sb_lvidiu(sb);
2157		uint16_t minUDFReadRev;
2158		uint16_t minUDFWriteRev;
2159
2160		if (!lvidiu) {
2161			ret = -EINVAL;
2162			goto error_out;
2163		}
2164		minUDFReadRev = le16_to_cpu(lvidiu->minUDFReadRev);
2165		minUDFWriteRev = le16_to_cpu(lvidiu->minUDFWriteRev);
2166		if (minUDFReadRev > UDF_MAX_READ_VERSION) {
2167			udf_err(sb, "minUDFReadRev=%x (max is %x)\n",
2168				minUDFReadRev,
2169				UDF_MAX_READ_VERSION);
2170			ret = -EINVAL;
2171			goto error_out;
2172		} else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION &&
2173			   !(sb->s_flags & MS_RDONLY)) {
2174			ret = -EACCES;
2175			goto error_out;
2176		}
2177
2178		sbi->s_udfrev = minUDFWriteRev;
2179
2180		if (minUDFReadRev >= UDF_VERS_USE_EXTENDED_FE)
2181			UDF_SET_FLAG(sb, UDF_FLAG_USE_EXTENDED_FE);
2182		if (minUDFReadRev >= UDF_VERS_USE_STREAMS)
2183			UDF_SET_FLAG(sb, UDF_FLAG_USE_STREAMS);
2184	}
2185
2186	if (!sbi->s_partitions) {
2187		udf_warn(sb, "No partition found (2)\n");
2188		ret = -EINVAL;
2189		goto error_out;
2190	}
2191
2192	if (sbi->s_partmaps[sbi->s_partition].s_partition_flags &
2193			UDF_PART_FLAG_READ_ONLY &&
2194	    !(sb->s_flags & MS_RDONLY)) {
2195		ret = -EACCES;
2196		goto error_out;
2197	}
2198
2199	if (udf_find_fileset(sb, &fileset, &rootdir)) {
2200		udf_warn(sb, "No fileset found\n");
2201		ret = -EINVAL;
2202		goto error_out;
2203	}
2204
2205	if (!silent) {
2206		struct timestamp ts;
2207		udf_time_to_disk_stamp(&ts, sbi->s_record_time);
2208		udf_info("Mounting volume '%s', timestamp %04u/%02u/%02u %02u:%02u (%x)\n",
2209			 sbi->s_volume_ident,
2210			 le16_to_cpu(ts.year), ts.month, ts.day,
2211			 ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
2212	}
2213	if (!(sb->s_flags & MS_RDONLY))
2214		udf_open_lvid(sb);
2215
2216	/* Assign the root inode */
2217	/* assign inodes by physical block number */
2218	/* perhaps it's not extensible enough, but for now ... */
2219	inode = udf_iget(sb, &rootdir);
2220	if (IS_ERR(inode)) {
2221		udf_err(sb, "Error in udf_iget, block=%d, partition=%d\n",
2222		       rootdir.logicalBlockNum, rootdir.partitionReferenceNum);
2223		ret = PTR_ERR(inode);
2224		goto error_out;
2225	}
2226
2227	/* Allocate a dentry for the root inode */
2228	sb->s_root = d_make_root(inode);
2229	if (!sb->s_root) {
2230		udf_err(sb, "Couldn't allocate root dentry\n");
2231		ret = -ENOMEM;
2232		goto error_out;
2233	}
2234	sb->s_maxbytes = MAX_LFS_FILESIZE;
2235	sb->s_max_links = UDF_MAX_LINKS;
2236	return 0;
2237
2238error_out:
2239	iput(sbi->s_vat_inode);
2240parse_options_failure:
2241#ifdef CONFIG_UDF_NLS
2242	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
2243		unload_nls(sbi->s_nls_map);
2244#endif
2245	if (!(sb->s_flags & MS_RDONLY))
2246		udf_close_lvid(sb);
2247	brelse(sbi->s_lvid_bh);
2248	udf_sb_free_partitions(sb);
2249	kfree(sbi);
2250	sb->s_fs_info = NULL;
2251
2252	return ret;
2253}
2254
2255void _udf_err(struct super_block *sb, const char *function,
2256	      const char *fmt, ...)
2257{
2258	struct va_format vaf;
2259	va_list args;
2260
2261	va_start(args, fmt);
2262
2263	vaf.fmt = fmt;
2264	vaf.va = &args;
2265
2266	pr_err("error (device %s): %s: %pV", sb->s_id, function, &vaf);
2267
2268	va_end(args);
2269}
2270
2271void _udf_warn(struct super_block *sb, const char *function,
2272	       const char *fmt, ...)
2273{
2274	struct va_format vaf;
2275	va_list args;
2276
2277	va_start(args, fmt);
2278
2279	vaf.fmt = fmt;
2280	vaf.va = &args;
2281
2282	pr_warn("warning (device %s): %s: %pV", sb->s_id, function, &vaf);
2283
2284	va_end(args);
2285}
2286
2287static void udf_put_super(struct super_block *sb)
2288{
2289	struct udf_sb_info *sbi;
2290
2291	sbi = UDF_SB(sb);
2292
2293	iput(sbi->s_vat_inode);
2294#ifdef CONFIG_UDF_NLS
2295	if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
2296		unload_nls(sbi->s_nls_map);
2297#endif
2298	if (!(sb->s_flags & MS_RDONLY))
2299		udf_close_lvid(sb);
2300	brelse(sbi->s_lvid_bh);
2301	udf_sb_free_partitions(sb);
2302	mutex_destroy(&sbi->s_alloc_mutex);
2303	kfree(sb->s_fs_info);
2304	sb->s_fs_info = NULL;
2305}
2306
2307static int udf_sync_fs(struct super_block *sb, int wait)
2308{
2309	struct udf_sb_info *sbi = UDF_SB(sb);
2310
2311	mutex_lock(&sbi->s_alloc_mutex);
2312	if (sbi->s_lvid_dirty) {
2313		/*
2314		 * Blockdevice will be synced later so we don't have to submit
2315		 * the buffer for IO
2316		 */
2317		mark_buffer_dirty(sbi->s_lvid_bh);
2318		sbi->s_lvid_dirty = 0;
2319	}
2320	mutex_unlock(&sbi->s_alloc_mutex);
2321
2322	return 0;
2323}
2324
2325static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
2326{
2327	struct super_block *sb = dentry->d_sb;
2328	struct udf_sb_info *sbi = UDF_SB(sb);
2329	struct logicalVolIntegrityDescImpUse *lvidiu;
2330	u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
2331
2332	lvidiu = udf_sb_lvidiu(sb);
2333	buf->f_type = UDF_SUPER_MAGIC;
2334	buf->f_bsize = sb->s_blocksize;
2335	buf->f_blocks = sbi->s_partmaps[sbi->s_partition].s_partition_len;
2336	buf->f_bfree = udf_count_free(sb);
2337	buf->f_bavail = buf->f_bfree;
2338	buf->f_files = (lvidiu != NULL ? (le32_to_cpu(lvidiu->numFiles) +
2339					  le32_to_cpu(lvidiu->numDirs)) : 0)
2340			+ buf->f_bfree;
2341	buf->f_ffree = buf->f_bfree;
2342	buf->f_namelen = UDF_NAME_LEN - 2;
2343	buf->f_fsid.val[0] = (u32)id;
2344	buf->f_fsid.val[1] = (u32)(id >> 32);
2345
2346	return 0;
2347}
2348
2349static unsigned int udf_count_free_bitmap(struct super_block *sb,
2350					  struct udf_bitmap *bitmap)
2351{
2352	struct buffer_head *bh = NULL;
2353	unsigned int accum = 0;
2354	int index;
2355	int block = 0, newblock;
2356	struct kernel_lb_addr loc;
2357	uint32_t bytes;
2358	uint8_t *ptr;
2359	uint16_t ident;
2360	struct spaceBitmapDesc *bm;
2361
2362	loc.logicalBlockNum = bitmap->s_extPosition;
2363	loc.partitionReferenceNum = UDF_SB(sb)->s_partition;
2364	bh = udf_read_ptagged(sb, &loc, 0, &ident);
2365
2366	if (!bh) {
2367		udf_err(sb, "udf_count_free failed\n");
2368		goto out;
2369	} else if (ident != TAG_IDENT_SBD) {
2370		brelse(bh);
2371		udf_err(sb, "udf_count_free failed\n");
2372		goto out;
2373	}
2374
2375	bm = (struct spaceBitmapDesc *)bh->b_data;
2376	bytes = le32_to_cpu(bm->numOfBytes);
2377	index = sizeof(struct spaceBitmapDesc); /* offset in first block only */
2378	ptr = (uint8_t *)bh->b_data;
2379
2380	while (bytes > 0) {
2381		u32 cur_bytes = min_t(u32, bytes, sb->s_blocksize - index);
2382		accum += bitmap_weight((const unsigned long *)(ptr + index),
2383					cur_bytes * 8);
2384		bytes -= cur_bytes;
2385		if (bytes) {
2386			brelse(bh);
2387			newblock = udf_get_lb_pblock(sb, &loc, ++block);
2388			bh = udf_tread(sb, newblock);
2389			if (!bh) {
2390				udf_debug("read failed\n");
2391				goto out;
2392			}
2393			index = 0;
2394			ptr = (uint8_t *)bh->b_data;
2395		}
2396	}
2397	brelse(bh);
2398out:
2399	return accum;
2400}
2401
2402static unsigned int udf_count_free_table(struct super_block *sb,
2403					 struct inode *table)
2404{
2405	unsigned int accum = 0;
2406	uint32_t elen;
2407	struct kernel_lb_addr eloc;
2408	int8_t etype;
2409	struct extent_position epos;
2410
2411	mutex_lock(&UDF_SB(sb)->s_alloc_mutex);
2412	epos.block = UDF_I(table)->i_location;
2413	epos.offset = sizeof(struct unallocSpaceEntry);
2414	epos.bh = NULL;
2415
2416	while ((etype = udf_next_aext(table, &epos, &eloc, &elen, 1)) != -1)
2417		accum += (elen >> table->i_sb->s_blocksize_bits);
2418
2419	brelse(epos.bh);
2420	mutex_unlock(&UDF_SB(sb)->s_alloc_mutex);
2421
2422	return accum;
2423}
2424
2425static unsigned int udf_count_free(struct super_block *sb)
2426{
2427	unsigned int accum = 0;
2428	struct udf_sb_info *sbi;
2429	struct udf_part_map *map;
2430
2431	sbi = UDF_SB(sb);
2432	if (sbi->s_lvid_bh) {
2433		struct logicalVolIntegrityDesc *lvid =
2434			(struct logicalVolIntegrityDesc *)
2435			sbi->s_lvid_bh->b_data;
2436		if (le32_to_cpu(lvid->numOfPartitions) > sbi->s_partition) {
2437			accum = le32_to_cpu(
2438					lvid->freeSpaceTable[sbi->s_partition]);
2439			if (accum == 0xFFFFFFFF)
2440				accum = 0;
2441		}
2442	}
2443
2444	if (accum)
2445		return accum;
2446
2447	map = &sbi->s_partmaps[sbi->s_partition];
2448	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
2449		accum += udf_count_free_bitmap(sb,
2450					       map->s_uspace.s_bitmap);
2451	}
2452	if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
2453		accum += udf_count_free_bitmap(sb,
2454					       map->s_fspace.s_bitmap);
2455	}
2456	if (accum)
2457		return accum;
2458
2459	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
2460		accum += udf_count_free_table(sb,
2461					      map->s_uspace.s_table);
2462	}
2463	if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
2464		accum += udf_count_free_table(sb,
2465					      map->s_fspace.s_table);
2466	}
2467
2468	return accum;
2469}
2470