ceph: define 'end/complete' in readdir reply as bit flags
Set a flag in readdir request, which indicates that client interprets 'end/complete' as bit flags. So that mds can reply additional flags in readdir reply. Signed-off-by: Yan, Zheng <zyan@redhat.com>
This commit is contained in:
parent
2a5beea3f1
commit
956d39d631
|
@ -365,6 +365,8 @@ more:
|
|||
req->r_readdir_cache_idx = fi->readdir_cache_idx;
|
||||
req->r_readdir_offset = fi->next_offset;
|
||||
req->r_args.readdir.frag = cpu_to_le32(frag);
|
||||
req->r_args.readdir.flags =
|
||||
cpu_to_le16(CEPH_READDIR_REPLY_BITFLAGS);
|
||||
|
||||
req->r_inode = inode;
|
||||
ihold(inode);
|
||||
|
|
|
@ -181,8 +181,11 @@ static int parse_reply_info_dir(void **p, void *end,
|
|||
|
||||
ceph_decode_need(p, end, sizeof(num) + 2, bad);
|
||||
num = ceph_decode_32(p);
|
||||
info->dir_end = ceph_decode_8(p);
|
||||
info->dir_complete = ceph_decode_8(p);
|
||||
{
|
||||
u16 flags = ceph_decode_16(p);
|
||||
info->dir_end = !!(flags & CEPH_READDIR_FRAG_END);
|
||||
info->dir_complete = !!(flags & CEPH_READDIR_FRAG_COMPLETE);
|
||||
}
|
||||
if (num == 0)
|
||||
goto done;
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ struct ceph_mds_reply_info_parsed {
|
|||
struct ceph_mds_reply_dirfrag *dir_dir;
|
||||
size_t dir_buf_size;
|
||||
int dir_nr;
|
||||
u8 dir_complete, dir_end;
|
||||
bool dir_complete, dir_end;
|
||||
struct ceph_mds_reply_dir_entry *dir_entries;
|
||||
};
|
||||
|
||||
|
|
|
@ -347,6 +347,17 @@ extern const char *ceph_mds_op_name(int op);
|
|||
#define CEPH_XATTR_REPLACE (1 << 1)
|
||||
#define CEPH_XATTR_REMOVE (1 << 31)
|
||||
|
||||
/*
|
||||
* readdir request flags;
|
||||
*/
|
||||
#define CEPH_READDIR_REPLY_BITFLAGS (1<<0)
|
||||
|
||||
/*
|
||||
* readdir reply flags.
|
||||
*/
|
||||
#define CEPH_READDIR_FRAG_END (1<<0)
|
||||
#define CEPH_READDIR_FRAG_COMPLETE (1<<8)
|
||||
|
||||
union ceph_mds_request_args {
|
||||
struct {
|
||||
__le32 mask; /* CEPH_CAP_* */
|
||||
|
@ -364,6 +375,7 @@ union ceph_mds_request_args {
|
|||
__le32 frag; /* which dir fragment */
|
||||
__le32 max_entries; /* how many dentries to grab */
|
||||
__le32 max_bytes;
|
||||
__le16 flags;
|
||||
} __attribute__ ((packed)) readdir;
|
||||
struct {
|
||||
__le32 mode;
|
||||
|
|
Loading…
Reference in a new issue