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