diff options
author | KaiGai Kohei <kaigai@ak.jp.nec.com> | 2006-05-13 02:21:38 -0400 |
---|---|---|
committer | KaiGai Kohei <kaigai@ak.jp.nec.com> | 2006-05-13 02:21:38 -0400 |
commit | c8708a9275928cc8e77bd443cd12565dda0a3ded (patch) | |
tree | 8a3eb502f0f0474eff19ec6a083cffea240ec9e3 /fs/jffs2 | |
parent | dea80134dc4d54df52c0c59b0ba2bb5aa999bf30 (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')
-rw-r--r-- | fs/jffs2/summary.c | 8 |
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 | } |