mirror of
https://github.com/ceph/ceph
synced 2025-02-20 17:37:29 +00:00
Merge pull request #16275 from linuxbox2/wip-rgw-readdir-cookie
rgw_file: permit dirent offset computation Reviewed-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
commit
35bc5f4165
@ -27,7 +27,7 @@ extern "C" {
|
||||
|
||||
#define LIBRGW_FILE_VER_MAJOR 1
|
||||
#define LIBRGW_FILE_VER_MINOR 1
|
||||
#define LIBRGW_FILE_VER_EXTRA 3
|
||||
#define LIBRGW_FILE_VER_EXTRA 4
|
||||
|
||||
#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)
|
||||
@ -217,6 +217,14 @@ int rgw_readdir(struct rgw_fs *rgw_fs,
|
||||
rgw_readdir_cb rcb, void *cb_arg, bool *eof,
|
||||
uint32_t flags);
|
||||
|
||||
/* project offset of dirent name */
|
||||
#define RGW_DIRENT_OFFSET_FLAG_NONE 0x0000
|
||||
|
||||
int rgw_dirent_offset(struct rgw_fs *rgw_fs,
|
||||
struct rgw_file_handle *parent_fh,
|
||||
const char *name, int64_t *offset,
|
||||
uint32_t flags);
|
||||
|
||||
/*
|
||||
get unix attributes for object
|
||||
*/
|
||||
|
@ -1846,6 +1846,22 @@ int rgw_readdir(struct rgw_fs *rgw_fs,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* project offset of dirent name */
|
||||
int rgw_dirent_offset(struct rgw_fs *rgw_fs,
|
||||
struct rgw_file_handle *parent_fh,
|
||||
const char *name, int64_t *offset,
|
||||
uint32_t flags)
|
||||
{
|
||||
RGWFileHandle* parent = get_rgwfh(parent_fh);
|
||||
if ((! parent)) {
|
||||
/* bad parent */
|
||||
return -EINVAL;
|
||||
}
|
||||
std::string sname{name};
|
||||
int rc = parent->offset_of(sname, offset, flags);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
read data from file
|
||||
*/
|
||||
|
@ -505,6 +505,14 @@ namespace rgw {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int offset_of(const std::string& name, int64_t *offset, uint32_t flags) {
|
||||
if (unlikely(! is_dir())) {
|
||||
return -EINVAL;
|
||||
}
|
||||
*offset = XXH64(name.c_str(), name.length(), fh_key::seed);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool is_open() const { return flags & FLAG_OPEN; }
|
||||
bool is_root() const { return flags & FLAG_ROOT; }
|
||||
bool is_bucket() const { return flags & FLAG_BUCKET; }
|
||||
|
Loading…
Reference in New Issue
Block a user