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