Commit Graph

19 Commits

Author SHA1 Message Date
Justin Husted
2bc1166919 Add more fuse logging.
Signed-off-by: Justin Husted <sigstop@gmail.com>
2019-11-03 23:17:43 -05:00
Kent Overstreet
648b871d3d Enable caching of negative dentries 2019-10-18 16:51:15 -04:00
Kent Overstreet
b5af93e90f Simplify readdir 2019-10-18 16:24:18 -04:00
Kent Overstreet
8e6afb875d Write path now updates i_size/i_sectors 2019-10-18 16:23:39 -04:00
Justin Husted
3214b44d90 Use proper flags mask. 2019-10-18 16:23:39 -04:00
Justin Husted
fd0b8fe7f0 Prettify the align_io function by returning by value. 2019-10-18 16:23:39 -04:00
Justin Husted
de151b0659 Fix missing mode setting in fuse mkdir. 2019-10-18 16:23:39 -04:00
Justin Husted
0df96db46e Add fuse symlink and readlink support.
Also fix link.
2019-10-18 16:23:39 -04:00
Justin Husted
426d2c74fd Implement unaligned write support for fuse. Seems to work on initial
testing, but there are problems with cache coherency and journaling.
2019-10-18 16:23:39 -04:00
Justin Husted
1a8288cba2 Factor alignment logic out of bcachefs_fuse_read. 2019-10-18 16:23:39 -04:00
Justin Husted
0521494e79 Implement unaligned read support for fuse. 2019-10-18 16:23:39 -04:00
Justin Husted
f8076573b5 Make fuse read and write work (for aligned writes).
Read: There was a missing refcount on the closure.

Write: Unlike in the Linux kernel, we need to manually update the size
and timestamps, otherwise the operation will appear complete when viewed
via the cached inode, but after unmounting and mounting again the write
will be undone.
2019-10-18 16:23:39 -04:00
Justin Husted
52771aa7d2 Fix fuse read/write to not segfault on unaligned IO. 2019-10-18 16:23:39 -04:00
Kent Overstreet
415a3651fc initialize op->pos for write 2019-10-18 16:23:39 -04:00
Kent Overstreet
94980e1892 fill in .st_ino in .getattr 2019-10-18 16:23:39 -04:00
Kent Overstreet
81551c8f1b build fixes; initial read/write methods 2019-10-18 16:23:39 -04:00
Justin Husted
8b6497b4e7 Fix infinite looping behavior with readdir.
Also adds partial . and .. support, and implements ENOTDIR error.

The source of this problem was due to the off-by-one interface expected
by readdir. Each directory entry contains a pointer to next, so it
cannot be emitted to the user until the next entry is actually read.

Returning the current position + 1 is insufficient, because the user
will just retry cur + 1 as the start position to see if they've reached
the end of the directory.

Since directory entries are keyed by a 64-bit hash in bcachefs, the
result was that the user would call readdir over and over with what it
believed the next pointer to be until "cur + 1" reached some enormous
64-bit value related to the hash for the "lost+found" entry.
2019-10-18 16:23:39 -04:00
Justin Husted
08ce726f9c Implement option parsing for fuse. The syntax is:
bcachefs fusemount dev mountpoint
or
bcachefs fusemount dev1:dev2:... mountpoint
2019-10-18 16:23:39 -04:00
Kent Overstreet
bc45c28470 fuse 2019-10-18 16:23:39 -04:00