Update SLES12 SP3 kernel to 4.4.162-94.69.
Test-Parameters: clientdistro=sles12sp3 ossdistro=sles12sp3 mdsdistro=sles12sp3
Change-Id: Iea1ec6def609059d67053d25360e8e986f2adbd9
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/33637
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
size_t offs = le16_to_cpu(last->e_value_offs);
if (offs < *min_offs)
*min_offs = offs;
size_t offs = le16_to_cpu(last->e_value_offs);
if (offs < *min_offs)
*min_offs = offs;
-@@ -651,11 +769,195 @@ static size_t ext4_xattr_free_space(stru
+@@ -651,12 +769,195 @@ static size_t ext4_xattr_free_space(stru
return (*min_offs - ((void *)last - base) - sizeof(__u32));
}
return (*min_offs - ((void *)last - base) - sizeof(__u32));
}
+ EXT4_XATTR_INODE_SET_PARENT(ea_inode, inode->i_ino);
+ unlock_new_inode(ea_inode);
+
+ EXT4_XATTR_INODE_SET_PARENT(ea_inode, inode->i_ino);
+ unlock_new_inode(ea_inode);
+
-+ ext4_xattr_inode_set_ref(ea_inode, 1);
-+ ext4_xattr_inode_set_hash(ea_inode, hash);
++ ext4_xattr_inode_set_ref(ea_inode, 1);
++ ext4_xattr_inode_set_hash(ea_inode, hash);
--ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
-+ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s,
+ ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s,
+- struct inode *inode)
+ handle_t *handle, struct inode *inode)
{
struct ext4_xattr_entry *last, *next;
+ handle_t *handle, struct inode *inode)
{
struct ext4_xattr_entry *last, *next;
/* Compute min_offs and last. */
last = s->first;
/* Compute min_offs and last. */
last = s->first;
-@@ -663,7 +965,7 @@ ext4_xattr_set_entry(struct ext4_xattr_i
- next = EXT4_XATTR_NEXT(last);
- if ((void *)next >= s->end)
+@@ -666,7 +967,7 @@ ext4_xattr_set_entry(struct ext4_xattr_i
+ EXT4_ERROR_INODE(inode, "corrupted xattr entries");
- if (!last->e_value_block && last->e_value_size) {
+ 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;
- if (!last->e_value_block && last->e_value_size) {
+ 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;
-@@ -671,15 +973,20 @@ ext4_xattr_set_entry(struct ext4_xattr_i
+@@ -674,15 +975,20 @@ ext4_xattr_set_entry(struct ext4_xattr_i
}
free = min_offs - ((void *)last - s->base) - sizeof(__u32);
if (!s->not_found) {
}
free = min_offs - ((void *)last - s->base) - sizeof(__u32);
if (!s->not_found) {
-@@ -693,7 +1000,8 @@ ext4_xattr_set_entry(struct ext4_xattr_i
+@@ -696,7 +1002,8 @@ ext4_xattr_set_entry(struct ext4_xattr_i
s->here->e_name_len = name_len;
memcpy(s->here->e_name, i->name, name_len);
} else {
s->here->e_name_len = name_len;
memcpy(s->here->e_name, i->name, name_len);
} else {
void *first_val = s->base + min_offs;
size_t offs = le16_to_cpu(s->here->e_value_offs);
void *val = s->base + offs;
void *first_val = s->base + min_offs;
size_t offs = le16_to_cpu(s->here->e_value_offs);
void *val = s->base + offs;
-@@ -727,13 +1035,18 @@ ext4_xattr_set_entry(struct ext4_xattr_i
+@@ -730,13 +1037,18 @@ ext4_xattr_set_entry(struct ext4_xattr_i
last = s->first;
while (!IS_LAST_ENTRY(last)) {
size_t o = le16_to_cpu(last->e_value_offs);
last = s->first;
while (!IS_LAST_ENTRY(last)) {
size_t o = le16_to_cpu(last->e_value_offs);
if (!i->value) {
/* Remove the old name. */
size_t size = EXT4_XATTR_LEN(name_len);
if (!i->value) {
/* Remove the old name. */
size_t size = EXT4_XATTR_LEN(name_len);
-@@ -747,10 +1060,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
+@@ -750,10 +1062,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
if (i->value) {
/* Insert the new value. */
s->here->e_value_size = cpu_to_le32(i->value_len);
if (i->value) {
/* Insert the new value. */
s->here->e_value_size = cpu_to_le32(i->value_len);
if (i->value == EXT4_ZERO_XATTR_VALUE) {
memset(val, 0, size);
} else {
if (i->value == EXT4_ZERO_XATTR_VALUE) {
memset(val, 0, size);
} else {
-@@ -800,7 +1120,7 @@ ext4_xattr_block_find(struct inode *inod
+@@ -803,7 +1122,7 @@ ext4_xattr_block_find(struct inode *inod
bs->s.end = bs->bh->b_data + bs->bh->b_size;
bs->s.here = bs->s.first;
error = ext4_xattr_find_entry(&bs->s.here, i->name_index,
bs->s.end = bs->bh->b_data + bs->bh->b_size;
bs->s.here = bs->s.first;
error = ext4_xattr_find_entry(&bs->s.here, i->name_index,
if (error && error != -ENODATA)
goto cleanup;
bs->s.not_found = error;
if (error && error != -ENODATA)
goto cleanup;
bs->s.not_found = error;
-@@ -825,8 +1145,6 @@ ext4_xattr_block_set(handle_t *handle, s
+@@ -828,8 +1147,6 @@ ext4_xattr_block_set(handle_t *handle, s
#define header(x) ((struct ext4_xattr_header *)(x))
#define header(x) ((struct ext4_xattr_header *)(x))
if (s->base) {
BUFFER_TRACE(bs->bh, "get_write_access");
error = ext4_journal_get_write_access(handle, bs->bh);
if (s->base) {
BUFFER_TRACE(bs->bh, "get_write_access");
error = ext4_journal_get_write_access(handle, bs->bh);
-@@ -845,7 +1163,7 @@ ext4_xattr_block_set(handle_t *handle, s
+@@ -848,7 +1165,7 @@ ext4_xattr_block_set(handle_t *handle, s
mb_cache_entry_delete_block(ext4_mb_cache, hash,
bs->bh->b_blocknr);
ea_bdebug(bs->bh, "modifying in-place");
mb_cache_entry_delete_block(ext4_mb_cache, hash,
bs->bh->b_blocknr);
ea_bdebug(bs->bh, "modifying in-place");
-- error = ext4_xattr_set_entry(i, s);
+- error = ext4_xattr_set_entry(i, s, inode);
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (!error) {
if (!IS_LAST_ENTRY(s->first))
ext4_xattr_rehash(header(s->base),
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (!error) {
if (!IS_LAST_ENTRY(s->first))
ext4_xattr_rehash(header(s->base),
-@@ -891,7 +1209,7 @@ ext4_xattr_block_set(handle_t *handle, s
+@@ -894,7 +1211,7 @@ ext4_xattr_block_set(handle_t *handle, s
s->end = s->base + sb->s_blocksize;
}
s->end = s->base + sb->s_blocksize;
}
-- error = ext4_xattr_set_entry(i, s);
+- error = ext4_xattr_set_entry(i, s, inode);
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error == -EFSCORRUPTED)
goto bad_block;
if (error)
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error == -EFSCORRUPTED)
goto bad_block;
if (error)
-@@ -1069,7 +1387,7 @@ int ext4_xattr_ibody_find(struct inode *
+@@ -1072,7 +1389,7 @@ int ext4_xattr_ibody_find(struct inode *
/* Find the named attribute. */
error = ext4_xattr_find_entry(&is->s.here, i->name_index,
i->name, is->s.end -
/* Find the named attribute. */
error = ext4_xattr_find_entry(&is->s.here, i->name_index,
i->name, is->s.end -
if (error && error != -ENODATA)
return error;
is->s.not_found = error;
if (error && error != -ENODATA)
return error;
is->s.not_found = error;
-@@ -1087,7 +1405,7 @@ int ext4_xattr_ibody_inline_set(handle_t
+@@ -1090,7 +1407,7 @@ int ext4_xattr_ibody_inline_set(handle_t
if (EXT4_I(inode)->i_extra_isize == 0)
return -ENOSPC;
if (EXT4_I(inode)->i_extra_isize == 0)
return -ENOSPC;
-- error = ext4_xattr_set_entry(i, s);
+- error = ext4_xattr_set_entry(i, s, inode);
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error)
return error;
header = IHDR(inode, ext4_raw_inode(&is->iloc));
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error)
return error;
header = IHDR(inode, ext4_raw_inode(&is->iloc));
-@@ -1111,7 +1429,7 @@ static int ext4_xattr_ibody_set(handle_t
+@@ -1114,7 +1431,7 @@ static int ext4_xattr_ibody_set(handle_t
if (EXT4_I(inode)->i_extra_isize == 0)
return -ENOSPC;
if (EXT4_I(inode)->i_extra_isize == 0)
return -ENOSPC;
-- error = ext4_xattr_set_entry(i, s);
+- error = ext4_xattr_set_entry(i, s, inode);
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error)
return error;
header = IHDR(inode, ext4_raw_inode(&is->iloc));
+ error = ext4_xattr_set_entry(i, s, handle, inode);
if (error)
return error;
header = IHDR(inode, ext4_raw_inode(&is->iloc));
-@@ -1158,7 +1476,7 @@ ext4_xattr_set_handle(handle_t *handle,
+@@ -1161,7 +1478,7 @@ ext4_xattr_set_handle(handle_t *handle,
.name = name,
.value = value,
.value_len = value_len,
.name = name,
.value = value,
.value_len = value_len,
};
struct ext4_xattr_ibody_find is = {
.s = { .not_found = -ENODATA, },
};
struct ext4_xattr_ibody_find is = {
.s = { .not_found = -ENODATA, },
-@@ -1228,6 +1546,15 @@ ext4_xattr_set_handle(handle_t *handle,
+@@ -1231,6 +1548,15 @@ ext4_xattr_set_handle(handle_t *handle,
goto cleanup;
}
error = ext4_xattr_block_set(handle, inode, &i, &bs);
goto cleanup;
}
error = ext4_xattr_block_set(handle, inode, &i, &bs);
if (error)
goto cleanup;
if (!is.s.not_found) {
if (error)
goto cleanup;
if (!is.s.not_found) {
-@@ -1272,9 +1599,22 @@ ext4_xattr_set(struct inode *inode, int
+@@ -1275,9 +1601,22 @@ ext4_xattr_set(struct inode *inode, int
const void *value, size_t value_len, int flags)
{
handle_t *handle;
const void *value, size_t value_len, int flags)
{
handle_t *handle;
retry:
handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
if (IS_ERR(handle)) {
retry:
handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
if (IS_ERR(handle)) {
-@@ -1286,7 +1626,7 @@ retry:
+@@ -1289,7 +1628,7 @@ retry:
value, value_len, flags);
error2 = ext4_journal_stop(handle);
if (error == -ENOSPC &&
value, value_len, flags);
error2 = ext4_journal_stop(handle);
if (error == -ENOSPC &&
goto retry;
if (error == 0)
error = error2;
goto retry;
if (error == 0)
error = error2;
-@@ -1308,7 +1648,7 @@ static void ext4_xattr_shift_entries(str
+@@ -1311,7 +1650,7 @@ static void ext4_xattr_shift_entries(str
/* Adjust the value offsets of the entries */
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
/* Adjust the value offsets of the entries */
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
new_offs = le16_to_cpu(last->e_value_offs) +
value_offs_shift;
BUG_ON(new_offs + le32_to_cpu(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)
-@@ -1562,21 +1902,135 @@ cleanup:
+@@ -1565,21 +1904,135 @@ cleanup:
bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
if (!bh) {
EXT4_ERROR_INODE(inode, "block %llu read error",
bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
if (!bh) {
EXT4_ERROR_INODE(inode, "block %llu read error",
-@@ -1589,11 +2043,69 @@ ext4_xattr_delete_inode(handle_t *handle
+@@ -1592,11 +2045,69 @@ ext4_xattr_delete_inode(handle_t *handle
EXT4_I(inode)->i_file_acl);
goto cleanup;
}
EXT4_I(inode)->i_file_acl);
goto cleanup;
}
-@@ -1645,10 +2157,9 @@ ext4_xattr_cmp(struct ext4_xattr_header
+@@ -1648,10 +2159,9 @@ ext4_xattr_cmp(struct ext4_xattr_header
entry1->e_name_index != entry2->e_name_index ||
entry1->e_name_len != entry2->e_name_len ||
entry1->e_value_size != entry2->e_value_size ||
entry1->e_name_index != entry2->e_name_index ||
entry1->e_name_len != entry2->e_name_len ||
entry1->e_value_size != entry2->e_value_size ||
if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
(char *)header2 + le16_to_cpu(entry2->e_value_offs),
le32_to_cpu(entry1->e_value_size)))
if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
(char *)header2 + le16_to_cpu(entry2->e_value_offs),
le32_to_cpu(entry1->e_value_size)))
-@@ -1720,7 +2231,7 @@ static inline void ext4_xattr_hash_entry
+@@ -1723,7 +2233,7 @@ static inline void ext4_xattr_hash_entry
sles12sp2/ext4-fix-xattr-shifting-when-expanding-inodes.patch
rhel7/ext4-use-GFP_NOFS-in-ext4_inode_attach_jinode.patch
rhel7/ext4-export-orphan-add.patch
sles12sp2/ext4-fix-xattr-shifting-when-expanding-inodes.patch
rhel7/ext4-use-GFP_NOFS-in-ext4_inode_attach_jinode.patch
rhel7/ext4-export-orphan-add.patch
-rhel7/ext4-mmp-dont-mark-bh-dirty.patch
3.10.0-862.14.4.el7 (RHEL7.5)
3.10.0-957.el7 (RHEL7.6)
4.4.120-92.70 (SLES12 SP2)
3.10.0-862.14.4.el7 (RHEL7.5)
3.10.0-957.el7 (RHEL7.6)
4.4.120-92.70 (SLES12 SP2)
- 4.4.155-94.50 (SLES12 SP3)
+ 4.4.162-94.69 (SLES12 SP3)
4.4.0-131 (Ubuntu 16.04)
4.15.0-32 (Ubuntu 18.04)
vanilla linux 4.6.7 (ZFS only)
4.4.0-131 (Ubuntu 16.04)
4.15.0-32 (Ubuntu 18.04)
vanilla linux 4.6.7 (ZFS only)
3.10.0-957.el7 (RHEL7.6)
4.14.0-49.13.1.el7a (RHEL7.5)
4.4.120-92.70 (SLES12 SP2)
3.10.0-957.el7 (RHEL7.6)
4.14.0-49.13.1.el7a (RHEL7.5)
4.4.120-92.70 (SLES12 SP2)
- 4.4.155-94.50 (SLES12 SP3)
+ 4.4.162-94.69 (SLES12 SP3)
4.4.0-131 (Ubuntu 16.04)
4.15.0-32 (Ubuntu 18.04)
vanilla linux 4.15.0 (ZFS only)
4.4.0-131 (Ubuntu 16.04)
4.15.0-32 (Ubuntu 18.04)
vanilla linux 4.15.0 (ZFS only)
#
# Automatically generated file; DO NOT EDIT.
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.4.155 Kernel Configuration
+# Linux/x86 4.4.162 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
# CONFIG_COMPILE_TEST is not set
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
# CONFIG_COMPILE_TEST is not set
-CONFIG_LOCALVERSION="-94.50-default"
+CONFIG_LOCALVERSION="-94.69-default"
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIUART_LL=y
-CONFIG_BT_HCIUART_3WIRE=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_BT_HCIUART_INTEL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_QCA=y
#
# Frame buffer Devices
#
#
# Frame buffer Devices
#
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
# CONFIG_FB_DDC is not set
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
# CONFIG_FB_DDC is not set
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
-lnxmin=".155"
-lnxrel="94.50"
+lnxmin=".162"
+lnxrel="94.69"
# use this when there is an "RPM fix" which means that the name of the
# (source) RPM has been updated but the version of the kernel inside the
# RPM is not also updated
# use this when there is an "RPM fix" which means that the name of the
# (source) RPM has been updated but the version of the kernel inside the
# RPM is not also updated
# this is the delimeter that goes before the "smp" at the end of the version
# defaults to empty
# this is the delimeter that goes before the "smp" at the end of the version
# defaults to empty
3.0-sles11sp3.series 3.0.101-107 (SLES11 SP4)
3.12-sles12.series 3.12.74-60.64.40 (SLES12 SP1)
4.4-sles12.series 4.4.120-92.70 (SLES12 SP2)
3.0-sles11sp3.series 3.0.101-107 (SLES11 SP4)
3.12-sles12.series 3.12.74-60.64.40 (SLES12 SP1)
4.4-sles12.series 4.4.120-92.70 (SLES12 SP2)
-4.4-sles12sp3.series 4.4.155-94.50 (SLES12 SP3)
+4.4-sles12sp3.series 4.4.162-94.69 (SLES12 SP3)
4.4-ubuntu14+16.series 4.4.0-85.108 (Ubuntu 14.04.5 LTS)
4.4-ubuntu14+16.series 4.4.0-85.108 (Ubuntu 16.04)
4.4-ubuntu14+16.series 4.4.0-85.108 (Ubuntu 14.04.5 LTS)
4.4-ubuntu14+16.series 4.4.0-85.108 (Ubuntu 16.04)