Commit 1d55ec41 authored by Marc Vef's avatar Marc Vef
Browse files

Resolved fuse destroy bug, mdtest comments, cmake comments

parent d96fda46
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13,4 +13,5 @@ build/
#########

cmake-build-debug/
cmake-build-release/
playground/
+7 −4
Original line number Diff line number Diff line
@@ -3,19 +3,22 @@ project(fs VERSION 0.0.1)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FILE_OFFSET_BITS=64")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall --pedantic -g")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall --pedantic -g -pg")

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
find_package(FUSE3 REQUIRED)

# boost dependencies #TODO VERSION UNTESTED. I USE 1.62

# required packages
find_package(FUSE3 REQUIRED)
# boost dependencies, system is required for filesystem #TODO VERSION UNTESTED. I USE 1.62
find_package(Boost 1.56.0 COMPONENTS system filesystem serialization)

include_directories(${FUSE3_INCLUDE_DIR} include/)
set(SOURCE_FILES src/main.cpp src/main.h src/fuse_ops.h src/util.cpp src/classes/metadata.h src/classes/metadata.cpp src/adafs_ops/metadata_ops.h src/adafs_ops/metadata_ops.cpp src/adafs_ops/dentry_ops.cpp src/adafs_ops/dentry_ops.h src/configure.h src/fuse_ops/file.cpp src/fuse_ops/directory.cpp src/fuse_ops/access.cpp src/fuse_ops/sync.cpp src/adafs_ops/access.cpp src/adafs_ops/access.h src/fuse_ops/fs.cpp src/fuse_ops/io.cpp src/adafs_ops/io.cpp src/adafs_ops/io.h)
add_executable(adafs ${SOURCE_FILES} src/main.cpp)
target_link_libraries(adafs ${FUSE3_LIBRARIES} -lpthread -lboost_system -lboost_filesystem -lboost_serialization)
 No newline at end of file
target_link_libraries(adafs ${FUSE3_LIBRARIES} -lpthread -lboost_system -lboost_filesystem -lboost_serialization -pg)
 No newline at end of file
+25 −1
Original line number Diff line number Diff line
@@ -26,6 +26,24 @@ int adafs_getattr(const char* p, struct stat* attr, struct fuse_file_info* fi) {
    auto path = bfs::path(p);
    auto md = make_shared<Metadata>();

// uncomment when mdtest.files should return 0 without actually checking if its there
//    if (path.filename().string().find("file.mdtest") == 0) {
//        auto md = make_unique<Metadata>(S_IFREG | 664);
//        md->init_ACM_time();
//        attr->st_ino = md->inode_no();
//        attr->st_mode = md->mode();
//        attr->st_nlink = md->link_count();
//        attr->st_uid = md->uid();
//        attr->st_gid = md->gid();
//        attr->st_size = md->size();
//        attr->st_blksize = ADAFS_DATA->blocksize;
//        attr->st_blocks = md->blocks();
//        attr->st_atim.tv_sec = md->atime();
//        attr->st_mtim.tv_sec = md->mtime();
//        attr->st_ctim.tv_sec = md->ctime();
//        return 0;
//    }

    if (get_metadata(*md, path) != -ENOENT) {
        attr->st_ino = md->inode_no();
        attr->st_mode = md->mode();
@@ -54,6 +72,9 @@ int adafs_mknod(const char* p, mode_t mode, dev_t dev) {
    ADAFS_DATA->logger->debug("##### FUSE FUNC ###### adafs_mknod() enter: name '{}' mode {} dev {}", p, mode, dev);
    // XXX Errorhandling and beware of transactions. saving dentry and metadata have to be atomic
    auto path = bfs::path(p);
// uncomment if file creates done with mdtest should return immediately without creating the file
//    if (path.filename().string().find("file.mdtest") == 0)
//        return 0;

    // XXX check if file exists (how can we omit this? Let's just try to create it and see if it fails)

@@ -114,6 +135,9 @@ int adafs_open(const char* p, struct fuse_file_info* fi) {
#ifdef CHECK_ACCESS
    // XXX error handling
    auto path = bfs::path(p);
// uncomment if file creates done with mdtest should return immediately without creating the file
//    if (path.filename().string().find("file.mdtest") == 0)
//        return 0;
    auto md = make_shared<Metadata>();

    get_metadata(*md, path);
@@ -191,7 +215,7 @@ int adafs_utimens(const char* p, const struct timespec tv[2], struct fuse_file_i
 * file.  The return value of release is ignored.
 */
int adafs_release(const char* p, struct fuse_file_info* fi) {
    ADAFS_DATA->logger->info("##### FUSE FUNC ###### adafs_release() enter: name '{}'", p);
    ADAFS_DATA->logger->debug("##### FUSE FUNC ###### adafs_release() enter: name '{}'", p);
    // XXX Dunno what this function is for yet
    return 0;
}
 No newline at end of file
+5 −3
Original line number Diff line number Diff line
@@ -57,13 +57,11 @@ void* adafs_init(struct fuse_conn_info* conn, struct fuse_config* cfg) {
        ADAFS_DATA->logger->debug("Metadata object exists"s);
#endif


    return ADAFS_DATA;
}

void adafs_destroy(void* adafs_data) {
    util::write_inode_cnt();
    delete ADAFS_DATA;
}


@@ -131,5 +129,9 @@ int main(int argc, char* argv[]) {
    //print version
    cout << "Fuse library version: "s + to_string(FUSE_MAJOR_VERSION) + to_string(FUSE_MINOR_VERSION) << endl;
    //init fuse and give the private data struct for further reference.
    return fuse_main(argc, argv, &adafs_ops, a_data.get());
    cout << "initializing fuse..." << endl;
    auto err = fuse_main(argc, argv, &adafs_ops, a_data.get());
    cout << "about to close fuse" << endl;

    return err;
}