tree b36dbc4306c6b8223f0fd9755ea0d8a04a15bcb6
parent ed3786a599f5639c99dfcceaef1b064ab5e2e9f9
author Estelle Hammache <[EMAIL PROTECTED]> Mon, 24 Jan 2005 21:13:42 +0000
committer Thomas Gleixner <[EMAIL PROTECTED]> Mon, 23 May 2005 12:11:28 +0200
[JFFS2] Fix write buffer retry case
Correction of retry case to avoid silent failure of rmdir
when jffs2_wbuf_recover GCs the previous entry (+ corresponding
dnode case).
Signed-off-by: Estelle Hammache <[EMAIL PROTECTED]>
Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
fs/jffs2/write.c | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/fs/jffs2/write.c b/fs/jffs2/write.c
--- a/fs/jffs2/write.c
+++ b/fs/jffs2/write.c
@@ -7,7 +7,7 @@
*
* For licensing information, see the file 'LICENCE' in this directory.
*
- * $Id: write.c,v 1.87 2004/11/16 20:36:12 dwmw2 Exp $
+ * $Id: write.c,v 1.88 2005/01/24 21:13:39 hammache Exp $
*
*/
@@ -136,6 +136,21 @@ struct jffs2_full_dnode *jffs2_write_dno
raw->__totlen = PAD(sizeof(*ri)+datalen);
raw->next_phys = NULL;
+ if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(ri->version) <
f->highest_version))
+ {
+ if (! retried)
+ {
+ BUG();
+ }
+ else
+ {
+ D1(printk(KERN_DEBUG "jffs2_write_dnode : dnode_version
%d, highest version %d -> updating dnode\n",
+ je32_to_cpu(ri->version),
f->highest_version));
+ ri->version = cpu_to_je32(++f->highest_version);
+ ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
+ }
+ }
+
ret = jffs2_flash_writev(c, vecs, cnt, flash_ofs, &retlen,
(alloc_mode==ALLOC_GC)?0:f->inocache->ino);
@@ -280,6 +295,22 @@ struct jffs2_full_dirent *jffs2_write_di
raw->__totlen = PAD(sizeof(*rd)+namelen);
raw->next_phys = NULL;
+ if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(rd->version) <
f->highest_version))
+ {
+ if (! retried)
+ {
+ BUG();
+ }
+ else
+ {
+ D1(printk(KERN_DEBUG "jffs2_write_dirent :
dirent_version %d, highest version %d -> updating dirent\n",
+ je32_to_cpu(rd->version),
f->highest_version));
+ rd->version = cpu_to_je32(++f->highest_version);
+ fd->version = je32_to_cpu(rd->version);
+ rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+ }
+ }
+
ret = jffs2_flash_writev(c, vecs, 2, flash_ofs, &retlen,
(alloc_mode==ALLOC_GC)?0:je32_to_cpu(rd->pino));
if (ret || (retlen != sizeof(*rd) + namelen)) {
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html