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