X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=ldiskfs%2Fkernel_patches%2Fpatches%2Frhel7%2Fext4-large-eas.patch;h=24976eeae70db8886a2a9d1a72073c724c9107dc;hp=94af1fe67480d4dbef7e881cdddd2eb8510f3531;hb=ab07d78bec9bc127d1a2240b7e8c16e52f117b41;hpb=ef4a8efe6a6b733422f52ddad34d98579552d621 diff --git a/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch index 94af1fe..24976ee 100644 --- a/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch +++ b/ldiskfs/kernel_patches/patches/rhel7/ext4-large-eas.patch @@ -164,11 +164,10 @@ Index: linux-stage/fs/ext4/xattr.c size_t value_size = le32_to_cpu(entry->e_value_size); - if (entry->e_value_block != 0 || value_size > size || -- le16_to_cpu(entry->e_value_offs) + value_size > size) -+ if ((entry->e_value_inum == 0) && -+ (le16_to_cpu(entry->e_value_offs) + value_size > size)) ++ if (!entry->e_value_inum && + le16_to_cpu(entry->e_value_offs) + value_size > size) + return -EIO; -+ if (entry->e_value_inum != 0 && ++ if (entry->e_value_inum && + (le32_to_cpu(entry->e_value_inum) < EXT4_FIRST_INO(inode->i_sb) || + le32_to_cpu(entry->e_value_inum) > + le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_inodes_count))) @@ -306,7 +305,7 @@ Index: linux-stage/fs/ext4/xattr.c goto cleanup; - memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs), - size); -+ if (entry->e_value_inum != 0) { ++ if (entry->e_value_inum) { + error = ext4_xattr_inode_get(inode, + le32_to_cpu(entry->e_value_inum), + buffer, &size); @@ -334,7 +333,7 @@ Index: linux-stage/fs/ext4/xattr.c goto cleanup; - memcpy(buffer, (void *)IFIRST(header) + - le16_to_cpu(entry->e_value_offs), size); -+ if (entry->e_value_inum != 0) { ++ if (entry->e_value_inum) { + error = ext4_xattr_inode_get(inode, + le32_to_cpu(entry->e_value_inum), + buffer, &size); @@ -352,7 +351,7 @@ Index: linux-stage/fs/ext4/xattr.c { for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) { - if (!last->e_value_block && last->e_value_size) { -+ if (last->e_value_inum == 0 && last->e_value_size > 0) { ++ if (!last->e_value_inum && last->e_value_size) { size_t offs = le16_to_cpu(last->e_value_offs); if (offs < *min_offs) *min_offs = offs; @@ -529,7 +528,7 @@ Index: linux-stage/fs/ext4/xattr.c last = s->first; for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) { - if (!last->e_value_block && last->e_value_size) { -+ if (last->e_value_inum == 0 && last->e_value_size > 0) { ++ if (!last->e_value_inum && last->e_value_size) { size_t offs = le16_to_cpu(last->e_value_offs); if (offs < min_offs) min_offs = offs; @@ -538,8 +537,8 @@ Index: linux-stage/fs/ext4/xattr.c free = min_offs - ((void *)last - s->base) - sizeof(__u32); if (!s->not_found) { - if (!s->here->e_value_block && s->here->e_value_size) { -+ if (!in_inode && s->here->e_value_inum == 0 && -+ s->here->e_value_size > 0) { ++ if (!in_inode && ++ !s->here->e_value_inum && s->here->e_value_size) { size_t size = le32_to_cpu(s->here->e_value_size); free += EXT4_XATTR_SIZE(size); } @@ -564,8 +563,8 @@ Index: linux-stage/fs/ext4/xattr.c memcpy(s->here->e_name, i->name, name_len); } else { - if (!s->here->e_value_block && s->here->e_value_size) { -+ if (s->here->e_value_offs > 0 && s->here->e_value_inum == 0 && -+ s->here->e_value_size > 0) { ++ if (!s->here->e_value_inum && s->here->e_value_size && ++ s->here->e_value_offs > 0) { void *first_val = s->base + min_offs; size_t offs = le16_to_cpu(s->here->e_value_offs); void *val = s->base + offs; @@ -581,7 +580,7 @@ Index: linux-stage/fs/ext4/xattr.c last = EXT4_XATTR_NEXT(last); } } -+ if (s->here->e_value_inum != 0) { ++ if (s->here->e_value_inum) { + ext4_xattr_inode_unlink(inode, + le32_to_cpu(s->here->e_value_inum)); + s->here->e_value_inum = 0; @@ -742,7 +741,7 @@ Index: linux-stage/fs/ext4/xattr.c /* Adjust the value offsets of the entries */ for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) { - if (!last->e_value_block && last->e_value_size) { -+ if (last->e_value_inum == 0 && last->e_value_size > 0) { ++ if (!last->e_value_inum && last->e_value_size) { new_offs = le16_to_cpu(last->e_value_offs) + value_offs_shift; BUG_ON(new_offs + le32_to_cpu(last->e_value_size) @@ -864,9 +863,9 @@ Index: linux-stage/fs/ext4/xattr.c goto cleanup; + raw_inode = ext4_raw_inode(&iloc); + header = IHDR(inode, raw_inode); -+ entry = IFIRST(header); -+ for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) { -+ if (entry->e_value_inum == 0) ++ for (entry = IFIRST(header); !IS_LAST_ENTRY(entry); ++ entry = EXT4_XATTR_NEXT(entry)) { ++ if (!entry->e_value_inum) + continue; + if (ext4_expand_ino_array(lea_ino_array, + entry->e_value_inum) != 0) { @@ -892,9 +891,9 @@ Index: linux-stage/fs/ext4/xattr.c goto cleanup; } + -+ entry = BFIRST(bh); -+ for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) { -+ if (entry->e_value_inum == 0) ++ for (entry = BFIRST(bh); !IS_LAST_ENTRY(entry); ++ entry = EXT4_XATTR_NEXT(entry)) { ++ if (!entry->e_value_inum) + continue; + if (ext4_expand_ino_array(lea_ino_array, + entry->e_value_inum) != 0) @@ -974,7 +973,7 @@ Index: linux-stage/fs/ext4/xattr.c } - if (entry->e_value_block == 0 && entry->e_value_size != 0) { -+ if (entry->e_value_inum == 0 && entry->e_value_size != 0) { ++ if (!entry->e_value_inum && entry->e_value_size) { __le32 *value = (__le32 *)((char *)header + le16_to_cpu(entry->e_value_offs)); for (n = (le32_to_cpu(entry->e_value_size) +