Fix a union file system bug

This commit is contained in:
Gregory Nutt
2015-06-24 09:07:13 -06:00
parent 712a14ab25
commit 8ed9c24675
3 changed files with 332 additions and 81 deletions
+2 -20
View File
@@ -1,4 +1,4 @@
NuttX TODO List (Last updated June 22, 2015)
NuttX TODO List (Last updated June 24, 2015)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This file summarizes known NuttX bugs, limitations, inconsistencies with
@@ -19,7 +19,7 @@ nuttx/
(12) Network (net/, drivers/net)
(5) USB (drivers/usbdev, drivers/usbhost)
(12) Libraries (libc/, libm/)
(12) File system/Generic drivers (fs/, drivers/)
(11) File system/Generic drivers (fs/, drivers/)
(8) Graphics subsystem (graphics/)
(1) Pascal add-on (pcode/)
(2) Build system / Toolchains
@@ -1439,24 +1439,6 @@ o File system / Generic drivers (fs/, drivers/)
ignored by readder() logic. This the file does not
appear in the 'ls'.
Title: UNIONFS WITH OFFSETS
Description: The Union File System supports offset strings to allow
directories to appear at an offset below the union mount
point. These offsets work in many cases (open, close, read,
write, etc.), but there are some problems:
1. The current test case at apps/examples/unionfs uses an
offset string for one file system, but the offset string
is matched by a a directory in the other file system.
This causes many problems with the offset file system to
be obscured.
2. If both contained file systems are offset, then stat(),
opendir(), readdir() etc. fail.
3. The offsets do not work for directory operations on their
the top level directory.
Status: Open
Priority: High-ish
o Graphics subsystem (graphics/)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+328 -61
View File
File diff suppressed because it is too large Load Diff
+2
View File
@@ -157,6 +157,8 @@ struct fs_dirent_s; /* Forward reference */
struct fs_unionfsdir_s
{
uint8_t fu_ndx; /* Index of file system being enumerated */
bool fu_eod; /* True: At end of directory */
bool fu_prefix[2]; /* True: Fake directory in prefix */
FAR char *fu_relpath; /* Path being enumerated */
FAR struct fs_dirent_s *fu_lower[2]; /* dirent struct used by contained file system */
};