ceph: quota: add initial infrastructure to support cephfs quotas
This patch adds the infrastructure required to support cephfs quotas as it is currently implemented in the ceph fuse client. Cephfs quotas can be set on any directory, and can restrict the number of bytes or the number of files stored beneath that point in the directory hierarchy. Quotas are set using the extended attributes 'ceph.quota.max_files' and 'ceph.quota.max_bytes', and can be removed by setting these attributes to '0'. Link: http://tracker.ceph.com/issues/22372 Signed-off-by: Luis Henriques <lhenriques@suse.com> Reviewed-by: "Yan, Zheng" <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:

committed by
Ilya Dryomov

parent
08a79102aa
commit
fb18a57568
@@ -100,6 +100,26 @@ static int parse_reply_info_in(void **p, void *end,
|
||||
} else
|
||||
info->inline_version = CEPH_INLINE_NONE;
|
||||
|
||||
if (features & CEPH_FEATURE_MDS_QUOTA) {
|
||||
u8 struct_v, struct_compat;
|
||||
u32 struct_len;
|
||||
|
||||
/*
|
||||
* both struct_v and struct_compat are expected to be >= 1
|
||||
*/
|
||||
ceph_decode_8_safe(p, end, struct_v, bad);
|
||||
ceph_decode_8_safe(p, end, struct_compat, bad);
|
||||
if (!struct_v || !struct_compat)
|
||||
goto bad;
|
||||
ceph_decode_32_safe(p, end, struct_len, bad);
|
||||
ceph_decode_need(p, end, struct_len, bad);
|
||||
ceph_decode_64_safe(p, end, info->max_bytes, bad);
|
||||
ceph_decode_64_safe(p, end, info->max_files, bad);
|
||||
} else {
|
||||
info->max_bytes = 0;
|
||||
info->max_files = 0;
|
||||
}
|
||||
|
||||
info->pool_ns_len = 0;
|
||||
info->pool_ns_data = NULL;
|
||||
if (features & CEPH_FEATURE_FS_FILE_LAYOUT_V2) {
|
||||
@@ -4082,6 +4102,9 @@ static void dispatch(struct ceph_connection *con, struct ceph_msg *msg)
|
||||
case CEPH_MSG_CLIENT_LEASE:
|
||||
handle_lease(mdsc, s, msg);
|
||||
break;
|
||||
case CEPH_MSG_CLIENT_QUOTA:
|
||||
ceph_handle_quota(mdsc, s, msg);
|
||||
break;
|
||||
|
||||
default:
|
||||
pr_err("received unknown message type %d %s\n", type,
|
||||
|
Reference in New Issue
Block a user