aboutsummaryrefslogtreecommitdiffstats
path: root/package/mtd/src/trx.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-07-25 17:28:32 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-07-25 17:28:32 +0000
commit6136a078e94a7a2f3d64960cb0720bf4aa358c0a (patch)
treecfd322af9842ff436e0e083ba050881b7854ce64 /package/mtd/src/trx.c
parent61d613b7f4beb979e812534b3b473966ad465d9b (diff)
downloadupstream-6136a078e94a7a2f3d64960cb0720bf4aa358c0a.tar.gz
upstream-6136a078e94a7a2f3d64960cb0720bf4aa358c0a.tar.bz2
upstream-6136a078e94a7a2f3d64960cb0720bf4aa358c0a.zip
mtd: fix trx_fixup
With the BRCM47xx image I have built (Linksys E3000), there are additional writes following the completion of "mtd_replace_jffs2" which invalidate the 'trx_fixup' performed by 'mtd_replace_jffs2'. Moving the 'trx_fixup' to somewhere after all writes have completed fixes the problem. I also noticed that 'erasesize' used to compute 'block_offset' in 'mtd_fixtrx' is used before it is computed by 'mtd_check_open'; moving the call to 'mtd_check_open' up a few lines fixes this. Unlike 'mtd_fixtrx', 'trx_fixup' appears to assume that the TRX header is always at offset 0; which may be the cause of the problem described in Ticket #8960. Signed-off-by: Nathan Hintz <nlhintz@hotmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32866 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mtd/src/trx.c')
-rw-r--r--package/mtd/src/trx.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/package/mtd/src/trx.c b/package/mtd/src/trx.c
index d1aab36923..65c24404c2 100644
--- a/package/mtd/src/trx.c
+++ b/package/mtd/src/trx.c
@@ -154,15 +154,15 @@ mtd_fixtrx(const char *mtd, size_t offset)
if (quiet < 2)
fprintf(stderr, "Trying to fix trx header in %s at 0x%x...\n", mtd, offset);
- block_offset = offset & ~(erasesize - 1);
- offset -= block_offset;
-
fd = mtd_check_open(mtd);
if(fd < 0) {
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
}
+ block_offset = offset & ~(erasesize - 1);
+ offset -= block_offset;
+
if (block_offset + erasesize > mtdsize) {
fprintf(stderr, "Offset too large, device size 0x%x\n", mtdsize);
exit(1);