]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dm cache: add policy name to status output
authorMike Snitzer <snitzer@redhat.com>
Thu, 16 Jan 2014 02:06:55 +0000 (21:06 -0500)
committerMike Snitzer <snitzer@redhat.com>
Thu, 16 Jan 2014 18:44:11 +0000 (13:44 -0500)
The cache's policy may have been established using the "default" alias,
which is currently the "mq" policy but the default policy may change in
the future.  It is useful to know exactly which policy is being used.

Add a 'real' member to the dm_cache_policy_type structure and have the
"default" dm_cache_policy_type point to the real "mq"
dm_cache_policy_type.  Update dm_cache_policy_get_name() to check if
real is set, if so report the name of the real policy (not the alias).

Requested-by: Jonathan Brassow <jbrassow@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Documentation/device-mapper/cache.txt
drivers/md/dm-cache-policy-mq.c
drivers/md/dm-cache-policy.c
drivers/md/dm-cache-policy.h
drivers/md/dm-cache-target.c

index 63fd7cfa4cf1652f39b3d84d639131599302ef69..e6b72d35515123ad0aff423999aeef359183bb3d 100644 (file)
@@ -221,7 +221,7 @@ Status
 <cache block size> <#used cache blocks>/<#total cache blocks>
 <#read hits> <#read misses> <#write hits> <#write misses>
 <#demotions> <#promotions> <#dirty> <#features> <features>*
-<#core args> <core args>* <#policy args> <policy args>*
+<#core args> <core args>* <policy name> <#policy args> <policy args>*
 
 metadata block size     : Fixed block size for each metadata block in
                             sectors
@@ -250,6 +250,7 @@ feature args                 : 'writethrough' (optional)
 #core args              : Number of core arguments (must be even)
 core args               : Key/value pairs for tuning the core
                             e.g. migration_threshold
+policy name             : Name of the policy
 #policy args            : Number of policy arguments to follow (must be even)
 policy args             : Key/value pairs
                             e.g. sequential_threshold
index e63e36cefc89aa3a60dc12f4f96507045180b389..930e8c3d73e985b1e75769a9894f13ffd32d756a 100644 (file)
@@ -1276,7 +1276,8 @@ static struct dm_cache_policy_type default_policy_type = {
        .version = {1, 2, 0},
        .hint_size = 4,
        .owner = THIS_MODULE,
-       .create = mq_create
+       .create = mq_create,
+       .real = &mq_policy_type
 };
 
 static int __init mq_init(void)
index d80057968407ee550627d08bb5d76399df798d78..c1a3cee99b44584f893dcd0835e183a38c949f4e 100644 (file)
@@ -146,6 +146,10 @@ const char *dm_cache_policy_get_name(struct dm_cache_policy *p)
 {
        struct dm_cache_policy_type *t = p->private;
 
+       /* if t->real is set then an alias was used (e.g. "default") */
+       if (t->real)
+               return t->real->name;
+
        return t->name;
 }
 EXPORT_SYMBOL_GPL(dm_cache_policy_get_name);
index 052c00a84a5c63a616b24ed0dd156681c880f0c4..f50fe360c5462928522101c2497ee0ef57542cf0 100644 (file)
@@ -222,6 +222,12 @@ struct dm_cache_policy_type {
        char name[CACHE_POLICY_NAME_SIZE];
        unsigned version[CACHE_POLICY_VERSION_SIZE];
 
+       /*
+        * For use by an alias dm_cache_policy_type to point to the
+        * real dm_cache_policy_type.
+        */
+       struct dm_cache_policy_type *real;
+
        /*
         * Policies may store a hint for each each cache block.
         * Currently the size of this hint must be 0 or 4 bytes but we
index 11ad70540d40600c8bed906fba70f565ccf1ba16..09334c275c79e91c7bf4fd41e18e641b2196073a 100644 (file)
@@ -2832,7 +2832,7 @@ static void cache_resume(struct dm_target *ti)
  * <#demotions> <#promotions> <#dirty>
  * <#features> <features>*
  * <#core args> <core args>
- * <#policy args> <policy args>*
+ * <policy name> <#policy args> <policy args>*
  */
 static void cache_status(struct dm_target *ti, status_type_t type,
                         unsigned status_flags, char *result, unsigned maxlen)
@@ -2900,6 +2900,8 @@ static void cache_status(struct dm_target *ti, status_type_t type,
                }
 
                DMEMIT("2 migration_threshold %llu ", (unsigned long long) cache->migration_threshold);
+
+               DMEMIT("%s ", dm_cache_policy_get_name(cache->policy));
                if (sz < maxlen) {
                        r = policy_emit_config_values(cache->policy, result + sz, maxlen - sz);
                        if (r)