diff --git a/src/include/rados/rgw_file.h b/src/include/rados/rgw_file.h index dfa1ede18c93fa..7a2c44e702f32d 100644 --- a/src/include/rados/rgw_file.h +++ b/src/include/rados/rgw_file.h @@ -27,7 +27,7 @@ extern "C" { #define LIBRGW_FILE_VER_MAJOR 1 #define LIBRGW_FILE_VER_MINOR 1 -#define LIBRGW_FILE_VER_EXTRA 1 +#define LIBRGW_FILE_VER_EXTRA 2 #define LIBRGW_FILE_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra) #define LIBRGW_FILE_VERSION_CODE LIBRGW_FILE_VERSION(LIBRGW_FILE_VER_MAJOR, LIBRGW_FILE_VER_MINOR, LIBRGW_FILE_VER_EXTRA) @@ -91,6 +91,7 @@ void rgwfile_version(int *major, int *minor, int *extra); */ #define RGW_LOOKUP_FLAG_NONE 0x0000 #define RGW_LOOKUP_FLAG_CREATE 0x0001 +#define RGW_LOOKUP_FLAG_RCB 0x0002 int rgw_lookup(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh, const char *path, diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 1803109ddedb8f..9d5e9f4ab6f8d8 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -1388,7 +1388,11 @@ int rgw_lookup(struct rgw_fs *rgw_fs, return -ENOENT; } } else { - fhr = fs->stat_leaf(parent, path, RGWFileHandle::FLAG_NONE); + /* lookup in a readdir callback */ + uint32_t sl_flags = (flags & RGW_LOOKUP_FLAG_RCB) + ? RGWFileHandle::FLAG_NONE + : RGWFileHandle::FLAG_EXACT_MATCH; + fhr = fs->stat_leaf(parent, path, sl_flags); if (! get<0>(fhr)) { if (! (flags & RGW_LOOKUP_FLAG_CREATE)) return -ENOENT;