Whamcloud - gitweb
LU-1264 quota: reserve FID sequences for quota
authorJohann Lombardi <johann@whamcloud.com>
Wed, 28 Mar 2012 09:41:41 +0000 (11:41 +0200)
committerOleg Drokin <green@whamcloud.com>
Mon, 7 May 2012 19:39:29 +0000 (15:39 -0400)
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 <johann@whamcloud.com>
Change-Id: I27552256cb96bbb88c0eeb3e7e3584d97476c9f1
Reviewed-on: http://review.whamcloud.com/2396
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/lustre/lustre_idl.h
lustre/ptlrpc/wiretest.c
lustre/utils/wirecheck.c
lustre/utils/wiretest.c

index 9b7ddc8..e35db0f 100644 (file)
@@ -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
 };
index 4715af1..286534f 100644 (file)
@@ -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",
index f7e8c2c..d82483a 100644 (file)
@@ -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);
 
index adef507..d97773f 100644 (file)
@@ -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",