enable FUSE read_sync by default

This commit is contained in:
Or Ozeri 2018-05-06 16:10:36 +03:00
parent 4a72b60707
commit 86b0921ac4

View File

@ -120,6 +120,7 @@ static bool nocopyapi = false;
static bool norenameapi = false;
static bool nonempty = false;
static bool allow_other = false;
static bool fuse_read_mode_set = false;
static bool load_iamrole = false;
static uid_t s3fs_uid = 0;
static gid_t s3fs_gid = 0;
@ -4355,6 +4356,10 @@ static int my_fuse_opt_proc(void* data, const char* arg, int key, struct fuse_ar
allow_other = true;
return 1; // continue for fuse option
}
if(0 == strcmp(arg, "sync_read") || 0 == strcmp(arg, "async_read")){
fuse_read_mode_set = true;
return 1; // continue for fuse option
}
if(0 == STR2NCMP(arg, "mp_umask=")){
mp_umask = strtol(strchr(arg, '=') + sizeof(char), NULL, 0);
mp_umask &= (S_IRWXU | S_IRWXG | S_IRWXO);
@ -4925,6 +4930,15 @@ int main(int argc, char* argv[])
exit(EXIT_FAILURE);
}
// s3fs read is sync (fdent_lock is locked while reading)
// FUSE is async read by default
// switch FUSE to sync read to avoid hitting FUSE's max_background limit
// as well as to make sure that big read requests that are splitted by the kernel
// are always read in-order
if (!fuse_read_mode_set && 0 != fuse_opt_add_arg(&custom_args, "-osync_read")){
exit(EXIT_FAILURE);
}
// [NOTE]
// exclusive option check here.
//