From fe66fcd9ee99dda8c9078bc5787f1c3db66c4346 Mon Sep 17 00:00:00 2001 From: wanwencong Date: Fri, 24 Jun 2022 23:54:52 +0800 Subject: [PATCH] rbd-fuse: librados will filter out -r option from command-line The -r option will be filtered out by librados when exec cmd "rbd-fuse /mountpoint -p pool_name -r rbd_name" other rbds can be seen under the mount point Fixes: https://tracker.ceph.com/issues/56387 Signed-off-by: wanwencong (cherry picked from commit e99d64bc8a5c3bbb8a3632f211d4f56751cf499e) --- src/rbd_fuse/rbd-fuse.cc | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/rbd_fuse/rbd-fuse.cc b/src/rbd_fuse/rbd-fuse.cc index 6d6db311929c5..12e30ceb04c61 100644 --- a/src/rbd_fuse/rbd-fuse.cc +++ b/src/rbd_fuse/rbd-fuse.cc @@ -912,20 +912,25 @@ connect_to_cluster(rados_t *pcluster) return 0; } +#define OPT_NOT_FOUND -1 + int main(int argc, const char *argv[]) { memset(&rbd_image_data, 0, sizeof(rbd_image_data)); - // librados will filter out -f/-d options from command-line - std::map filter_args = { - {"-f", false}, - {"-d", false}}; + // librados will filter out -r/-f/-d options from command-line + std::map filter_options = { + {"-r", OPT_NOT_FOUND}, + {"-f", OPT_NOT_FOUND}, + {"-d", OPT_NOT_FOUND}}; + + std::set require_arg_options = {"-r"}; std::vector arg_vector; for (auto idx = 0; idx < argc; ++idx) { - auto it = filter_args.find(argv[idx]); - if (it != filter_args.end()) { - it->second = true; + auto it = filter_options.find(argv[idx]); + if (it != filter_options.end()) { + it->second = idx; } arg_vector.push_back(argv[idx]); } @@ -941,9 +946,13 @@ int main(int argc, const char *argv[]) exit(1); } - for (auto& it : filter_args) { - if (it.second) { + for (auto& it : filter_options) { + if (it.second != OPT_NOT_FOUND) { arg_vector.push_back(it.first.c_str()); + if (require_arg_options.count(it.first) && + it.second + 1 < argc) { + arg_vector.push_back(argv[it.second + 1]); + } } } -- 2.39.5