mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 14:11:20 +00:00
udf: cache struct udf_inode_info
cache UDF_I(struct inode *) return values when there are at least 2 uses in one function Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> Acked-by: Jan Kara <jack@suse.cz> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c0b344385f
commit
48d6d8ff7d
11 changed files with 338 additions and 290 deletions
|
@ -74,17 +74,18 @@ void udf_truncate_tail_extent(struct inode *inode)
|
|||
uint64_t lbcount = 0;
|
||||
int8_t etype = -1, netype;
|
||||
int adsize;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB ||
|
||||
inode->i_size == UDF_I(inode)->i_lenExtents)
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB ||
|
||||
inode->i_size == iinfo->i_lenExtents)
|
||||
return;
|
||||
/* Are we going to delete the file anyway? */
|
||||
if (inode->i_nlink == 0)
|
||||
return;
|
||||
|
||||
if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
adsize = sizeof(short_ad);
|
||||
else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
else if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
adsize = sizeof(long_ad);
|
||||
else
|
||||
BUG();
|
||||
|
@ -117,7 +118,7 @@ void udf_truncate_tail_extent(struct inode *inode)
|
|||
}
|
||||
/* This inode entry is in-memory only and thus we don't have to mark
|
||||
* the inode dirty */
|
||||
UDF_I(inode)->i_lenExtents = inode->i_size;
|
||||
iinfo->i_lenExtents = inode->i_size;
|
||||
brelse(epos.bh);
|
||||
}
|
||||
|
||||
|
@ -129,19 +130,20 @@ void udf_discard_prealloc(struct inode *inode)
|
|||
uint64_t lbcount = 0;
|
||||
int8_t etype = -1, netype;
|
||||
int adsize;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB ||
|
||||
inode->i_size == UDF_I(inode)->i_lenExtents)
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB ||
|
||||
inode->i_size == iinfo->i_lenExtents)
|
||||
return;
|
||||
|
||||
if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
adsize = sizeof(short_ad);
|
||||
else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
else if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
adsize = sizeof(long_ad);
|
||||
else
|
||||
adsize = 0;
|
||||
|
||||
epos.block = UDF_I(inode)->i_location;
|
||||
epos.block = iinfo->i_location;
|
||||
|
||||
/* Find the last extent in the file */
|
||||
while ((netype = udf_next_aext(inode, &epos, &eloc, &elen, 1)) != -1) {
|
||||
|
@ -153,7 +155,7 @@ void udf_discard_prealloc(struct inode *inode)
|
|||
lbcount -= elen;
|
||||
extent_trunc(inode, &epos, eloc, etype, elen, 0);
|
||||
if (!epos.bh) {
|
||||
UDF_I(inode)->i_lenAlloc =
|
||||
iinfo->i_lenAlloc =
|
||||
epos.offset -
|
||||
udf_file_entry_alloc_offset(inode);
|
||||
mark_inode_dirty(inode);
|
||||
|
@ -174,7 +176,7 @@ void udf_discard_prealloc(struct inode *inode)
|
|||
}
|
||||
/* This inode entry is in-memory only and thus we don't have to mark
|
||||
* the inode dirty */
|
||||
UDF_I(inode)->i_lenExtents = lbcount;
|
||||
iinfo->i_lenExtents = lbcount;
|
||||
brelse(epos.bh);
|
||||
}
|
||||
|
||||
|
@ -189,10 +191,11 @@ void udf_truncate_extents(struct inode *inode)
|
|||
sector_t first_block = inode->i_size >> sb->s_blocksize_bits, offset;
|
||||
loff_t byte_offset;
|
||||
int adsize;
|
||||
struct udf_inode_info *iinfo = UDF_I(inode);
|
||||
|
||||
if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
|
||||
adsize = sizeof(short_ad);
|
||||
else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
else if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
|
||||
adsize = sizeof(long_ad);
|
||||
else
|
||||
BUG();
|
||||
|
@ -227,7 +230,7 @@ void udf_truncate_extents(struct inode *inode)
|
|||
0, indirect_ext_len);
|
||||
} else {
|
||||
if (!epos.bh) {
|
||||
UDF_I(inode)->i_lenAlloc =
|
||||
iinfo->i_lenAlloc =
|
||||
lenalloc;
|
||||
mark_inode_dirty(inode);
|
||||
} else {
|
||||
|
@ -275,7 +278,7 @@ void udf_truncate_extents(struct inode *inode)
|
|||
indirect_ext_len);
|
||||
} else {
|
||||
if (!epos.bh) {
|
||||
UDF_I(inode)->i_lenAlloc = lenalloc;
|
||||
iinfo->i_lenAlloc = lenalloc;
|
||||
mark_inode_dirty(inode);
|
||||
} else {
|
||||
struct allocExtDesc *aed =
|
||||
|
@ -325,7 +328,7 @@ void udf_truncate_extents(struct inode *inode)
|
|||
(sb->s_blocksize - 1)) != 0));
|
||||
}
|
||||
}
|
||||
UDF_I(inode)->i_lenExtents = inode->i_size;
|
||||
iinfo->i_lenExtents = inode->i_size;
|
||||
|
||||
brelse(epos.bh);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue