From: Darrick J. Wong <djwong@xxxxxxxxxx> Translate the fuse_main return values into actual mount(8) style error codes instead of returning 0 all the time, and print something to the original stderr if something went wrong so that the user will know what to do next. Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- misc/fuse2fs.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index 52c24715fbc109..4d4eaedfc33e1f 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -4072,6 +4072,7 @@ int main(int argc, char *argv[]) struct fuse_args args = FUSE_ARGS_INIT(argc, argv); struct fuse2fs fctx; errcode_t err; + FILE *orig_stderr = stderr; char *logfile; char extra_args[BUFSIZ]; int ret = 0; @@ -4289,11 +4290,43 @@ int main(int argc, char *argv[]) } pthread_mutex_init(&fctx.bfl, NULL); - fuse_main(args.argc, args.argv, &fs_ops, &fctx); + ret = fuse_main(args.argc, args.argv, &fs_ops, &fctx); pthread_mutex_destroy(&fctx.bfl); - ret = 0; + switch(ret) { + case 0: + /* success */ + ret = 0; + break; + case 1: + case 2: + /* invalid option or no mountpoint */ + ret = 1; + break; + case 3: + case 4: + case 5: + case 6: + case 7: + /* setup or mounting failed */ + ret = 32; + break; + default: + /* fuse started up enough to call op_init */ + ret = 0; + break; + } out: + if (ret & 1) { + fprintf(orig_stderr, "%s\n", + _("Mount failed due to unrecognized options. Check dmesg(1) for details.")); + fflush(orig_stderr); + } + if (ret & 32) { + fprintf(orig_stderr, "%s\n", + _("Mount failed while opening filesystem. Check dmesg(1) for details.")); + fflush(orig_stderr); + } if (global_fs) { err = ext2fs_close(global_fs); if (err)