From: Colin Patrick McCabe Date: Fri, 8 Apr 2011 22:52:40 +0000 (-0700) Subject: ceph_fuse_ll_main: restructure error handling X-Git-Tag: v0.27~116 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1cb4aae45a6aeeb7e7a797b098e2878daa7ccef7;p=ceph.git ceph_fuse_ll_main: restructure error handling Signed-off-by: Colin McCabe --- diff --git a/src/client/fuse_ll.cc b/src/client/fuse_ll.cc index 189d02422f02..4a5251ce9f8c 100644 --- a/src/client/fuse_ll.cc +++ b/src/client/fuse_ll.cc @@ -518,34 +518,49 @@ int ceph_fuse_ll_main(Client *c, int argc, const char *argv[], int fd) // go go gadget fuse struct fuse_args args = FUSE_ARGS_INIT(newargc, (char**)newargv); - struct fuse_chan *ch; - char *mountpoint; - int err = -1; + struct fuse_chan *ch = NULL; + struct fuse_session *se = NULL; + char *mountpoint = NULL; + int ret = 0; - if (fuse_parse_cmdline(&args, &mountpoint, NULL, NULL) != -1 && - (ch = fuse_mount(mountpoint, &args)) != NULL) { - struct fuse_session *se; + if (fuse_parse_cmdline(&args, &mountpoint, NULL, NULL) == -1) { + derr << "fuse_parse_cmdline failed." << dendl; + ret = EINVAL; + goto done; + } + + ch = fuse_mount(mountpoint, &args); + if (!ch) { + derr << "fuse_mount(mountpoint=" << mountpoint << ") failed." << dendl; + ret = EIO; + goto done; + } + + se = fuse_lowlevel_new(&args, &ceph_ll_oper, sizeof(ceph_ll_oper), NULL); + if (!se) { + derr << "fuse_lowlevel_new failed" << dendl; + ret = EDOM; + goto done; + } - // init fuse - se = fuse_lowlevel_new(&args, &ceph_ll_oper, sizeof(ceph_ll_oper), - NULL); - if (se != NULL) { - if (fuse_set_signal_handlers(se) != -1) { - fuse_session_add_chan(se, ch); - err = fuse_session_loop(se); - fuse_remove_signal_handlers(se); - fuse_session_remove_chan(ch); - } - fuse_session_destroy(se); - } - fuse_unmount(mountpoint, ch); - err = 0; - } else { - err = -errno; + if (fuse_set_signal_handlers(se) == -1) { + derr << "fuse_set_signal_handlers failed" << dendl; + ret = ENOSYS; + goto done; } + + fuse_session_add_chan(se, ch); + ret = fuse_session_loop(se); + fuse_remove_signal_handlers(se); + fuse_session_remove_chan(ch); + +done: + if (se) + fuse_session_destroy(se); + if (ch) + fuse_unmount(mountpoint, ch); fuse_opt_free_args(&args); - //cout << "ceph_fuse_ll_main done, err=" << err << std::endl; - return err; + return ret; }