Loading lfs/src/adafs_ops/dentry_ops.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -13,14 +13,15 @@ using namespace std; /** * Initializes the dentry directory to hold future dentries * @param inode * @return * @return err */ bool init_dentry_dir(const fuse_ino_t inode) { auto d_path = bfs::path(ADAFS_DATA->dentry_path()); d_path /= to_string(inode); bfs::create_directories(d_path); // XXX This might not be needed as it is another access to the underlying file system return bfs::exists(d_path); // return bfs::exists(d_path); return 0; } /** Loading lfs/src/adafs_ops/metadata_ops.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -106,12 +106,23 @@ int remove_metadata(const fuse_ino_t inode) { return 0; } /** * Creates a new node (file or directory) in the file system. Fills given fuse_entry_param. * @param req * @param fep * @param parent * @param name * @param mode * @return err */ int create_node(fuse_req_t& req, struct fuse_entry_param& fep, fuse_ino_t parent, const string& name, mode_t mode) { // create metadata of new file (this will also create a new inode number) // mode is used here to init metadata auto md = make_shared<Metadata>(S_IFREG | mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid, req); auto md = make_shared<Metadata>(mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid, req); if ((mode & S_IFDIR) == S_IFDIR) { md->size( ADAFS_DATA->blocksize()); // XXX just visual. size computation of directory should be done properly at some point } // create directory entry (can fail) in adafs create_dentry(parent, md->inode_no(), name, mode); Loading lfs/src/classes/dentry.h +4 −4 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ class Dentry { private: std::string name_; uint64_t inode_; fuse_ino_t inode_; mode_t mode_; // file type code (6 bits) + permission bits (9 bits rwx(user)rwx(group)rwx(others) public: Loading @@ -19,15 +19,15 @@ public: Dentry(const std::string& name_); Dentry(const std::string &name_, uint64_t inode_, mode_t mode_); Dentry(const std::string& name_, fuse_ino_t inode_, mode_t mode_); const std::string& name() const; void name(const std::string& name_); uint64_t inode() const; fuse_ino_t inode() const; void inode(uint64_t inode_); void inode(fuse_ino_t inode_); mode_t mode() const; Loading lfs/src/classes/metadata.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ Metadata::Metadata(mode_t mode, uint32_t uid, uint32_t gid, fuse_req_t& req) : size_(0), blocks_(0) { init_ACM_time(); inode_no_ = Util::generate_inode_no(PRIV_DATA(req)->inode_mutex, PRIV_DATA(req)->inode_count); inode_no_ = Util::generate_inode_no(req); } Metadata::Metadata(mode_t mode, uid_t uid, gid_t gid, fuse_ino_t inode) : Loading lfs/src/fuse_ops.h +5 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ void adafs_ll_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int to_ void adafs_ll_create(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, struct fuse_file_info *fi); void adafs_ll_mknod(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, dev_t rdev); void adafs_ll_unlink(fuse_req_t req, fuse_ino_t p_inode, const char *name); void adafs_ll_unlink(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); void adafs_ll_release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); Loading @@ -21,6 +21,10 @@ void adafs_ll_release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) void adafs_ll_lookup(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_opendir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi); void adafs_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info* fi); void adafs_ll_mkdir(fuse_req_t req, fuse_ino_t parent, const char* name, mode_t mode); void adafs_ll_rmdir(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_releasedir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi); // I/O Loading Loading
lfs/src/adafs_ops/dentry_ops.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -13,14 +13,15 @@ using namespace std; /** * Initializes the dentry directory to hold future dentries * @param inode * @return * @return err */ bool init_dentry_dir(const fuse_ino_t inode) { auto d_path = bfs::path(ADAFS_DATA->dentry_path()); d_path /= to_string(inode); bfs::create_directories(d_path); // XXX This might not be needed as it is another access to the underlying file system return bfs::exists(d_path); // return bfs::exists(d_path); return 0; } /** Loading
lfs/src/adafs_ops/metadata_ops.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -106,12 +106,23 @@ int remove_metadata(const fuse_ino_t inode) { return 0; } /** * Creates a new node (file or directory) in the file system. Fills given fuse_entry_param. * @param req * @param fep * @param parent * @param name * @param mode * @return err */ int create_node(fuse_req_t& req, struct fuse_entry_param& fep, fuse_ino_t parent, const string& name, mode_t mode) { // create metadata of new file (this will also create a new inode number) // mode is used here to init metadata auto md = make_shared<Metadata>(S_IFREG | mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid, req); auto md = make_shared<Metadata>(mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid, req); if ((mode & S_IFDIR) == S_IFDIR) { md->size( ADAFS_DATA->blocksize()); // XXX just visual. size computation of directory should be done properly at some point } // create directory entry (can fail) in adafs create_dentry(parent, md->inode_no(), name, mode); Loading
lfs/src/classes/dentry.h +4 −4 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ class Dentry { private: std::string name_; uint64_t inode_; fuse_ino_t inode_; mode_t mode_; // file type code (6 bits) + permission bits (9 bits rwx(user)rwx(group)rwx(others) public: Loading @@ -19,15 +19,15 @@ public: Dentry(const std::string& name_); Dentry(const std::string &name_, uint64_t inode_, mode_t mode_); Dentry(const std::string& name_, fuse_ino_t inode_, mode_t mode_); const std::string& name() const; void name(const std::string& name_); uint64_t inode() const; fuse_ino_t inode() const; void inode(uint64_t inode_); void inode(fuse_ino_t inode_); mode_t mode() const; Loading
lfs/src/classes/metadata.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ Metadata::Metadata(mode_t mode, uint32_t uid, uint32_t gid, fuse_req_t& req) : size_(0), blocks_(0) { init_ACM_time(); inode_no_ = Util::generate_inode_no(PRIV_DATA(req)->inode_mutex, PRIV_DATA(req)->inode_count); inode_no_ = Util::generate_inode_no(req); } Metadata::Metadata(mode_t mode, uid_t uid, gid_t gid, fuse_ino_t inode) : Loading
lfs/src/fuse_ops.h +5 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ void adafs_ll_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr, int to_ void adafs_ll_create(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, struct fuse_file_info *fi); void adafs_ll_mknod(fuse_req_t req, fuse_ino_t parent, const char *name, mode_t mode, dev_t rdev); void adafs_ll_unlink(fuse_req_t req, fuse_ino_t p_inode, const char *name); void adafs_ll_unlink(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); void adafs_ll_release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); Loading @@ -21,6 +21,10 @@ void adafs_ll_release(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) void adafs_ll_lookup(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_opendir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi); void adafs_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info* fi); void adafs_ll_mkdir(fuse_req_t req, fuse_ino_t parent, const char* name, mode_t mode); void adafs_ll_rmdir(fuse_req_t req, fuse_ino_t parent, const char* name); void adafs_ll_releasedir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info* fi); // I/O Loading