From 720a3b7c3d35988e1b481f86e9562e7855e38e8c Mon Sep 17 00:00:00 2001 From: Ali Masarwa Date: Mon, 29 Jun 2026 14:09:04 +0300 Subject: [PATCH] rgw/posix: reading a detele marker returns -ENOENT Signed-off-by: Ali Masarwa --- src/rgw/driver/posix/rgw_sal_posix.cc | 11 +++++++++-- src/rgw/driver/posix/rgw_sal_posix.h | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/rgw/driver/posix/rgw_sal_posix.cc b/src/rgw/driver/posix/rgw_sal_posix.cc index a7c097f82fe..01ce60f7210 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.cc +++ b/src/rgw/driver/posix/rgw_sal_posix.cc @@ -1540,7 +1540,14 @@ int VersionedDirectory::stat(const DoutPrefixProvider* dpp, bool force) } bufferlist bl; if (rgw::sal::get_attr(attrs, RGW_POSIX_ATTR_VERSION, bl)) { - // cur_version.reset(); + uint16_t flags = 0; + ceph::decode(flags, bl); + if (flags & rgw_bucket_dir_entry::FLAG_DELETE_MARKER) { + ldpp_dout(dpp, 0) << "ERROR: a delete marker, returning ENOENT " + << get_name() << dendl; + cur_version.reset(); + return -ENOENT; + } } } @@ -1683,7 +1690,7 @@ int VersionedDirectory::copy(const DoutPrefixProvider *dpp, optional_yield y, int VersionedDirectory::add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, - std::string& name) + const std::string &name) { // Create as temporary file first int ret = marker->create(dpp, /*existed=*/nullptr, /*temp_file=*/true); diff --git a/src/rgw/driver/posix/rgw_sal_posix.h b/src/rgw/driver/posix/rgw_sal_posix.h index b3caeade70e..b0656eaf2b9 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.h +++ b/src/rgw/driver/posix/rgw_sal_posix.h @@ -337,7 +337,7 @@ public: std::string get_new_instance(); int remove_symlink(const DoutPrefixProvider *dpp, optional_yield y, std::string match = ""); int add_file(const DoutPrefixProvider *dpp, std::unique_ptr&& file, bool* existed = nullptr, bool temp_file = false); - int add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, std::string& name); + int add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, const std::string &name); FSEnt* get_cur_version_ent() { return cur_version.get(); }; int set_cur_version_ent(const DoutPrefixProvider *dpp, FSEnt* file); virtual std::unique_ptr clone_base() override { -- 2.47.3