From: He Zhe <zhe...@windriver.com>

Signed-off-by: He Zhe <zhe...@windriver.com>
---
 .../yaffs2-fix-missing-checkpoint-on-yaffs.patch   | 85 ++++++++++++++++++++++
 features/yaffs2/yaffs2.scc                         |  1 +
 2 files changed, 86 insertions(+)
 create mode 100644 features/yaffs2/yaffs2-fix-missing-checkpoint-on-yaffs.patch

diff --git a/features/yaffs2/yaffs2-fix-missing-checkpoint-on-yaffs.patch 
b/features/yaffs2/yaffs2-fix-missing-checkpoint-on-yaffs.patch
new file mode 100644
index 0000000..cd7cc58
--- /dev/null
+++ b/features/yaffs2/yaffs2-fix-missing-checkpoint-on-yaffs.patch
@@ -0,0 +1,85 @@
+From fcdadf7cdb9659c76808ff5fc2f105c56436e6a8 Mon Sep 17 00:00:00 2001
+From: He Zhe <zhe...@windriver.com>
+Date: Wed, 2 Dec 2015 01:31:31 -0500
+Subject: [PATCH] fs/yaffs2: fix missing checkpoint on yaffs
+
+For yaffs file system, the mode of reading or writing is restricted at
+four pointer where are mnt->mnt_flags,mnt->mnt_sb->s_flags,mtd->flags
+and dev->read_only,the first three is used handle file and file
+system(eg,remount) operation, and last one(dev->read_only) almost is used
+handle checkpoint of yaffs2. However, in current code, the dev->read_only
+only can be changed at first time when the yaffs2 file system is mounted,
+later it can't be changed again(eg,mount -o remount), the result is that
+the checkpoint's saving operation always can't succeed if you set readonly
+mode for yaffs2 file system when it is mounted at the first time.
+
+To fix this issue, we implement yaffs_remount_fs() which allows the
+rootfs to be remounted as r/w.
+
+Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
+Signed-off-by: He Zhe <zhe...@windriver.com>
+---
+ fs/yaffs2/yaffs_vfs.c | 39 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
+
+diff --git a/fs/yaffs2/yaffs_vfs.c b/fs/yaffs2/yaffs_vfs.c
+index 52177c1..16251d5 100644
+--- a/fs/yaffs2/yaffs_vfs.c
++++ b/fs/yaffs2/yaffs_vfs.c
+@@ -2614,7 +2614,45 @@ static int yaffs_sync_fs(struct super_block *sb)
+       return 0;
+ }
+ 
++/* the function only is used to change dev->read_only when this file system
++ * is remounted.
++ */
++static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data)
++{
++      int read_only = 0;
++      struct mtd_info *mtd;
++      struct yaffs_dev *dev = 0;
++
++      /* Get the device */
++      mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
++      if (!mtd) {
++              yaffs_trace(YAFFS_TRACE_ALWAYS,
++                      "MTD device #%u doesn't appear to exist",
++                      MINOR(sb->s_dev));
++              return 1;
++      }
+ 
++      /* Check it's NAND */
++      if (mtd->type != MTD_NANDFLASH) {
++              yaffs_trace(YAFFS_TRACE_ALWAYS,
++                      "MTD device is not NAND it's type %d",
++                      mtd->type);
++              return 1;
++      }
++
++      read_only = ((*flags & MS_RDONLY) != 0);
++      if (!read_only && !(mtd->flags & MTD_WRITEABLE)) {
++              read_only = 1;
++              printk(KERN_INFO
++                     "yaffs: mtd is read only, setting superblock read only");
++              *flags |= MS_RDONLY;
++      }
++
++      dev = sb->s_fs_info;
++      dev->read_only = read_only;
++
++      return 0;
++}
+ 
+ static const struct super_operations yaffs_super_ops = {
+       .statfs = yaffs_statfs,
+@@ -2636,6 +2674,7 @@ static const struct super_operations yaffs_super_ops = {
+ #ifdef YAFFS_HAS_WRITE_SUPER
+       .write_super = yaffs_write_super,
+ #endif
++      .remount_fs = yaffs_remount_fs,
+ };
+ 
+ struct yaffs_options {
+-- 
+1.9.1
+
diff --git a/features/yaffs2/yaffs2.scc b/features/yaffs2/yaffs2.scc
index 2026f71..07e2653 100644
--- a/features/yaffs2/yaffs2.scc
+++ b/features/yaffs2/yaffs2.scc
@@ -13,3 +13,4 @@ patch 
yaffs2-switch-simple-generic_file_aio_read-users-to-.patch
 patch yaffs2-use-write_iter-variants-of-__-generic_file_ai.patch
 patch yaffs2-implement-splice_write-via-write_iter.patch
 patch yaffs2-fix-memory-leak-in-mount-umount.patch
+patch yaffs2-fix-missing-checkpoint-on-yaffs.patch
-- 
2.3.5

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to