lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080107113438.GD12589@duck.suse.cz>
Date:	Mon, 7 Jan 2008 12:34:38 +0100
From:	Jan Kara <jack@...e.cz>
To:	marcin.slusarz@...il.com
Cc:	LKML <linux-kernel@...r.kernel.org>,
	Ben Fennema <bfennema@...con.csc.calpoly.edu>
Subject: Re: [PATCH 21/24] udf: remove some UDF_SB_* macros

On Sun 23-12-07 02:51:11, marcin.slusarz@...il.com wrote:
> remove macros:
> - UDF_SB_PARTTYPE
> - UDF_SB_PARTROOT
> - UDF_SB_PARTLEN
> - UDF_SB_PARTVSN
> - UDF_SB_PARTNUM
> - UDF_SB_TYPESPAR
> - UDF_SB_TYPEVIRT
> - UDF_SB_PARTFUNC
> - UDF_SB_PARTFLAGS
> and replace all uses
> 
> Signed-off-by: Marcin Slusarz <marcin.slusarz@...il.com>
> CC: Ben Fennema <bfennema@...con.csc.calpoly.edu>
> CC: Jan Kara <jack@...e.cz>
  Looks fine. Acked-by: Jan Kara <jack@...e.cz>

										Honza

> ---
>  fs/udf/balloc.c    |   76 +++++++++++----------
>  fs/udf/inode.c     |    2 +-
>  fs/udf/partition.c |   49 ++++++++------
>  fs/udf/super.c     |  191 ++++++++++++++++++++++++++++------------------------
>  fs/udf/udf_sb.h    |   16 ++---
>  5 files changed, 179 insertions(+), 155 deletions(-)
> 
> diff --git a/fs/udf/balloc.c b/fs/udf/balloc.c
> index 23aae18..4fe8635 100644
> --- a/fs/udf/balloc.c
> +++ b/fs/udf/balloc.c
> @@ -155,10 +155,10 @@ static void udf_bitmap_free_blocks(struct super_block *sb,
>  
>  	mutex_lock(&sbi->s_alloc_mutex);
>  	if (bloc.logicalBlockNum < 0 ||
> -	    (bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum)) {
> +	    (bloc.logicalBlockNum + count) > udf_sb_partmap(sb, bloc.partitionReferenceNum)->s_partition_len) {
>  		udf_debug("%d < %d || %d + %d > %d\n",
>  			  bloc.logicalBlockNum, 0, bloc.logicalBlockNum, count,
> -			  UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum));
> +			  udf_sb_partmap(sb, bloc.partitionReferenceNum)->s_partition_len);
>  		goto error_return;
>  	}
>  
> @@ -219,16 +219,18 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb,
>  	int bit, block, block_group, group_start;
>  	int nr_groups, bitmap_nr;
>  	struct buffer_head *bh;
> +	__u32 part_len;
>  
>  	mutex_lock(&sbi->s_alloc_mutex);
> -	if (first_block < 0 || first_block >= UDF_SB_PARTLEN(sb, partition))
> +	part_len = udf_sb_partmap(sb, partition)->s_partition_len;
> +	if (first_block < 0 || first_block >= part_len)
>  		goto out;
>  
> -	if (first_block + block_count > UDF_SB_PARTLEN(sb, partition))
> -		block_count = UDF_SB_PARTLEN(sb, partition) - first_block;
> +	if (first_block + block_count > part_len)
> +		block_count = part_len - first_block;
>  
>  repeat:
> -	nr_groups = (UDF_SB_PARTLEN(sb, partition) +
> +	nr_groups = (udf_sb_partmap(sb, partition)->s_partition_len +
>  		     (sizeof(struct spaceBitmapDesc) << 3) +
>  		     (sb->s_blocksize * 8) - 1) / (sb->s_blocksize * 8);
>  	block = first_block + (sizeof(struct spaceBitmapDesc) << 3);
> @@ -287,7 +289,7 @@ static int udf_bitmap_new_block(struct super_block *sb,
>  	mutex_lock(&sbi->s_alloc_mutex);
>  
>  repeat:
> -	if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
> +	if (goal < 0 || goal >= udf_sb_partmap(sb, partition)->s_partition_len)
>  		goal = 0;
>  
>  	nr_groups = bitmap->s_nr_groups;
> @@ -421,10 +423,10 @@ static void udf_table_free_blocks(struct super_block *sb,
>  
>  	mutex_lock(&sbi->s_alloc_mutex);
>  	if (bloc.logicalBlockNum < 0 ||
> -	    (bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum)) {
> +	    (bloc.logicalBlockNum + count) > udf_sb_partmap(sb, bloc.partitionReferenceNum)->s_partition_len) {
>  		udf_debug("%d < %d || %d + %d > %d\n",
>  			  bloc.logicalBlockNum, 0, bloc.logicalBlockNum, count,
> -			  UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum));
> +			  udf_sb_partmap(sb, bloc.partitionReferenceNum)->s_partition_len);
>  		goto error_return;
>  	}
>  
> @@ -627,7 +629,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb,
>  	struct extent_position epos;
>  	int8_t etype = -1;
>  
> -	if (first_block < 0 || first_block >= UDF_SB_PARTLEN(sb, partition))
> +	if (first_block < 0 || first_block >= udf_sb_partmap(sb, partition)->s_partition_len)
>  		return 0;
>  
>  	if (UDF_I_ALLOCTYPE(table) == ICBTAG_FLAG_AD_SHORT)
> @@ -703,7 +705,7 @@ static int udf_table_new_block(struct super_block *sb,
>  		return newblock;
>  
>  	mutex_lock(&sbi->s_alloc_mutex);
> -	if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
> +	if (goal < 0 || goal >= udf_sb_partmap(sb, partition)->s_partition_len)
>  		goal = 0;
>  
>  	/* We search for the closest matching block to goal. If we find a exact hit,
> @@ -789,22 +791,23 @@ inline void udf_free_blocks(struct super_block *sb,
>  			    uint32_t count)
>  {
>  	uint16_t partition = bloc.partitionReferenceNum;
> +	struct udf_part_map *map = udf_sb_partmap(sb, partition);
>  
> -	if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_BITMAP) {
> +	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
>  		return udf_bitmap_free_blocks(sb, inode,
> -					      udf_sb_partmaps(sb)[partition].s_uspace.s_bitmap,
> +					      map->s_uspace.s_bitmap,
>  					      bloc, offset, count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
>  		return udf_table_free_blocks(sb, inode,
> -					     udf_sb_partmaps(sb)[partition].s_uspace.s_table,
> +					     map->s_uspace.s_table,
>  					     bloc, offset, count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_BITMAP) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
>  		return udf_bitmap_free_blocks(sb, inode,
> -					      udf_sb_partmaps(sb)[partition].s_fspace.s_bitmap,
> +					      map->s_fspace.s_bitmap,
>  					      bloc, offset, count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
>  		return udf_table_free_blocks(sb, inode,
> -					     udf_sb_partmaps(sb)[partition].s_fspace.s_table,
> +					     map->s_fspace.s_table,
>  					     bloc, offset, count);
>  	} else {
>  		return;
> @@ -816,21 +819,23 @@ inline int udf_prealloc_blocks(struct super_block *sb,
>  			       uint16_t partition, uint32_t first_block,
>  			       uint32_t block_count)
>  {
> -	if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_BITMAP) {
> +	struct udf_part_map *map = udf_sb_partmap(sb, partition);
> +
> +	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
>  		return udf_bitmap_prealloc_blocks(sb, inode,
> -						  udf_sb_partmaps(sb)[partition].s_uspace.s_bitmap,
> +						  map->s_uspace.s_bitmap,
>  						  partition, first_block, block_count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
>  		return udf_table_prealloc_blocks(sb, inode,
> -						 udf_sb_partmaps(sb)[partition].s_uspace.s_table,
> +						 map->s_uspace.s_table,
>  						 partition, first_block, block_count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_BITMAP) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
>  		return udf_bitmap_prealloc_blocks(sb, inode,
> -						  udf_sb_partmaps(sb)[partition].s_fspace.s_bitmap,
> +						  map->s_fspace.s_bitmap,
>  						  partition, first_block, block_count);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
>  		return udf_table_prealloc_blocks(sb, inode,
> -						 udf_sb_partmaps(sb)[partition].s_fspace.s_table,
> +						 map->s_fspace.s_table,
>  						 partition, first_block, block_count);
>  	} else {
>  		return 0;
> @@ -842,23 +847,24 @@ inline int udf_new_block(struct super_block *sb,
>  			 uint16_t partition, uint32_t goal, int *err)
>  {
>  	int ret;
> +	struct udf_part_map *map = udf_sb_partmap(sb, partition);
>  
> -	if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_BITMAP) {
> +	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
>  		ret = udf_bitmap_new_block(sb, inode,
> -					   udf_sb_partmaps(sb)[partition].s_uspace.s_bitmap,
> +					   map->s_uspace.s_bitmap,
>  					   partition, goal, err);
>  		return ret;
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_UNALLOC_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
>  		return udf_table_new_block(sb, inode,
> -					   udf_sb_partmaps(sb)[partition].s_uspace.s_table,
> +					   map->s_uspace.s_table,
>  					   partition, goal, err);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_BITMAP) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
>  		return udf_bitmap_new_block(sb, inode,
> -					    udf_sb_partmaps(sb)[partition].s_fspace.s_bitmap,
> +					    map->s_fspace.s_bitmap,
>  					    partition, goal, err);
> -	} else if (UDF_SB_PARTFLAGS(sb, partition) & UDF_PART_FLAG_FREED_TABLE) {
> +	} else if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
>  		return udf_table_new_block(sb, inode,
> -					   udf_sb_partmaps(sb)[partition].s_fspace.s_table,
> +					   map->s_fspace.s_table,
>  					   partition, goal, err);
>  	} else {
>  		*err = -EIO;
> diff --git a/fs/udf/inode.c b/fs/udf/inode.c
> index 1cdb381..8aa0fc6 100644
> --- a/fs/udf/inode.c
> +++ b/fs/udf/inode.c
> @@ -1585,7 +1585,7 @@ struct inode *udf_iget(struct super_block *sb, kernel_lb_addr ino)
>  	if (is_bad_inode(inode))
>  		goto out_iput;
>  
> -	if (ino.logicalBlockNum >= UDF_SB_PARTLEN(sb, ino.partitionReferenceNum)) {
> +	if (ino.logicalBlockNum >= udf_sb_partmap(sb, ino.partitionReferenceNum)->s_partition_len) {
>  		udf_debug("block=%d, partition=%d out of range\n",
>  			  ino.logicalBlockNum, ino.partitionReferenceNum);
>  		make_bad_inode(inode);
> diff --git a/fs/udf/partition.c b/fs/udf/partition.c
> index 99640a6..4959d53 100644
> --- a/fs/udf/partition.c
> +++ b/fs/udf/partition.c
> @@ -31,15 +31,17 @@
>  inline uint32_t udf_get_pblock(struct super_block *sb, uint32_t block,
>  			       uint16_t partition, uint32_t offset)
>  {
> +	struct udf_part_map *map;
>  	if (partition >= udf_sb_num_parts(sb)) {
>  		udf_debug("block=%d, partition=%d, offset=%d: invalid partition\n",
>  			  block, partition, offset);
>  		return 0xFFFFFFFF;
>  	}
> -	if (UDF_SB_PARTFUNC(sb, partition))
> -		return UDF_SB_PARTFUNC(sb, partition)(sb, block, partition, offset);
> +	map = udf_sb_partmap(sb, partition);
> +	if (map->s_partition_func)
> +		return map->s_partition_func(sb, block, partition, offset);
>  	else
> -		return UDF_SB_PARTROOT(sb, partition) + block + offset;
> +		return map->s_partition_root + block + offset;
>  }
>  
>  uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
> @@ -49,12 +51,14 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
>  	uint32_t newblock;
>  	uint32_t index;
>  	uint32_t loc;
> +	struct udf_part_map *map;
>  
> -	index = (sb->s_blocksize - UDF_SB_TYPEVIRT(sb,partition).s_start_offset) / sizeof(uint32_t);
> +	map = udf_sb_partmap(sb, partition);
> +	index = (sb->s_blocksize - map->s_type_specific.s_virtual.s_start_offset) / sizeof(uint32_t);
>  
> -	if (block > UDF_SB_TYPEVIRT(sb,partition).s_num_entries) {
> +	if (block > map->s_type_specific.s_virtual.s_num_entries) {
>  		udf_debug("Trying to access block beyond end of VAT (%d max %d)\n",
> -			  block, UDF_SB_TYPEVIRT(sb,partition).s_num_entries);
> +			  block, map->s_type_specific.s_virtual.s_num_entries);
>  		return 0xFFFFFFFF;
>  	}
>  
> @@ -64,7 +68,7 @@ uint32_t udf_get_pblock_virt15(struct super_block *sb, uint32_t block,
>  		index = block % (sb->s_blocksize / sizeof(uint32_t));
>  	} else {
>  		newblock = 0;
> -		index = UDF_SB_TYPEVIRT(sb,partition).s_start_offset / sizeof(uint32_t) + block;
> +		index = map->s_type_specific.s_virtual.s_start_offset / sizeof(uint32_t) + block;
>  	}
>  
>  	loc = udf_block_map(udf_sb_vat_inode(sb), newblock);
> @@ -100,11 +104,15 @@ uint32_t udf_get_pblock_spar15(struct super_block * sb, uint32_t block,
>  {
>  	int i;
>  	struct sparingTable *st = NULL;
> -	uint32_t packet = (block + offset) & ~(UDF_SB_TYPESPAR(sb,partition).s_packet_len - 1);
> +	struct udf_part_map *map;
> +	uint32_t packet;
> +
> +	map = udf_sb_partmap(sb, partition);
> +	packet = (block + offset) & ~(map->s_type_specific.s_sparing.s_packet_len - 1);
>  
>  	for (i = 0; i < 4; i++) {
> -		if (UDF_SB_TYPESPAR(sb,partition).s_spar_map[i] != NULL) {
> -			st = (struct sparingTable *)UDF_SB_TYPESPAR(sb,partition).s_spar_map[i]->b_data;
> +		if (map->s_type_specific.s_sparing.s_spar_map[i] != NULL) {
> +			st = (struct sparingTable *)map->s_type_specific.s_sparing.s_spar_map[i]->b_data;
>  			break;
>  		}
>  	}
> @@ -115,14 +123,14 @@ uint32_t udf_get_pblock_spar15(struct super_block * sb, uint32_t block,
>  				break;
>  			} else if (le32_to_cpu(st->mapEntry[i].origLocation) == packet) {
>  				return le32_to_cpu(st->mapEntry[i].mappedLocation) +
> -					((block + offset) & (UDF_SB_TYPESPAR(sb,partition).s_packet_len - 1));
> +					((block + offset) & (map->s_type_specific.s_sparing.s_packet_len - 1));
>  			} else if (le32_to_cpu(st->mapEntry[i].origLocation) > packet) {
>  				break;
>  			}
>  		}
>  	}
>  
> -	return UDF_SB_PARTROOT(sb,partition) + block + offset;
> +	return map->s_partition_root + block + offset;
>  }
>  
>  int udf_relocate_blocks(struct super_block *sb, long old_block, long *new_block)
> @@ -134,13 +142,14 @@ int udf_relocate_blocks(struct super_block *sb, long old_block, long *new_block)
>  	int i, j, k, l;
>  
>  	for (i = 0; i < udf_sb_num_parts(sb); i++) {
> -		if (old_block > UDF_SB_PARTROOT(sb,i) &&
> -		    old_block < UDF_SB_PARTROOT(sb,i) + UDF_SB_PARTLEN(sb,i)) {
> -			sdata = &UDF_SB_TYPESPAR(sb,i);
> -			packet = (old_block - UDF_SB_PARTROOT(sb,i)) & ~(sdata->s_packet_len - 1);
> +		struct udf_part_map *map = udf_sb_partmap(sb, i);
> +		if (old_block > map->s_partition_root &&
> +		    old_block < map->s_partition_root + map->s_partition_len) {
> +			sdata = &map->s_type_specific.s_sparing;
> +			packet = (old_block - map->s_partition_root) & ~(sdata->s_packet_len - 1);
>  
>  			for (j = 0; j < 4; j++) {
> -				if (UDF_SB_TYPESPAR(sb,i).s_spar_map[j] != NULL) {
> +				if (map->s_type_specific.s_sparing.s_spar_map[j] != NULL) {
>  					st = (struct sparingTable *)sdata->s_spar_map[j]->b_data;
>  					break;
>  				}
> @@ -160,11 +169,11 @@ int udf_relocate_blocks(struct super_block *sb, long old_block, long *new_block)
>  						}
>  					}
>  					*new_block = le32_to_cpu(st->mapEntry[k].mappedLocation) +
> -						((old_block - UDF_SB_PARTROOT(sb,i)) & (sdata->s_packet_len - 1));
> +						((old_block - map->s_partition_root) & (sdata->s_packet_len - 1));
>  					return 0;
>  				} else if (le32_to_cpu(st->mapEntry[k].origLocation) == packet) {
>  					*new_block = le32_to_cpu(st->mapEntry[k].mappedLocation) +
> -						((old_block - UDF_SB_PARTROOT(sb,i)) & (sdata->s_packet_len - 1));
> +						((old_block - map->s_partition_root) & (sdata->s_packet_len - 1));
>  					return 0;
>  				} else if (le32_to_cpu(st->mapEntry[k].origLocation) > packet) {
>  					break;
> @@ -185,7 +194,7 @@ int udf_relocate_blocks(struct super_block *sb, long old_block, long *new_block)
>  						}
>  					}
>  					*new_block = le32_to_cpu(st->mapEntry[k].mappedLocation) +
> -						((old_block - UDF_SB_PARTROOT(sb,i)) & (sdata->s_packet_len - 1));
> +						((old_block - map->s_partition_root) & (sdata->s_packet_len - 1));
>  					return 0;
>  				}
>  			}
> diff --git a/fs/udf/super.c b/fs/udf/super.c
> index f8c5794..33ccf66 100644
> --- a/fs/udf/super.c
> +++ b/fs/udf/super.c
> @@ -795,8 +795,9 @@ static int udf_find_fileset(struct super_block *sb,
>  		      fileset->logicalBlockNum == 0xFFFFFFFF &&
>  		      fileset->partitionReferenceNum == 0xFFFF);
>  		     newfileset.partitionReferenceNum--) {
> -			lastblock = UDF_SB_PARTLEN(sb,
> -					newfileset.partitionReferenceNum);
> +			lastblock = udf_sb_partmap(sb,
> +					newfileset.partitionReferenceNum)->
> +						s_partition_len;
>  			newfileset.logicalBlockNum = 0;
>  
>  			do {
> @@ -904,23 +905,25 @@ static int udf_load_partdesc(struct super_block *sb, struct buffer_head *bh)
>  {
>  	struct partitionDesc *p;
>  	int i;
> +	struct udf_part_map *map;
>  
>  	p = (struct partitionDesc *)bh->b_data;
>  
>  	for (i = 0; i < udf_sb_num_parts(sb); i++) {
> +		map = udf_sb_partmap(sb, i);
>  		udf_debug("Searching map: (%d == %d)\n",
> -			  udf_sb_partmaps(sb)[i].s_partition_num, le16_to_cpu(p->partitionNumber));
> -		if (udf_sb_partmaps(sb)[i].s_partition_num == le16_to_cpu(p->partitionNumber)) {
> -			UDF_SB_PARTLEN(sb, i) = le32_to_cpu(p->partitionLength); /* blocks */
> -			UDF_SB_PARTROOT(sb, i) = le32_to_cpu(p->partitionStartingLocation);
> +			  map->s_partition_num, le16_to_cpu(p->partitionNumber));
> +		if (map->s_partition_num == le16_to_cpu(p->partitionNumber)) {
> +			map->s_partition_len = le32_to_cpu(p->partitionLength); /* blocks */
> +			map->s_partition_root = le32_to_cpu(p->partitionStartingLocation);
>  			if (le32_to_cpu(p->accessType) == PD_ACCESS_TYPE_READ_ONLY)
> -				UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_READ_ONLY;
> +				map->s_partition_flags |= UDF_PART_FLAG_READ_ONLY;
>  			if (le32_to_cpu(p->accessType) == PD_ACCESS_TYPE_WRITE_ONCE)
> -				UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_WRITE_ONCE;
> +				map->s_partition_flags |= UDF_PART_FLAG_WRITE_ONCE;
>  			if (le32_to_cpu(p->accessType) == PD_ACCESS_TYPE_REWRITABLE)
> -				UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_REWRITABLE;
> +				map->s_partition_flags |= UDF_PART_FLAG_REWRITABLE;
>  			if (le32_to_cpu(p->accessType) == PD_ACCESS_TYPE_OVERWRITABLE)
> -				UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_OVERWRITABLE;
> +				map->s_partition_flags |= UDF_PART_FLAG_OVERWRITABLE;
>  
>  			if (!strcmp(p->partitionContents.ident,
>  				    PD_PARTITION_CONTENTS_NSR02) ||
> @@ -935,26 +938,26 @@ static int udf_load_partdesc(struct super_block *sb, struct buffer_head *bh)
>  						.partitionReferenceNum = i,
>  					};
>  
> -					udf_sb_partmaps(sb)[i].s_uspace.s_table =
> +					map->s_uspace.s_table =
>  						udf_iget(sb, loc);
> -					if (!udf_sb_partmaps(sb)[i].s_uspace.s_table) {
> +					if (!map->s_uspace.s_table) {
>  						udf_debug("cannot load unallocSpaceTable (part %d)\n", i);
>  						return 1;
>  					}
> -					UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_UNALLOC_TABLE;
> +					map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_TABLE;
>  					udf_debug("unallocSpaceTable (part %d) @ %ld\n",
> -						  i, udf_sb_partmaps(sb)[i].s_uspace.s_table->i_ino);
> +						  i, map->s_uspace.s_table->i_ino);
>  				}
>  				if (phd->unallocSpaceBitmap.extLength) {
>  					UDF_SB_ALLOC_BITMAP(sb, i, s_uspace);
> -					if (udf_sb_partmaps(sb)[i].s_uspace.s_bitmap != NULL) {
> -						udf_sb_partmaps(sb)[i].s_uspace.s_bitmap->s_extLength =
> +					if (map->s_uspace.s_bitmap != NULL) {
> +						map->s_uspace.s_bitmap->s_extLength =
>  							le32_to_cpu(phd->unallocSpaceBitmap.extLength);
> -						udf_sb_partmaps(sb)[i].s_uspace.s_bitmap->s_extPosition =
> +						map->s_uspace.s_bitmap->s_extPosition =
>  							le32_to_cpu(phd->unallocSpaceBitmap.extPosition);
> -						UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_UNALLOC_BITMAP;
> +						map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_BITMAP;
>  						udf_debug("unallocSpaceBitmap (part %d) @ %d\n",
> -							  i, udf_sb_partmaps(sb)[i].s_uspace.s_bitmap->s_extPosition);
> +							  i, map->s_uspace.s_bitmap->s_extPosition);
>  					}
>  				}
>  				if (phd->partitionIntegrityTable.extLength)
> @@ -965,26 +968,26 @@ static int udf_load_partdesc(struct super_block *sb, struct buffer_head *bh)
>  						.partitionReferenceNum = i,
>  					};
>  
> -					udf_sb_partmaps(sb)[i].s_fspace.s_table =
> +					map->s_fspace.s_table =
>  						udf_iget(sb, loc);
> -					if (!udf_sb_partmaps(sb)[i].s_fspace.s_table) {
> +					if (!map->s_fspace.s_table) {
>  						udf_debug("cannot load freedSpaceTable (part %d)\n", i);
>  						return 1;
>  					}
> -					UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_FREED_TABLE;
> +					map->s_partition_flags |= UDF_PART_FLAG_FREED_TABLE;
>  					udf_debug("freedSpaceTable (part %d) @ %ld\n",
> -						  i, udf_sb_partmaps(sb)[i].s_fspace.s_table->i_ino);
> +						  i, map->s_fspace.s_table->i_ino);
>  				}
>  				if (phd->freedSpaceBitmap.extLength) {
>  					UDF_SB_ALLOC_BITMAP(sb, i, s_fspace);
> -					if (udf_sb_partmaps(sb)[i].s_fspace.s_bitmap != NULL) {
> -						udf_sb_partmaps(sb)[i].s_fspace.s_bitmap->s_extLength =
> +					if (map->s_fspace.s_bitmap != NULL) {
> +						map->s_fspace.s_bitmap->s_extLength =
>  							le32_to_cpu(phd->freedSpaceBitmap.extLength);
> -						udf_sb_partmaps(sb)[i].s_fspace.s_bitmap->s_extPosition =
> +						map->s_fspace.s_bitmap->s_extPosition =
>  							le32_to_cpu(phd->freedSpaceBitmap.extPosition);
> -						UDF_SB_PARTFLAGS(sb, i) |= UDF_PART_FLAG_FREED_BITMAP;
> +						map->s_partition_flags |= UDF_PART_FLAG_FREED_BITMAP;
>  						udf_debug("freedSpaceBitmap (part %d) @ %d\n",
> -							  i, udf_sb_partmaps(sb)[i].s_fspace.s_bitmap->s_extPosition);
> +							  i, map->s_fspace.s_bitmap->s_extPosition);
>  					}
>  				}
>  			}
> @@ -998,8 +1001,9 @@ static int udf_load_partdesc(struct super_block *sb, struct buffer_head *bh)
>  		udf_debug("Partition (%d:%d type %x) starts at physical %d, "
>  			  "block length %d\n",
>  			  le16_to_cpu(p->partitionNumber), i,
> -			  UDF_SB_PARTTYPE(sb, i), UDF_SB_PARTROOT(sb, i),
> -			  UDF_SB_PARTLEN(sb, i));
> +			  map->s_partition_type,
> +			  map->s_partition_root,
> +			  map->s_partition_len);
>  	}
>  	return 0;
>  }
> @@ -1020,22 +1024,23 @@ static int udf_load_logicalvol(struct super_block *sb, struct buffer_head *bh,
>  	for (i = 0, offset = 0;
>  	     i < udf_sb_num_parts(sb) && offset < le32_to_cpu(lvd->mapTableLength);
>  	     i++, offset += ((struct genericPartitionMap *)&(lvd->partitionMaps[offset]))->partitionMapLength) {
> +	     	struct udf_part_map *map = udf_sb_partmap(sb, i);
>  		type = ((struct genericPartitionMap *)&(lvd->partitionMaps[offset]))->partitionMapType;
>  		if (type == 1) {
>  			struct genericPartitionMap1 *gpm1 = (struct genericPartitionMap1 *)&(lvd->partitionMaps[offset]);
> -			UDF_SB_PARTTYPE(sb, i) = UDF_TYPE1_MAP15;
> -			UDF_SB_PARTVSN(sb, i) = le16_to_cpu(gpm1->volSeqNum);
> -			UDF_SB_PARTNUM(sb, i) = le16_to_cpu(gpm1->partitionNum);
> -			UDF_SB_PARTFUNC(sb, i) = NULL;
> +			map->s_partition_type = UDF_TYPE1_MAP15;
> +			map->s_volumeseqnum = le16_to_cpu(gpm1->volSeqNum);
> +			map->s_partition_num = le16_to_cpu(gpm1->partitionNum);
> +			map->s_partition_func = NULL;
>  		} else if (type == 2) {
>  			struct udfPartitionMap2 *upm2 = (struct udfPartitionMap2 *)&(lvd->partitionMaps[offset]);
>  			if (!strncmp(upm2->partIdent.ident, UDF_ID_VIRTUAL, strlen(UDF_ID_VIRTUAL))) {
>  				if (le16_to_cpu(((__le16 *)upm2->partIdent.identSuffix)[0]) == 0x0150) {
> -					UDF_SB_PARTTYPE(sb, i) = UDF_VIRTUAL_MAP15;
> -					UDF_SB_PARTFUNC(sb, i) = udf_get_pblock_virt15;
> +					map->s_partition_type = UDF_VIRTUAL_MAP15;
> +					map->s_partition_func = udf_get_pblock_virt15;
>  				} else if (le16_to_cpu(((__le16 *)upm2->partIdent.identSuffix)[0]) == 0x0200) {
> -					UDF_SB_PARTTYPE(sb, i) = UDF_VIRTUAL_MAP20;
> -					UDF_SB_PARTFUNC(sb, i) = udf_get_pblock_virt20;
> +					map->s_partition_type = UDF_VIRTUAL_MAP20;
> +					map->s_partition_func = udf_get_pblock_virt20;
>  				}
>  			} else if (!strncmp(upm2->partIdent.ident, UDF_ID_SPARABLE, strlen(UDF_ID_SPARABLE))) {
>  				uint32_t loc;
> @@ -1043,33 +1048,33 @@ static int udf_load_logicalvol(struct super_block *sb, struct buffer_head *bh,
>  				struct sparingTable *st;
>  				struct sparablePartitionMap *spm = (struct sparablePartitionMap *)&(lvd->partitionMaps[offset]);
>  
> -				UDF_SB_PARTTYPE(sb, i) = UDF_SPARABLE_MAP15;
> -				UDF_SB_TYPESPAR(sb, i).s_packet_len = le16_to_cpu(spm->packetLength);
> +				map->s_partition_type = UDF_SPARABLE_MAP15;
> +				map->s_type_specific.s_sparing.s_packet_len = le16_to_cpu(spm->packetLength);
>  				for (j = 0; j < spm->numSparingTables; j++) {
>  					loc = le32_to_cpu(spm->locSparingTable[j]);
> -					UDF_SB_TYPESPAR(sb, i).s_spar_map[j] =
> +					map->s_type_specific.s_sparing.s_spar_map[j] =
>  						udf_read_tagged(sb, loc, loc, &ident);
> -					if (UDF_SB_TYPESPAR(sb, i).s_spar_map[j] != NULL) {
> -						st = (struct sparingTable *)UDF_SB_TYPESPAR(sb, i).s_spar_map[j]->b_data;
> +					if (map->s_type_specific.s_sparing.s_spar_map[j] != NULL) {
> +						st = (struct sparingTable *)map->s_type_specific.s_sparing.s_spar_map[j]->b_data;
>  						if (ident != 0 ||
>  						    strncmp(st->sparingIdent.ident, UDF_ID_SPARING, strlen(UDF_ID_SPARING))) {
> -							brelse(UDF_SB_TYPESPAR(sb, i).s_spar_map[j]);
> -							UDF_SB_TYPESPAR(sb, i).s_spar_map[j] = NULL;
> +							brelse(map->s_type_specific.s_sparing.s_spar_map[j]);
> +							map->s_type_specific.s_sparing.s_spar_map[j] = NULL;
>  						}
>  					}
>  				}
> -				UDF_SB_PARTFUNC(sb, i) = udf_get_pblock_spar15;
> +				map->s_partition_func = udf_get_pblock_spar15;
>  			} else {
>  				udf_debug("Unknown ident: %s\n",
>  					  upm2->partIdent.ident);
>  				continue;
>  			}
> -			UDF_SB_PARTVSN(sb, i) = le16_to_cpu(upm2->volSeqNum);
> -			UDF_SB_PARTNUM(sb, i) = le16_to_cpu(upm2->partitionNum);
> +			map->s_volumeseqnum = le16_to_cpu(upm2->volSeqNum);
> +			map->s_partition_num = le16_to_cpu(upm2->partitionNum);
>  		}
>  		udf_debug("Partition (%d:%d) type %d on volume %d\n",
> -			  i, UDF_SB_PARTNUM(sb, i), type,
> -			  UDF_SB_PARTVSN(sb, i));
> +			  i, map->s_partition_num, type,
> +			  map->s_volumeseqnum);
>  	}
>  
>  	if (fileset) {
> @@ -1323,7 +1328,8 @@ static int udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)
>  
>  	for (i = 0; i < udf_sb_num_parts(sb); i++) {
>  		kernel_lb_addr uninitialized_var(ino);
> -		switch (UDF_SB_PARTTYPE(sb, i)) {
> +		struct udf_part_map *map = udf_sb_partmap(sb, i);
> +		switch (map->s_partition_type) {
>  		case UDF_VIRTUAL_MAP15:
>  		case UDF_VIRTUAL_MAP20:
>  			if (!udf_sb_last_block(sb)) {
> @@ -1338,11 +1344,12 @@ static int udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)
>  			}
>  
>  			for (j = 0; j < udf_sb_num_parts(sb); j++) {
> +				struct udf_part_map *map2 = udf_sb_partmap(sb, j);
>  				if (j != i &&
> -				    UDF_SB_PARTVSN(sb, i) == UDF_SB_PARTVSN(sb, j) &&
> -				    UDF_SB_PARTNUM(sb, i) == UDF_SB_PARTNUM(sb, j)) {
> +				    map->s_volumeseqnum == map2->s_volumeseqnum &&
> +				    map->s_partition_num == map2->s_partition_num) {
>  					ino.partitionReferenceNum = j;
> -					ino.logicalBlockNum = udf_sb_last_block(sb) - UDF_SB_PARTROOT(sb, j);
> +					ino.logicalBlockNum = udf_sb_last_block(sb) - map2->s_partition_root;
>  					break;
>  				}
>  			}
> @@ -1354,12 +1361,12 @@ static int udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)
>  			if (!udf_sb_vat_inode(sb))
>  				return 1;
>  
> -			if (UDF_SB_PARTTYPE(sb, i) == UDF_VIRTUAL_MAP15) {
> -				UDF_SB_TYPEVIRT(sb, i).s_start_offset =
> +			if (map->s_partition_type == UDF_VIRTUAL_MAP15) {
> +				map->s_type_specific.s_virtual.s_start_offset =
>  					udf_ext0_offset(udf_sb_vat_inode(sb));
> -				UDF_SB_TYPEVIRT(sb, i).s_num_entries =
> +				map->s_type_specific.s_virtual.s_num_entries =
>  					(udf_sb_vat_inode(sb)->i_size - 36) >> 2;
> -			} else if (UDF_SB_PARTTYPE(sb, i) == UDF_VIRTUAL_MAP20) {
> +			} else if (map->s_partition_type == UDF_VIRTUAL_MAP20) {
>  				struct buffer_head *bh = NULL;
>  				uint32_t pos;
>  
> @@ -1367,16 +1374,18 @@ static int udf_load_partition(struct super_block *sb, kernel_lb_addr *fileset)
>  				bh = sb_bread(sb, pos);
>  				if (!bh)
>  					return 1;
> -				UDF_SB_TYPEVIRT(sb, i).s_start_offset =
> +				map->s_type_specific.s_virtual.s_start_offset =
>  					le16_to_cpu(((struct virtualAllocationTable20 *)bh->b_data +
>  						     udf_ext0_offset(udf_sb_vat_inode(sb)))->lengthHeader) +
>  					udf_ext0_offset(udf_sb_vat_inode(sb));
> -				UDF_SB_TYPEVIRT(sb, i).s_num_entries = (udf_sb_vat_inode(sb)->i_size -
> -									UDF_SB_TYPEVIRT(sb, i).s_start_offset) >> 2;
> +				map->s_type_specific.s_virtual.s_num_entries = (udf_sb_vat_inode(sb)->i_size -
> +									map->s_type_specific.s_virtual.s_start_offset) >> 2;
>  				brelse(bh);
>  			}
> -			UDF_SB_PARTROOT(sb, i) = udf_get_pblock(sb, 0, i, 0);
> -			UDF_SB_PARTLEN(sb, i) = UDF_SB_PARTLEN(sb, ino.partitionReferenceNum);
> +			map->s_partition_root = udf_get_pblock(sb, 0, i, 0);
> +			map->s_partition_len =
> +				udf_sb_partmap(sb, ino.partitionReferenceNum)->
> +								s_partition_len;
>  		}
>  	}
>  	return 0;
> @@ -1573,7 +1582,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
>  		goto error_out;
>  	}
>  
> -	if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_READ_ONLY) {
> +	if (udf_sb_partmap(sb, udf_sb_partition(sb))->s_partition_flags & UDF_PART_FLAG_READ_ONLY) {
>  		printk(KERN_NOTICE "UDF-fs: Partition marked readonly; forcing readonly mount\n");
>  		sb->s_flags |= MS_RDONLY;
>  	}
> @@ -1619,17 +1628,18 @@ error_out:
>  	if (udf_sb_vat_inode(sb))
>  		iput(udf_sb_vat_inode(sb));
>  	if (udf_sb_num_parts(sb)) {
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_TABLE)
> -			iput(udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_uspace.s_table);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_TABLE)
> -			iput(udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_fspace.s_table);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_BITMAP)
> +		struct udf_part_map *map = udf_sb_partmap(sb, udf_sb_partition(sb));
> +		if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE)
> +			iput(map->s_uspace.s_table);
> +		if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE)
> +			iput(map->s_fspace.s_table);
> +		if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP)
>  			UDF_SB_FREE_BITMAP(sb, udf_sb_partition(sb), s_uspace);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_BITMAP)
> +		if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP)
>  			UDF_SB_FREE_BITMAP(sb, udf_sb_partition(sb), s_fspace);
> -		if (UDF_SB_PARTTYPE(sb, udf_sb_partition(sb)) == UDF_SPARABLE_MAP15) {
> +		if (map->s_partition_type == UDF_SPARABLE_MAP15) {
>  			for (i = 0; i < 4; i++)
> -				brelse(UDF_SB_TYPESPAR(sb, udf_sb_partition(sb)).s_spar_map[i]);
> +				brelse(map->s_type_specific.s_sparing.s_spar_map[i]);
>  		}
>  	}
>  #ifdef CONFIG_UDF_NLS
> @@ -1694,17 +1704,18 @@ static void udf_put_super(struct super_block *sb)
>  	if (udf_sb_vat_inode(sb))
>  		iput(udf_sb_vat_inode(sb));
>  	if (udf_sb_num_parts(sb)) {
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_TABLE)
> -			iput(udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_uspace.s_table);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_TABLE)
> -			iput(udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_fspace.s_table);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_BITMAP)
> +		struct udf_part_map *map = udf_sb_partmap(sb, udf_sb_partition(sb));
> +		if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE)
> +			iput(map->s_uspace.s_table);
> +		if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE)
> +			iput(map->s_fspace.s_table);
> +		if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP)
>  			UDF_SB_FREE_BITMAP(sb, udf_sb_partition(sb), s_uspace);
> -		if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_BITMAP)
> +		if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP)
>  			UDF_SB_FREE_BITMAP(sb, udf_sb_partition(sb), s_fspace);
> -		if (UDF_SB_PARTTYPE(sb, udf_sb_partition(sb)) == UDF_SPARABLE_MAP15) {
> +		if (map->s_partition_type == UDF_SPARABLE_MAP15) {
>  			for (i = 0; i < 4; i++)
> -				brelse(UDF_SB_TYPESPAR(sb, udf_sb_partition(sb)).s_spar_map[i]);
> +				brelse(map->s_type_specific.s_sparing.s_spar_map[i]);
>  		}
>  	}
>  #ifdef CONFIG_UDF_NLS
> @@ -1738,7 +1749,7 @@ static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
>  
>  	buf->f_type = UDF_SUPER_MAGIC;
>  	buf->f_bsize = sb->s_blocksize;
> -	buf->f_blocks = UDF_SB_PARTLEN(sb, udf_sb_partition(sb));
> +	buf->f_blocks = udf_sb_partmap(sb, udf_sb_partition(sb))->s_partition_len;
>  	buf->f_bfree = udf_count_free(sb);
>  	buf->f_bavail = buf->f_bfree;
>  	buf->f_files = (udf_sb_lvid_bh(sb) ?
> @@ -1843,6 +1854,7 @@ static unsigned int udf_count_free_table(struct super_block *sb, struct inode *t
>  static unsigned int udf_count_free(struct super_block *sb)
>  {
>  	unsigned int accum = 0;
> +	struct udf_part_map *map;
>  
>  	if (udf_sb_lvid_bh(sb)) {
>  		if (le32_to_cpu(udf_sb_lvid(sb)->numOfPartitions) > udf_sb_partition(sb)) {
> @@ -1855,24 +1867,25 @@ static unsigned int udf_count_free(struct super_block *sb)
>  	if (accum)
>  		return accum;
>  
> -	if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_BITMAP) {
> +	map = udf_sb_partmap(sb, udf_sb_partition(sb));
> +	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) {
>  		accum += udf_count_free_bitmap(sb,
> -					       udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_uspace.s_bitmap);
> +					       map->s_uspace.s_bitmap);
>  	}
> -	if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_BITMAP) {
> +	if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) {
>  		accum += udf_count_free_bitmap(sb,
> -					       udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_fspace.s_bitmap);
> +					       map->s_fspace.s_bitmap);
>  	}
>  	if (accum)
>  		return accum;
>  
> -	if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_UNALLOC_TABLE) {
> +	if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) {
>  		accum += udf_count_free_table(sb,
> -					      udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_uspace.s_table);
> +					      map->s_uspace.s_table);
>  	}
> -	if (UDF_SB_PARTFLAGS(sb, udf_sb_partition(sb)) & UDF_PART_FLAG_FREED_TABLE) {
> +	if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) {
>  		accum += udf_count_free_table(sb,
> -					      udf_sb_partmaps(sb)[udf_sb_partition(sb)].s_fspace.s_table);
> +					      map->s_fspace.s_table);
>  	}
>  
>  	return accum;
> diff --git a/fs/udf/udf_sb.h b/fs/udf/udf_sb.h
> index aee5942..a5805c5 100644
> --- a/fs/udf/udf_sb.h
> +++ b/fs/udf/udf_sb.h
> @@ -48,6 +48,11 @@ static inline struct udf_part_map *udf_sb_partmaps(struct super_block *sb)
>  	return udf_sb(sb)->s_partmaps;
>  }
>  
> +static inline struct udf_part_map *udf_sb_partmap(struct super_block *sb, __u32 index)
> +{
> +	return udf_sb_partmaps(sb) + index;
> +}
> +
>  static inline int __must_check udf_sb_alloc_partition_maps(struct super_block *sb, __u32 count)
>  {
>  	struct udf_sb_info *info = udf_sb(sb);
> @@ -146,7 +151,7 @@ static inline void udf_update_revision(struct super_block *sb, __u16 revision)
>  
>  #define UDF_SB_ALLOC_BITMAP(X,Y,Z)\
>  {\
> -	int nr_groups = ((UDF_SB_PARTLEN((X),(Y)) + (sizeof(struct spaceBitmapDesc) << 3) +\
> +	int nr_groups = ((udf_sb_partmap((X),(Y))->s_partition_len + (sizeof(struct spaceBitmapDesc) << 3) +\
>  		((X)->s_blocksize * 8) - 1) / ((X)->s_blocksize * 8));\
>  	int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * nr_groups);\
>  	if (size <= PAGE_SIZE)\
> @@ -182,15 +187,6 @@ static inline void udf_update_revision(struct super_block *sb, __u16 revision)
>  #define UDF_SET_FLAG(X,Y)			( udf_sb(X)->s_flags |= ( 1 << (Y) ) )
>  #define UDF_CLEAR_FLAG(X,Y)			( udf_sb(X)->s_flags &= ~( 1 << (Y) ) )
>  
> -#define UDF_SB_PARTTYPE(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_type )
> -#define UDF_SB_PARTROOT(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_root )
> -#define UDF_SB_PARTLEN(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_len )
> -#define UDF_SB_PARTVSN(X,Y)			( udf_sb_partmaps(X)[(Y)].s_volumeseqnum )
> -#define UDF_SB_PARTNUM(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_num )
> -#define UDF_SB_TYPESPAR(X,Y)			( udf_sb_partmaps(X)[(Y)].s_type_specific.s_sparing )
> -#define UDF_SB_TYPEVIRT(X,Y)			( udf_sb_partmaps(X)[(Y)].s_type_specific.s_virtual )
> -#define UDF_SB_PARTFUNC(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_func )
> -#define UDF_SB_PARTFLAGS(X,Y)			( udf_sb_partmaps(X)[(Y)].s_partition_flags )
>  #define UDF_SB_BITMAP(X,Y,Z,I)			( udf_sb_partmaps(X)[(Y)].Z.s_bitmap->s_block_bitmap[I] )
>  #define UDF_SB_BITMAP_NR_GROUPS(X,Y,Z)		( udf_sb_partmaps(X)[(Y)].Z.s_bitmap->s_nr_groups )
>  
> -- 
> 1.5.3.4
> 
-- 
Jan Kara <jack@...e.cz>
SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ