mirror of
https://github.com/s3fs-fuse/s3fs-fuse.git
synced 2024-09-23 06:49:02 +00:00
Experiment with FUSE 3
This increases the maximum write size from 128 KB to 1 MB and supports some interesting FUSE_READDIR_PLUS flags. Remove stale FUSE_CAP_BIG_WRITES and flag_utime_omit_ok options. References #1159.
This commit is contained in:
parent
06d0852e74
commit
d03a8a17c3
24
.github/workflows/linux-ci-helper.sh
vendored
24
.github/workflows/linux-ci-helper.sh
vendored
@ -85,7 +85,7 @@ if [ "${CONTAINER_FULLNAME}" = "ubuntu:23.04" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse libfuse-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse3 libfuse3-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -94,7 +94,7 @@ elif [ "${CONTAINER_FULLNAME}" = "ubuntu:22.04" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse libfuse-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse3 libfuse3-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -103,7 +103,7 @@ elif [ "${CONTAINER_FULLNAME}" = "ubuntu:20.04" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse libfuse-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse3 libfuse3-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -112,7 +112,7 @@ elif [ "${CONTAINER_FULLNAME}" = "debian:bullseye" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse libfuse-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl procps python3-pip unzip"
|
||||
INSTALL_PACKAGES="autoconf autotools-dev openjdk-17-jre-headless fuse3 libfuse3-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl procps python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -121,7 +121,7 @@ elif [ "${CONTAINER_FULLNAME}" = "debian:buster" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="autoconf autotools-dev default-jre-headless fuse libfuse-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl procps python3-pip unzip"
|
||||
INSTALL_PACKAGES="autoconf autotools-dev default-jre-headless fuse3 libfuse3-dev libcurl4-openssl-dev libxml2-dev locales-all mime-support libtool pkg-config libssl-dev attr curl procps python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -137,7 +137,7 @@ elif [ "${CONTAINER_FULLNAME}" = "rockylinux:9" ]; then
|
||||
#
|
||||
PACKAGE_INSTALL_ADDITIONAL_OPTIONS="--allowerasing"
|
||||
|
||||
INSTALL_PACKAGES="curl-devel fuse fuse-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-17-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr diffutils curl python3 procps unzip xz https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm"
|
||||
INSTALL_PACKAGES="curl-devel fuse3 fuse3-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-17-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr diffutils curl python3 procps unzip xz https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm"
|
||||
INSTALL_CHECKER_PKGS="cppcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS="--enablerepo=epel"
|
||||
|
||||
@ -151,7 +151,7 @@ elif [ "${CONTAINER_FULLNAME}" = "rockylinux:8" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="curl-devel fuse fuse-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-17-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr diffutils curl python3 unzip"
|
||||
INSTALL_PACKAGES="curl-devel fuse3 fuse3-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-17-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr diffutils curl python3 unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS="--enablerepo=powertools"
|
||||
|
||||
@ -170,7 +170,7 @@ elif [ "${CONTAINER_FULLNAME}" = "centos:centos7" ]; then
|
||||
# And in this version, it cannot be passed due to following error.
|
||||
# "shellcheck: ./test/integration-test-main.sh: hGetContents: invalid argument (invalid byte sequence)"
|
||||
#
|
||||
INSTALL_PACKAGES="curl-devel fuse fuse-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-11-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr curl python3 epel-release unzip"
|
||||
INSTALL_PACKAGES="curl-devel fuse3 fuse3-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-11-openjdk-headless libxml2-devel mailcap git automake make openssl-devel attr curl python3 epel-release unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS="--enablerepo=epel"
|
||||
|
||||
@ -179,7 +179,7 @@ elif [ "${CONTAINER_FULLNAME}" = "fedora:38" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="curl-devel fuse fuse-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-latest-openjdk-headless libxml2-devel mailcap git automake make openssl-devel curl attr diffutils procps python3-pip unzip"
|
||||
INSTALL_PACKAGES="curl-devel fuse3 fuse3-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-latest-openjdk-headless libxml2-devel mailcap git automake make openssl-devel curl attr diffutils procps python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck ShellCheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -188,7 +188,7 @@ elif [ "${CONTAINER_FULLNAME}" = "fedora:37" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update -y -qq"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="curl-devel fuse fuse-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-latest-openjdk-headless libxml2-devel mailcap git automake make openssl-devel curl attr diffutils procps python3-pip unzip"
|
||||
INSTALL_PACKAGES="curl-devel fuse3 fuse3-devel gcc libstdc++-devel gcc-c++ glibc-langpack-en java-latest-openjdk-headless libxml2-devel mailcap git automake make openssl-devel curl attr diffutils procps python3-pip unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck ShellCheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -197,7 +197,7 @@ elif [ "${CONTAINER_FULLNAME}" = "opensuse/leap:15" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="refresh"
|
||||
PACKAGE_INSTALL_OPTIONS="install -y"
|
||||
|
||||
INSTALL_PACKAGES="automake curl-devel fuse fuse-devel gcc-c++ java-17-openjdk-headless libxml2-devel make openssl-devel python3-pip curl attr ShellCheck unzip"
|
||||
INSTALL_PACKAGES="automake curl-devel fuse3 fuse3-devel gcc-c++ java-17-openjdk-headless libxml2-devel make openssl-devel python3-pip curl attr ShellCheck unzip"
|
||||
INSTALL_CHECKER_PKGS="cppcheck ShellCheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
@ -206,7 +206,7 @@ elif [ "${CONTAINER_FULLNAME}" = "alpine:3.17" ]; then
|
||||
PACKAGE_UPDATE_OPTIONS="update --no-progress"
|
||||
PACKAGE_INSTALL_OPTIONS="add --no-progress --no-cache"
|
||||
|
||||
INSTALL_PACKAGES="bash curl g++ make automake autoconf libtool git curl-dev fuse-dev libxml2-dev coreutils procps attr sed mailcap openjdk17 aws-cli"
|
||||
INSTALL_PACKAGES="bash curl g++ make automake autoconf libtool git curl-dev fuse3 fuse3-dev libxml2-dev coreutils procps attr sed mailcap openjdk17 aws-cli"
|
||||
INSTALL_CHECKER_PKGS="cppcheck shellcheck"
|
||||
INSTALL_CHECKER_PKG_OPTIONS=""
|
||||
|
||||
|
12
configure.ac
12
configure.ac
@ -54,7 +54,7 @@ case "$target" in
|
||||
*)
|
||||
# Default Case
|
||||
# assume other supported linux system
|
||||
min_fuse_version=2.8.4
|
||||
min_fuse_version=3.0.0
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -192,7 +192,7 @@ dnl this is redundant checking, but we need checking before following.
|
||||
dnl
|
||||
AS_IF([test "x$found_fuse_t" = "xyes"],
|
||||
[PKG_CHECK_MODULES([common_lib_checking], [fuse-t >= ${min_fuse_t_version} libcurl >= 7.0 libxml-2.0 >= 2.6 ])],
|
||||
[PKG_CHECK_MODULES([common_lib_checking], [fuse >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 ])])
|
||||
[PKG_CHECK_MODULES([common_lib_checking], [fuse3 >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 ])])
|
||||
|
||||
AC_MSG_CHECKING([compile s3fs with])
|
||||
case "${auth_lib}" in
|
||||
@ -200,7 +200,7 @@ openssl)
|
||||
AC_MSG_RESULT(OpenSSL)
|
||||
AS_IF([test "x$found_fuse_t" = "xyes"],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse-t >= ${min_fuse_t_version} libcurl >= 7.0 libxml-2.0 >= 2.6 libcrypto >= 0.9 ])],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 libcrypto >= 0.9 ])])
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse3 >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 libcrypto >= 0.9 ])])
|
||||
|
||||
AC_MSG_CHECKING([openssl 3.0 or later])
|
||||
AC_COMPILE_IFELSE(
|
||||
@ -220,7 +220,7 @@ gnutls)
|
||||
[
|
||||
AS_IF([test "x$found_fuse_t" = "xyes"],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse-t >= ${min_fuse_t_version} libcurl >= 7.0 libxml-2.0 >= 2.6 gnutls >= 2.12.0 ])],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 gnutls >= 2.12.0 ])])
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse3 >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 gnutls >= 2.12.0 ])])
|
||||
LIBS="-lgnutls -lgcrypt $LIBS"
|
||||
AC_MSG_CHECKING([gnutls is build with])
|
||||
AC_MSG_RESULT(gcrypt)
|
||||
@ -236,7 +236,7 @@ nettle)
|
||||
[
|
||||
AS_IF([test "x$found_fuse_t" = "xyes"],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse-t >= ${min_fuse_t_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nettle >= 2.7.1 ])],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nettle >= 2.7.1 ])])
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse3 >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nettle >= 2.7.1 ])])
|
||||
LIBS="-lgnutls -lnettle $LIBS"
|
||||
AC_MSG_CHECKING([gnutls is build with])
|
||||
AC_MSG_RESULT(nettle)
|
||||
@ -247,7 +247,7 @@ nss)
|
||||
AC_MSG_RESULT(NSS)
|
||||
AS_IF([test "x$found_fuse_t" = "xyes"],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse-t >= ${min_fuse_t_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nss >= 3.15.0 ])],
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nss >= 3.15.0 ])])
|
||||
[PKG_CHECK_MODULES([DEPS], [fuse3 >= ${min_fuse_version} libcurl >= 7.0 libxml-2.0 >= 2.6 nss >= 3.15.0 ])])
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([unknown ssl library type.])
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <utime.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "fdcache_entity.h"
|
||||
|
63
src/s3fs.cpp
63
src/s3fs.cpp
@ -149,22 +149,22 @@ static fsblkcnt_t parse_bucket_size(char* value);
|
||||
//-------------------------------------------------------------------
|
||||
// fuse interface functions
|
||||
//-------------------------------------------------------------------
|
||||
static int s3fs_getattr(const char* path, struct stat* stbuf);
|
||||
static int s3fs_getattr(const char* path, struct stat* stbuf, fuse_file_info* info);
|
||||
static int s3fs_readlink(const char* path, char* buf, size_t size);
|
||||
static int s3fs_mknod(const char* path, mode_t mode, dev_t rdev);
|
||||
static int s3fs_mkdir(const char* path, mode_t mode);
|
||||
static int s3fs_unlink(const char* path);
|
||||
static int s3fs_rmdir(const char* path);
|
||||
static int s3fs_symlink(const char* from, const char* to);
|
||||
static int s3fs_rename(const char* from, const char* to);
|
||||
static int s3fs_rename(const char* from, const char* to, unsigned int flags);
|
||||
static int s3fs_link(const char* from, const char* to);
|
||||
static int s3fs_chmod(const char* path, mode_t mode);
|
||||
static int s3fs_chmod_nocopy(const char* path, mode_t mode);
|
||||
static int s3fs_chown(const char* path, uid_t uid, gid_t gid);
|
||||
static int s3fs_chown_nocopy(const char* path, uid_t uid, gid_t gid);
|
||||
static int s3fs_utimens(const char* path, const struct timespec ts[2]);
|
||||
static int s3fs_utimens_nocopy(const char* path, const struct timespec ts[2]);
|
||||
static int s3fs_truncate(const char* path, off_t size);
|
||||
static int s3fs_chmod(const char* path, mode_t mode, struct fuse_file_info* info);
|
||||
static int s3fs_chmod_nocopy(const char* path, mode_t mode, struct fuse_file_info* info);
|
||||
static int s3fs_chown(const char* path, uid_t uid, gid_t gid, struct fuse_file_info* info);
|
||||
static int s3fs_chown_nocopy(const char* path, uid_t uid, gid_t gid, struct fuse_file_info* info);
|
||||
static int s3fs_utimens(const char* path, const struct timespec ts[2], struct fuse_file_info* info);
|
||||
static int s3fs_utimens_nocopy(const char* path, const struct timespec ts[2], struct fuse_file_info* info);
|
||||
static int s3fs_truncate(const char* path, off_t size, struct fuse_file_info* info);
|
||||
static int s3fs_create(const char* path, mode_t mode, struct fuse_file_info* fi);
|
||||
static int s3fs_open(const char* path, struct fuse_file_info* fi);
|
||||
static int s3fs_read(const char* path, char* buf, size_t size, off_t offset, struct fuse_file_info* fi);
|
||||
@ -174,9 +174,9 @@ static int s3fs_flush(const char* path, struct fuse_file_info* fi);
|
||||
static int s3fs_fsync(const char* path, int datasync, struct fuse_file_info* fi);
|
||||
static int s3fs_release(const char* path, struct fuse_file_info* fi);
|
||||
static int s3fs_opendir(const char* path, struct fuse_file_info* fi);
|
||||
static int s3fs_readdir(const char* path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* fi);
|
||||
static int s3fs_readdir(const char* path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* info, enum fuse_readdir_flags);
|
||||
static int s3fs_access(const char* path, int mask);
|
||||
static void* s3fs_init(struct fuse_conn_info* conn);
|
||||
static void* s3fs_init(struct fuse_conn_info* conn, fuse_config* config);
|
||||
static void s3fs_destroy(void*);
|
||||
#if defined(__APPLE__)
|
||||
static int s3fs_setxattr(const char* path, const char* name, const char* value, size_t size, int flags, uint32_t position);
|
||||
@ -935,7 +935,7 @@ int put_headers(const char* path, headers_t& meta, bool is_copy, bool use_st_siz
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_getattr(const char* _path, struct stat* stbuf)
|
||||
static int s3fs_getattr(const char* _path, struct stat* stbuf, fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -1777,7 +1777,7 @@ static int rename_directory(const char* from, const char* to)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_rename(const char* _from, const char* _to)
|
||||
static int s3fs_rename(const char* _from, const char* _to, unsigned int flags)
|
||||
{
|
||||
WTF8_ENCODE(from)
|
||||
WTF8_ENCODE(to)
|
||||
@ -1850,7 +1850,7 @@ static int s3fs_link(const char* _from, const char* _to)
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static int s3fs_chmod(const char* _path, mode_t mode)
|
||||
static int s3fs_chmod(const char* _path, mode_t mode, struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -1956,7 +1956,7 @@ static int s3fs_chmod(const char* _path, mode_t mode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_chmod_nocopy(const char* _path, mode_t mode)
|
||||
static int s3fs_chmod_nocopy(const char* _path, mode_t mode, struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -2048,7 +2048,7 @@ static int s3fs_chmod_nocopy(const char* _path, mode_t mode)
|
||||
return result;
|
||||
}
|
||||
|
||||
static int s3fs_chown(const char* _path, uid_t uid, gid_t gid)
|
||||
static int s3fs_chown(const char* _path, uid_t uid, gid_t gid, struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -2161,7 +2161,7 @@ static int s3fs_chown(const char* _path, uid_t uid, gid_t gid)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_chown_nocopy(const char* _path, uid_t uid, gid_t gid)
|
||||
static int s3fs_chown_nocopy(const char* _path, uid_t uid, gid_t gid, struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -2373,7 +2373,7 @@ static int update_mctime_parent_directory(const char* _path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_utimens(const char* _path, const struct timespec ts[2])
|
||||
static int s3fs_utimens(const char* _path, const struct timespec ts[2], struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -2505,7 +2505,7 @@ static int s3fs_utimens(const char* _path, const struct timespec ts[2])
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3fs_utimens_nocopy(const char* _path, const struct timespec ts[2])
|
||||
static int s3fs_utimens_nocopy(const char* _path, const struct timespec ts[2], struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -2611,7 +2611,7 @@ static int s3fs_utimens_nocopy(const char* _path, const struct timespec ts[2])
|
||||
return result;
|
||||
}
|
||||
|
||||
static int s3fs_truncate(const char* _path, off_t size)
|
||||
static int s3fs_truncate(const char* _path, off_t size, struct fuse_file_info* info)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
int result;
|
||||
@ -3092,10 +3092,10 @@ static bool multi_head_callback(S3fsCurl* s3fscurl, void* param)
|
||||
struct multi_head_callback_param* pcbparam = reinterpret_cast<struct multi_head_callback_param*>(param);
|
||||
struct stat st;
|
||||
if(StatCache::getStatCacheData()->GetStat(saved_path, &st)){
|
||||
pcbparam->filler(pcbparam->buf, bpath.c_str(), &st, 0);
|
||||
pcbparam->filler(pcbparam->buf, bpath.c_str(), &st, 0, (fuse_fill_dir_flags) 0);
|
||||
}else{
|
||||
S3FS_PRN_INFO2("Could not find %s file in stat cache.", saved_path.c_str());
|
||||
pcbparam->filler(pcbparam->buf, bpath.c_str(), 0, 0);
|
||||
pcbparam->filler(pcbparam->buf, bpath.c_str(), 0, 0, (fuse_fill_dir_flags) 0);
|
||||
}
|
||||
}else{
|
||||
S3FS_PRN_WARN("param(multi_head_callback_param*) is NULL, then can not call filler.");
|
||||
@ -3218,7 +3218,7 @@ static int readdir_multi_head(const char* path, const S3ObjList& head, void* buf
|
||||
if(use_wtf8){
|
||||
bpath = s3fs_wtf8_decode(bpath);
|
||||
}
|
||||
filler(buf, bpath.c_str(), &st, 0);
|
||||
filler(buf, bpath.c_str(), &st, 0, (fuse_fill_dir_flags) 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -3287,10 +3287,10 @@ static int readdir_multi_head(const char* path, const S3ObjList& head, void* buf
|
||||
|
||||
struct stat st;
|
||||
if(StatCache::getStatCacheData()->GetStat(dirpath, &st)){
|
||||
filler(buf, base_path.c_str(), &st, 0);
|
||||
filler(buf, base_path.c_str(), &st, 0, (fuse_fill_dir_flags) 0);
|
||||
}else{
|
||||
S3FS_PRN_INFO2("Could not find %s directory(no dir object) in stat cache.", dirpath.c_str());
|
||||
filler(buf, base_path.c_str(), 0, 0);
|
||||
filler(buf, base_path.c_str(), 0, 0, (fuse_fill_dir_flags) 0);
|
||||
}
|
||||
}else{
|
||||
S3FS_PRN_ERR("failed adding stat cache [path=%s], but dontinue...", dirpath.c_str());
|
||||
@ -3304,7 +3304,7 @@ static int readdir_multi_head(const char* path, const S3ObjList& head, void* buf
|
||||
return result;
|
||||
}
|
||||
|
||||
static int s3fs_readdir(const char* _path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* fi)
|
||||
static int s3fs_readdir(const char* _path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* info, enum fuse_readdir_flags)
|
||||
{
|
||||
WTF8_ENCODE(path)
|
||||
S3ObjList head;
|
||||
@ -3323,8 +3323,8 @@ static int s3fs_readdir(const char* _path, void* buf, fuse_fill_dir_t filler, of
|
||||
}
|
||||
|
||||
// force to add "." and ".." name.
|
||||
filler(buf, ".", 0, 0);
|
||||
filler(buf, "..", 0, 0);
|
||||
filler(buf, ".", 0, 0, (fuse_fill_dir_flags) 0);
|
||||
filler(buf, "..", 0, 0, (fuse_fill_dir_flags) 0);
|
||||
if(head.IsEmpty()){
|
||||
return 0;
|
||||
}
|
||||
@ -4205,7 +4205,7 @@ static void s3fs_exit_fuseloop(int exit_status)
|
||||
}
|
||||
}
|
||||
|
||||
static void* s3fs_init(struct fuse_conn_info* conn)
|
||||
static void* s3fs_init(struct fuse_conn_info* conn, fuse_config* config)
|
||||
{
|
||||
S3FS_PRN_INIT_INFO("init v%s(commit:%s) with %s, credential-library(%s)", VERSION, COMMIT_HASH_VAL, s3fs_crypt_lib_name(), ps3fscred->GetCredFuncVersion(false));
|
||||
|
||||
@ -4237,10 +4237,6 @@ static void* s3fs_init(struct fuse_conn_info* conn)
|
||||
}
|
||||
#endif
|
||||
|
||||
if((unsigned int)conn->capable & FUSE_CAP_BIG_WRITES){
|
||||
conn->want |= FUSE_CAP_BIG_WRITES;
|
||||
}
|
||||
|
||||
// Signal object
|
||||
if(!S3fsSignals::Initialize()){
|
||||
S3FS_PRN_ERR("Failed to initialize signal object, but continue...");
|
||||
@ -5727,7 +5723,6 @@ int main(int argc, char* argv[])
|
||||
s3fs_oper.listxattr = s3fs_listxattr;
|
||||
s3fs_oper.removexattr = s3fs_removexattr;
|
||||
}
|
||||
s3fs_oper.flag_utime_omit_ok = true;
|
||||
|
||||
// now passing things off to fuse, fuse will finish evaluating the command line args
|
||||
fuse_res = fuse_main(custom_args.argc, custom_args.argv, &s3fs_oper, NULL);
|
||||
|
@ -21,7 +21,7 @@
|
||||
#ifndef S3FS_S3FS_H_
|
||||
#define S3FS_S3FS_H_
|
||||
|
||||
#define FUSE_USE_VERSION 26
|
||||
#define FUSE_USE_VERSION 30
|
||||
|
||||
#include <fuse.h>
|
||||
|
||||
|
@ -352,7 +352,7 @@ function stop_s3fs {
|
||||
fi
|
||||
else
|
||||
if grep -q "${TEST_BUCKET_MOUNT_POINT_1}" /proc/mounts; then
|
||||
retry 10 grep -q "${TEST_BUCKET_MOUNT_POINT_1}" /proc/mounts "&&" fusermount -u "${TEST_BUCKET_MOUNT_POINT_1}"
|
||||
retry 10 grep -q "${TEST_BUCKET_MOUNT_POINT_1}" /proc/mounts "&&" fusermount3 -u "${TEST_BUCKET_MOUNT_POINT_1}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user