FAILED: patch "[PATCH] ext4: sysfs: print ext4_super_block fields as little-endian" failed to apply to 3.18-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 3.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
a4d2aadca184ece182418950d45ba4ffc7b652d2Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Sun, 29 Jul 2018 15:48:00 -0400
Subject: [PATCH] ext4: sysfs: print ext4_super_block fields as little-endian
While working on extended rand for last_error/first_error timestamps, I noticed that the endianess is wrong; we access the little-endian fields in struct ext4_super_block as native-endian when we print them.
This adds a special case in ext4_attr_show() and ext4_attr_store() to byteswap the superblock fields if needed.
In older kernels, this code was part of super.c, it got moved to sysfs.c in linux-4.4.
fs/ext4/sysfs.c +10 -3
@@ -274,8 +274,12 @@ static ssize_t ext4_attr_show(struct kobject *kobj,case attr_pointer_ui:if (!ptr)return 0 ; -return snprintf (buf,PAGE_SIZE ,"%u\n" , - *((unsigned int *) ptr)); +if (a->attr_ptr == ptr_ext4_super_block_offset) +return snprintf (buf,PAGE_SIZE ,"%u\n" , +le32_to_cpup (ptr)); +else +return snprintf (buf,PAGE_SIZE ,"%u\n" , + *((unsigned int *) ptr));case attr_pointer_atomic:if (!ptr)return 0 ;
@@ -308,7 +312,10 @@ static ssize_t ext4_attr_store(struct kobject *kobj, ret =kstrtoul (skip_spaces (buf),0 , &t);if (ret)return ret; - *((unsigned int *) ptr) = t; +if (a->attr_ptr == ptr_ext4_super_block_offset) + *((__le32 *) ptr) =cpu_to_le32 (t); +else + *((unsigned int *) ptr) = t;return len;case attr_inode_readahead:return inode_readahead_blks_store (sbi, buf, len);