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