aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/summary.c
diff options
context:
space:
mode:
authorKaiGai Kohei <kaigai@ak.jp.nec.com>2006-05-13 02:21:38 -0400
committerKaiGai Kohei <kaigai@ak.jp.nec.com>2006-05-13 02:21:38 -0400
commitc8708a9275928cc8e77bd443cd12565dda0a3ded (patch)
tree8a3eb502f0f0474eff19ec6a083cffea240ec9e3 /fs/jffs2/summary.c
parentdea80134dc4d54df52c0c59b0ba2bb5aa999bf30 (diff)
[JFFS2][XATTR] Handling the duplicate JFFS2_NODETYPE_XATTR node cases.
When jffs2_sum_process_sum_data() found a JFFS2_NODETYPE_XATTR which has duplicate xid and older version, an error was returned without appropriate process. In the result, mounting filesystem is failed. This patch fix this problem. If jffs2_setup_xattr_datum() returned -EEXIST, the caller marks this node as DIRTY_SPACE(). [1/2] jffs2-xattr-v5.2-01-fix-duplicate-xdatum.patch Signed-off-by: KaiGai Kohei <kaigai@ak.jp.nec.com>
Diffstat (limited to 'fs/jffs2/summary.c')
-rw-r--r--fs/jffs2/summary.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c
index 831a42c13059..9763d73c0da1 100644
--- a/fs/jffs2/summary.c
+++ b/fs/jffs2/summary.c
@@ -508,8 +508,14 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
508 xd = jffs2_setup_xattr_datum(c, je32_to_cpu(spx->xid), 508 xd = jffs2_setup_xattr_datum(c, je32_to_cpu(spx->xid),
509 je32_to_cpu(spx->version)); 509 je32_to_cpu(spx->version));
510 if (IS_ERR(xd)) { 510 if (IS_ERR(xd)) {
511 JFFS2_NOTICE("allocation of xattr_datum failed\n");
512 jffs2_free_raw_node_ref(raw); 511 jffs2_free_raw_node_ref(raw);
512 if (PTR_ERR(xd) == -EEXIST) {
513 /* a newer version of xd exists */
514 DIRTY_SPACE(je32_to_cpu(spx->totlen));
515 sp += JFFS2_SUMMARY_XATTR_SIZE;
516 break;
517 }
518 JFFS2_NOTICE("allocation of xattr_datum failed\n");
513 kfree(summary); 519 kfree(summary);
514 return PTR_ERR(xd); 520 return PTR_ERR(xd);
515 } 521 }