Christopher Collins created MYNEWT-160: ------------------------------------------
Summary: NFFS - Files with scattered data blocks can cause restore failures Key: MYNEWT-160 URL: https://issues.apache.org/jira/browse/MYNEWT-160 Project: Mynewt Issue Type: Bug Components: NFFS Reporter: Christopher Collins Assignee: Christopher Collins Fix For: v0_8_0_beta2 If a file's data blocks are written to disk in an "unexpected" order, the subsequent restore operation can fail in a few ways: 1. The restore fails with an FS_ECORRUPT error code. 2. The file is only partially restored; the end of the file will be inaccessible. This bug is rooted in the inconvenient data structure that NFFS uses for chained data blocks (reverse singly-linked list). The data structure is inconvenient, but it is used to minimize RAM and flash usage. On disk, each data block indicates the ID of the preceding data block in the parent file. In RAM, a file inode provides access to all the constituent data blocks by maintaining a pointer to the last data block. The bug is that the NFFS code does not always ensure that a file inode points to its last data block. The code assumes that data blocks will be restored in order of increasing file offset. If data blocks are restored in any other order, this bug occurs. The correct fix will be quite involved. I am going to implement a quick fix for 0.8.0 which fixes the bug, but introduces some horrible inefficiencies when large files are restored. I will schedule a proper fix for 0.9.0. -- This message was sent by Atlassian JIRA (v6.3.4#6332)