summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/fix-icache.patch69
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb1
2 files changed, 70 insertions, 0 deletions
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/fix-icache.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/fix-icache.patch
new file mode 100644
index 0000000000..ad4e3439f4
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/fix-icache.patch
@@ -0,0 +1,69 @@
+inode.c: only update the icache for ext2_inode
+
+We only read the cache when:
+
+bufsize == sizeof(struct ext2_inode)
+
+then we should only update the cache in the same condition, otherwise
+there would be errors, for example:
+
+cache[0]: cached ino 14 when bufsize = 128 by ext2fs_write_inode_full()
+cache[1]: cached ino 14 when bufsize = 156 by ext2fs_read_inode_full()
+
+Then update the cache:
+cache[0]: cached ino 15 when bufsize = 156 by ext2fs_read_inode_full()
+
+Then the ino 14 would hit the cache[1] when bufsize = 128 (but it was
+cached by bufsize = 156), so there would be errors.
+
+Note: the upstream has changed the icache lot, so this patch is
+inappropriate for the upstream, we can drop this patch when we update
+the package.
+
+Upstream-Status: [Inappropriate]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ lib/ext2fs/inode.c | 20 ++++++++++++--------
+ 1 file changed, 12 insertions(+), 8 deletions(-)
+
+diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
+--- a/lib/ext2fs/inode.c
++++ b/lib/ext2fs/inode.c
+@@ -612,10 +612,12 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
+ #endif
+
+ /* Update the inode cache */
+- fs->icache->cache_last = (fs->icache->cache_last + 1) %
+- fs->icache->cache_size;
+- fs->icache->cache[fs->icache->cache_last].ino = ino;
+- fs->icache->cache[fs->icache->cache_last].inode = *inode;
++ if (bufsize == sizeof(struct ext2_inode)) {
++ fs->icache->cache_last = (fs->icache->cache_last + 1) %
++ fs->icache->cache_size;
++ fs->icache->cache[fs->icache->cache_last].ino = ino;
++ fs->icache->cache[fs->icache->cache_last].inode = *inode;
++ }
+
+ return 0;
+ }
+@@ -648,10 +650,12 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
+
+ /* Check to see if the inode cache needs to be updated */
+ if (fs->icache) {
+- for (i=0; i < fs->icache->cache_size; i++) {
+- if (fs->icache->cache[i].ino == ino) {
+- fs->icache->cache[i].inode = *inode;
+- break;
++ if (bufsize == sizeof(struct ext2_inode)) {
++ for (i=0; i < fs->icache->cache_size; i++) {
++ if (fs->icache->cache[i].ino == ino) {
++ fs->icache->cache[i].inode = *inode;
++ break;
++ }
+ }
+ }
+ } else {
+--
+1.8.1.2
+
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb
index 22618e63fb..2681f98f00 100644
--- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb
@@ -5,6 +5,7 @@ SRC_URI += "file://acinclude.m4 \
file://remove.ldconfig.call.patch \
file://debugfs-too-short.patch \
file://debugfs-sparse-copy.patch \
+ file://fix-icache.patch \
"
SRC_URI[md5sum] = "8ef664b6eb698aa6b733df59b17b9ed4"