From: Johann Lombardi Date: Wed, 28 Mar 2012 09:41:41 +0000 (+0200) Subject: LU-1264 quota: reserve FID sequences for quota X-Git-Tag: 2.2.52~2 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=6c8adea75d36f0999f3d54cca51d43aed47cabb5 LU-1264 quota: reserve FID sequences for quota This patch reserves 2 FID sequences for quota. Slave indexes will be allocated an unique FID from the FID_SEQ_QUOTA sequence. As for FID_SEQ_QUOTA_GLB, it will be used to uniquely identify the global quota indexes. For the global index, the sequence will thus be set to FID_SEQ_QUOTA_GLB and the 32-bit object ID divided into 3 fields: - 16-bit pool identifier - 8-bit quota type (user or group quota) - 8-bit target type (data or metadata) Thanks to this static FID scheme, slave can enqueue global quota lock directly on the right FID without requiring a first readdir or to change the resource ID on the fly when the lock is granted. As for the slave index FID, it is allocated dynamically from FID_SEQ_QUOTA and is returned to the slave in the quota LVB when the global quota lock is granted. Signed-off-by: Johann Lombardi Change-Id: I27552256cb96bbb88c0eeb3e7e3584d97476c9f1 Reviewed-on: http://review.whamcloud.com/2396 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Niu Yawei Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/lustre/lustre_idl.h b/lustre/include/lustre/lustre_idl.h index 9b7ddc8..e35db0f 100644 --- a/lustre/include/lustre/lustre_idl.h +++ b/lustre/include/lustre/lustre_idl.h @@ -423,6 +423,8 @@ enum fid_seq { FID_SEQ_DOT_LUSTRE = 0x200000002ULL, /* XXX 0x200000003ULL is reserved for FID_SEQ_LLOG_OBJ */ FID_SEQ_SPECIAL = 0x200000004ULL, + FID_SEQ_QUOTA = 0x200000005ULL, + FID_SEQ_QUOTA_GLB = 0x200000006ULL, FID_SEQ_NORMAL = 0x200000400ULL, FID_SEQ_LOV_DEFAULT= 0xffffffffffffffffULL }; diff --git a/lustre/ptlrpc/wiretest.c b/lustre/ptlrpc/wiretest.c index 4715af1..286534f 100644 --- a/lustre/ptlrpc/wiretest.c +++ b/lustre/ptlrpc/wiretest.c @@ -496,6 +496,10 @@ void lustre_assert_wire_constants(void) (long long)FID_SEQ_DOT_LUSTRE); LASSERTF(FID_SEQ_SPECIAL == 0x0000000200000004ULL, "found 0x%.16llxULL\n", (long long)FID_SEQ_SPECIAL); + LASSERTF(FID_SEQ_QUOTA == 0x0000000200000005ULL, "found 0x%.16llxULL\n", + (long long)FID_SEQ_QUOTA); + LASSERTF(FID_SEQ_QUOTA_GLB == 0x0000000200000006ULL, "found 0x%.16llxULL\n", + (long long)FID_SEQ_QUOTA_GLB); LASSERTF(FID_SEQ_NORMAL == 0x0000000200000400ULL, "found 0x%.16llxULL\n", (long long)FID_SEQ_NORMAL); LASSERTF(FID_SEQ_LOV_DEFAULT == 0xffffffffffffffffULL, "found 0x%.16llxULL\n", diff --git a/lustre/utils/wirecheck.c b/lustre/utils/wirecheck.c index f7e8c2c..d82483a 100644 --- a/lustre/utils/wirecheck.c +++ b/lustre/utils/wirecheck.c @@ -223,6 +223,8 @@ check_ost_id(void) CHECK_VALUE_64X(FID_SEQ_LOCAL_FILE); CHECK_VALUE_64X(FID_SEQ_DOT_LUSTRE); CHECK_VALUE_64X(FID_SEQ_SPECIAL); + CHECK_VALUE_64X(FID_SEQ_QUOTA); + CHECK_VALUE_64X(FID_SEQ_QUOTA_GLB); CHECK_VALUE_64X(FID_SEQ_NORMAL); CHECK_VALUE_64X(FID_SEQ_LOV_DEFAULT); diff --git a/lustre/utils/wiretest.c b/lustre/utils/wiretest.c index adef507..d97773f 100644 --- a/lustre/utils/wiretest.c +++ b/lustre/utils/wiretest.c @@ -500,6 +500,12 @@ void lustre_assert_wire_constants(void) (long long)FID_SEQ_LOCAL_FILE); LASSERTF(FID_SEQ_DOT_LUSTRE == 0x0000000200000002ULL, "found 0x%.16llxULL\n", (long long)FID_SEQ_DOT_LUSTRE); + LASSERTF(FID_SEQ_SPECIAL == 0x0000000200000004ULL, "found 0x%.16llxULL\n", + (long long)FID_SEQ_SPECIAL); + LASSERTF(FID_SEQ_QUOTA == 0x0000000200000005ULL, "found 0x%.16llxULL\n", + (long long)FID_SEQ_QUOTA); + LASSERTF(FID_SEQ_QUOTA_GLB == 0x0000000200000006ULL, "found 0x%.16llxULL\n", + (long long)FID_SEQ_QUOTA_GLB); LASSERTF(FID_SEQ_NORMAL == 0x0000000200000400ULL, "found 0x%.16llxULL\n", (long long)FID_SEQ_NORMAL); LASSERTF(FID_SEQ_LOV_DEFAULT == 0xffffffffffffffffULL, "found 0x%.16llxULL\n",