Commit bd792df8 authored by Marc Vef's avatar Marc Vef
Browse files

Fix: rpc_srv_attr() call to get_metadata instead of get_attr

parent 82afdc34
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ int get_attr(struct stat& attr, const fuse_ino_t inode) {
            if (err == 0)
                metadata_to_stat(md, attr);
        } else {
            // attr is filled in here for rpcs
            err = rpc_send_get_attr(recipient, inode, attr);
        }
    } else { // single node operation
@@ -161,7 +162,7 @@ void metadata_to_stat(const Metadata& md, struct stat& attr) {
    attr.st_uid = md.uid();
    attr.st_gid = md.gid();
    attr.st_size = md.size();
    attr.st_blksize = ADAFS_DATA->blocksize();
    attr.st_blksize = ADAFS_DATA->blocksize(); // globally set blocksize is used
    attr.st_blocks = md.blocks();
    attr.st_atim.tv_sec = md.atime();
    attr.st_mtim.tv_sec = md.mtime();
+2 −0
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ int rpc_send_get_attr(const size_t recipient, const fuse_ino_t inode, struct sta
        ret = HG_Get_output(handle, &out);

        ADAFS_DATA->spdlogger()->debug("Got response mode {}", out.mode);
        attr.st_ino = static_cast<uint64_t>(inode);
        attr.st_atim.tv_sec = static_cast<time_t>(out.atime);
        attr.st_mtim.tv_sec = static_cast<time_t>(out.mtime);
        attr.st_ctim.tv_sec = static_cast<time_t>(out.ctime);
@@ -190,6 +191,7 @@ int rpc_send_get_attr(const size_t recipient, const fuse_ino_t inode, struct sta
        attr.st_gid = static_cast<gid_t>(out.gid);
        attr.st_nlink = static_cast<nlink_t>(out.nlink);
        attr.st_size = static_cast<size_t>(out.size);
        attr.st_blksize = ADAFS_DATA->blocksize(); // globally set blocksize is used
        attr.st_blocks = static_cast<blkcnt_t>(out.blocks);

        /* clean up resources consumed by this rpc */
+12 −11
Original line number Diff line number Diff line
@@ -74,18 +74,19 @@ static hg_return_t rpc_srv_attr(hg_handle_t handle) {
    ADAFS_DATA->spdlogger()->info("Got get attr RPC with inode {}", in.inode);
    hgi = HG_Get_info(handle);
    auto mid = margo_hg_class_to_instance(hgi->hg_class);
    // get the metadata
    Metadata md{};
    get_metadata(md, in.inode);
    out.atime = static_cast<uint64_t>(md.atime());
    out.mtime = static_cast<uint64_t>(md.mtime());
    out.ctime = static_cast<uint64_t>(md.ctime());
    out.mode = static_cast<uint32_t>(md.mode());
    out.uid = static_cast<uint32_t>(md.uid());
    out.gid = static_cast<uint32_t>(md.gid());
    out.nlink = static_cast<uint64_t>(md.link_count());
    out.size = static_cast<uint64_t>(md.size());
    out.blocks = static_cast<uint64_t>(md.blocks());

    struct stat attr{};
    get_attr(attr, in.inode);
    out.atime = attr.st_atim.tv_sec;
    out.mtime = attr.st_mtim.tv_sec;
    out.ctime = attr.st_ctim.tv_sec;
    out.mode = attr.st_mode;
    out.uid = attr.st_uid;
    out.gid = attr.st_gid;
    out.nlink = attr.st_nlink;
    out.size = attr.st_size;
    out.blocks = attr.st_blocks;
    ADAFS_DATA->spdlogger()->debug("Sending output mode {}", out.mode);
    auto hret = margo_respond(mid, handle, &out);
    assert(hret == HG_SUCCESS);