ShingledFS 2.0
SMR-AwareFUSE-basedFileSystem

Todo List

Global bc_file_t
Hide any items that do not need to be exposed to FUSE. Currently, the only thing that FUSE needs is the file descriptor and the dirty flag. However, its better to store a pointer to this struct in FUSE for constant- order searching of the record for a file. So, move all other fields into another struct and save a void pointer to that struct within this struct. This way only the Buffer Cache code can access the internal fields, whereas FUSE can use the values that it is concerned with.

Global bc_generate_tmpFS_path (char *path_out, const char *path_in)
Improve this function to run faster. All that is needed is a unique path on tmpFS. There is no need to convert all /'s to _'s in the input path

page ShingledFS - The Shingled Magnetic Recording File System

Add Image here.

Document the Versioning Interface here.

Global shingledfs_access (const char *path, int mask)
Implement access() correctly when the file is not open. This should involve check the uid and gid of the file and the current user and the access permissions set in st_mode in the file's attributes.

Global shingledfs_chown (const char *path, uid_t uid, gid_t gid)
Fix this function to account for Attribute Replication

Global shingledfs_getattr (const char *path, struct stat *statbuf)
Is it cheaper to perform a comparison on with every open file in the BC to determine location? The "file is open" code path takes 3 system calls!

Global shingledfs_init (struct fuse_conn_info *conn)
Buffer Cache size hard coded!

Global shingledfs_link (const char *path, const char *path_target)
This function might not be suited for the ShingledFS architecture. Consider what happens to a hard link when the target is opened. The file is deleted and replaced with a symlink to a file on tmpFS. With the deletion, the hard link is removed! Unless the hard links are tracked and recreated on each open and BC eviction, this is bound to fail!

Global shingledfs_truncate (const char *path, off_t offset)
This function does not need to update the inode information as that will result in leaking of data blocks. Instead, ensure that when a file is loaded, the number of blocks is calculated based on its actual file size; NOT the no. of blocks saved in the inode.

Global shingledfs_utime (const char *path, struct utimbuf *tv)
Update to account for attribute replication

Global xattr_path (const char *in_path, char *out_path)
Consider adding the S_ISREG() check on the stats of the input path!