blkcg: remove blkio_group->path[]
authorTejun Heo <tj@kernel.org>
Mon, 16 Apr 2012 20:57:23 +0000 (13:57 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 20 Apr 2012 08:06:16 +0000 (10:06 +0200)
blkio_group->path[] stores the path of the associated cgroup and is
used only for debug messages.  Just format the path from blkg->cgroup
when printing debug messages.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-cgroup.c
block/blk-cgroup.h
block/blk-throttle.c
block/cfq-iosched.c

index b1807d4ecedbcd44127d3ae03fc43d34b9b405f5..63337024e4d77434a48969e30132554ca286be12 100644 (file)
@@ -114,7 +114,6 @@ static struct blkio_group *blkg_alloc(struct blkio_cgroup *blkcg,
        INIT_LIST_HEAD(&blkg->q_node);
        blkg->blkcg = blkcg;
        blkg->refcnt = 1;
-       cgroup_path(blkcg->css.cgroup, blkg->path, sizeof(blkg->path));
 
        for (i = 0; i < BLKCG_MAX_POLS; i++) {
                struct blkio_policy_type *pol = blkio_policy[i];
index ef6550a67a69dd363b5a0f17de0a60c87e6d3cff..c524267e4f7f73e7dfc06427a2793c6b61d38b9e 100644 (file)
@@ -77,8 +77,6 @@ struct blkio_group {
        struct list_head q_node;
        struct hlist_node blkcg_node;
        struct blkio_cgroup *blkcg;
-       /* Store cgroup path */
-       char path[128];
        /* reference count */
        int refcnt;
 
@@ -167,9 +165,24 @@ static inline struct blkio_group *pdata_to_blkg(void *pdata)
        return NULL;
 }
 
-static inline char *blkg_path(struct blkio_group *blkg)
+/**
+ * blkg_path - format cgroup path of blkg
+ * @blkg: blkg of interest
+ * @buf: target buffer
+ * @buflen: target buffer length
+ *
+ * Format the path of the cgroup of @blkg into @buf.
+ */
+static inline int blkg_path(struct blkio_group *blkg, char *buf, int buflen)
 {
-       return blkg->path;
+       int ret;
+
+       rcu_read_lock();
+       ret = cgroup_path(blkg->blkcg->css.cgroup, buf, buflen);
+       rcu_read_unlock();
+       if (ret)
+               strncpy(buf, "<unavailable>", buflen);
+       return ret;
 }
 
 /**
index e2aaf27e1f106c950bc8d697cef55037db997469..e9b7a47f6da02d230d9f1b144c753d3f80d1d720 100644 (file)
@@ -155,9 +155,12 @@ static inline int throtl_tg_##name(const struct throtl_grp *tg)            \
 
 THROTL_TG_FNS(on_rr);
 
-#define throtl_log_tg(td, tg, fmt, args...)                            \
-       blk_add_trace_msg((td)->queue, "throtl %s " fmt,                \
-                         blkg_path(tg_to_blkg(tg)), ##args);           \
+#define throtl_log_tg(td, tg, fmt, args...)    do {                    \
+       char __pbuf[128];                                               \
+                                                                       \
+       blkg_path(tg_to_blkg(tg), __pbuf, sizeof(__pbuf));              \
+       blk_add_trace_msg((td)->queue, "throtl %s " fmt, __pbuf, ##args); \
+} while (0)
 
 #define throtl_log(td, fmt, args...)   \
        blk_add_trace_msg((td)->queue, "throtl " fmt, ##args)
index eb07eb64e85bac83cc1fc194314c69e1bee7f4bb..901286b5f5cbc128ae46d27870b1e8d48d053ee6 100644 (file)
@@ -573,14 +573,21 @@ static inline void cfqg_put(struct cfq_group *cfqg)
        return blkg_put(cfqg_to_blkg(cfqg));
 }
 
-#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \
+#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) do {                    \
+       char __pbuf[128];                                               \
+                                                                       \
+       blkg_path(cfqg_to_blkg((cfqq)->cfqg), __pbuf, sizeof(__pbuf));  \
        blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \
-                       cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \
-                       blkg_path(cfqg_to_blkg((cfqq)->cfqg)), ##args)
-
-#define cfq_log_cfqg(cfqd, cfqg, fmt, args...)                         \
-       blk_add_trace_msg((cfqd)->queue, "%s " fmt,                     \
-                       blkg_path(cfqg_to_blkg((cfqg))), ##args)        \
+                         cfq_cfqq_sync((cfqq)) ? 'S' : 'A',            \
+                         __pbuf, ##args);                              \
+} while (0)
+
+#define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {                    \
+       char __pbuf[128];                                               \
+                                                                       \
+       blkg_path(cfqg_to_blkg(cfqg), __pbuf, sizeof(__pbuf));          \
+       blk_add_trace_msg((cfqd)->queue, "%s " fmt, __pbuf, ##args);    \
+} while (0)
 
 static inline void cfqg_stats_update_io_add(struct cfq_group *cfqg,
                                            struct cfq_group *curr_cfqg, int rw)