ext4: don't calculate total xattr header size unless needed
The function ext4_expand_extra_isize_ea() doesn't need the size of all of the extended attribute headers. So if we don't calculate it when it is unneeded, it we can skip some undeeded memory references, and as a bonus, we eliminate some kvetching by static code analysis tools. Addresses-Coverity-Id: #741291 Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
9a6633b1a3
commit
7b1b2c1b9c
1 changed files with 4 additions and 4 deletions
|
@ -567,12 +567,13 @@ static size_t ext4_xattr_free_space(struct ext4_xattr_entry *last,
|
||||||
size_t *min_offs, void *base, int *total)
|
size_t *min_offs, void *base, int *total)
|
||||||
{
|
{
|
||||||
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
||||||
*total += EXT4_XATTR_LEN(last->e_name_len);
|
|
||||||
if (!last->e_value_block && last->e_value_size) {
|
if (!last->e_value_block && last->e_value_size) {
|
||||||
size_t offs = le16_to_cpu(last->e_value_offs);
|
size_t offs = le16_to_cpu(last->e_value_offs);
|
||||||
if (offs < *min_offs)
|
if (offs < *min_offs)
|
||||||
*min_offs = offs;
|
*min_offs = offs;
|
||||||
}
|
}
|
||||||
|
if (total)
|
||||||
|
*total += EXT4_XATTR_LEN(last->e_name_len);
|
||||||
}
|
}
|
||||||
return (*min_offs - ((void *)last - base) - sizeof(__u32));
|
return (*min_offs - ((void *)last - base) - sizeof(__u32));
|
||||||
}
|
}
|
||||||
|
@ -1228,7 +1229,7 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
|
||||||
struct ext4_xattr_block_find *bs = NULL;
|
struct ext4_xattr_block_find *bs = NULL;
|
||||||
char *buffer = NULL, *b_entry_name = NULL;
|
char *buffer = NULL, *b_entry_name = NULL;
|
||||||
size_t min_offs, free;
|
size_t min_offs, free;
|
||||||
int total_ino, total_blk;
|
int total_ino;
|
||||||
void *base, *start, *end;
|
void *base, *start, *end;
|
||||||
int extra_isize = 0, error = 0, tried_min_extra_isize = 0;
|
int extra_isize = 0, error = 0, tried_min_extra_isize = 0;
|
||||||
int s_min_extra_isize = le16_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_min_extra_isize);
|
int s_min_extra_isize = le16_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_min_extra_isize);
|
||||||
|
@ -1286,8 +1287,7 @@ retry:
|
||||||
first = BFIRST(bh);
|
first = BFIRST(bh);
|
||||||
end = bh->b_data + bh->b_size;
|
end = bh->b_data + bh->b_size;
|
||||||
min_offs = end - base;
|
min_offs = end - base;
|
||||||
free = ext4_xattr_free_space(first, &min_offs, base,
|
free = ext4_xattr_free_space(first, &min_offs, base, NULL);
|
||||||
&total_blk);
|
|
||||||
if (free < new_extra_isize) {
|
if (free < new_extra_isize) {
|
||||||
if (!tried_min_extra_isize && s_min_extra_isize) {
|
if (!tried_min_extra_isize && s_min_extra_isize) {
|
||||||
tried_min_extra_isize++;
|
tried_min_extra_isize++;
|
||||||
|
|
Loading…
Add table
Reference in a new issue