aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBernd Schubert <bschubert@ddn.com>2025-05-17 23:52:47 +0200
committerBernd Schubert <bernd@bsbernd.com>2025-05-21 13:44:17 +0200
commitc27bbcec3d4ef6cbb279d589d2bf73dc595eb51e (patch)
tree27ccdceb661d0e5ec747ebf56c9c4ddcb815de17 /lib
parent8e226c6af6f386a88ed53d0a0940ff6b869b372d (diff)
downloadlibfuse-c27bbcec3d4ef6cbb279d589d2bf73dc595eb51e.tar.gz
Make conn->want/want_ext conversion non fatal
there are too many issues with conn->want and conn->want_ext conversion, for now just log a warning, but setting both flags is now not fatal anymore. Signed-off-by: Bernd Schubert <bschubert@ddn.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/fuse.c16
-rw-r--r--lib/fuse_i.h5
-rw-r--r--lib/fuse_lowlevel.c9
3 files changed, 3 insertions, 27 deletions
diff --git a/lib/fuse.c b/lib/fuse.c
index 49f5711..c0d00ed 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -2618,25 +2618,11 @@ void fuse_fs_init(struct fuse_fs *fs, struct fuse_conn_info *conn,
if (fs->op.init) {
uint64_t want_ext_default = conn->want_ext;
uint32_t want_default = fuse_lower_32_bits(conn->want_ext);
- int rc;
conn->want = want_default;
fs->user_data = fs->op.init(conn, cfg);
- rc = convert_to_conn_want_ext(conn, want_ext_default,
- want_default);
-
- if (rc != 0) {
- /*
- * This is a grave developer error, but
- * we cannot return an error here, as the function
- * signature does not allow it.
- */
- fuse_log(
- FUSE_LOG_ERR,
- "fuse: Aborting due to invalid conn want flags.\n");
- _exit(EXIT_FAILURE);
- }
+ convert_to_conn_want_ext(conn, want_ext_default, want_default);
}
}
diff --git a/lib/fuse_i.h b/lib/fuse_i.h
index 48b8294..bf5e2ca 100644
--- a/lib/fuse_i.h
+++ b/lib/fuse_i.h
@@ -245,11 +245,8 @@ static inline int convert_to_conn_want_ext(struct fuse_conn_info *conn,
*/
if (conn->want != want_default &&
fuse_lower_32_bits(conn->want_ext) != conn->want) {
- if (conn->want_ext != want_ext_default) {
- fuse_log(FUSE_LOG_ERR,
- "fuse: both 'want' and 'want_ext' are set\n");
+ if (conn->want_ext != want_ext_default)
return -EINVAL;
- }
/* high bits from want_ext, low bits from want */
conn->want_ext = fuse_higher_32_bits(conn->want_ext) |
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 9ebaaf0..9ee88b1 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -2160,7 +2160,6 @@ void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
if (se->op.init) {
uint64_t want_ext_default = se->conn.want_ext;
uint32_t want_default = fuse_lower_32_bits(se->conn.want_ext);
- int rc;
// Apply the first 32 bits of capable_ext to capable
se->conn.capable = fuse_lower_32_bits(se->conn.capable_ext);
@@ -2173,14 +2172,8 @@ void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
* se->conn.want_ext
* Userspace might still use conn.want - we need to convert it
*/
- rc = convert_to_conn_want_ext(&se->conn, want_ext_default,
+ convert_to_conn_want_ext(&se->conn, want_ext_default,
want_default);
- if (rc != 0) {
- fuse_reply_err(req, EPROTO);
- se->error = -EPROTO;
- fuse_session_exit(se);
- return;
- }
}
if (!want_flags_valid(se->conn.capable_ext, se->conn.want_ext)) {