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