struct bfq_group *bfqq_group(struct bfq_queue *bfqq);
 
 #define bfq_log_bfqq(bfqd, bfqq, fmt, args...) do {                    \
-       blk_add_trace_msg((bfqd)->queue, "bfq%d%c %s " fmt, (bfqq)->pid,\
-                       bfq_bfqq_sync((bfqq)) ? 'S' : 'A',              \
-                       bfqq_group(bfqq)->blkg_path, ##args);           \
+       blk_add_cgroup_trace_msg((bfqd)->queue,                         \
+                       bfqg_to_blkg(bfqq_group(bfqq))->blkcg,          \
+                       "bfq%d%c " fmt, (bfqq)->pid,                    \
+                       bfq_bfqq_sync((bfqq)) ? 'S' : 'A', ##args);     \
 } while (0)
 
-#define bfq_log_bfqg(bfqd, bfqg, fmt, args...) \
-       blk_add_trace_msg((bfqd)->queue, "%s " fmt, (bfqg)->blkg_path, ##args)
+#define bfq_log_bfqg(bfqd, bfqg, fmt, args...) do {                    \
+       blk_add_cgroup_trace_msg((bfqd)->queue,                         \
+               bfqg_to_blkg(bfqg)->blkcg, fmt, ##args);                \
+} while (0)
 
 #else /* CONFIG_BFQ_GROUP_IOSCHED */
 
 
        if (likely(!blk_trace_note_message_enabled(__td->queue)))       \
                break;                                                  \
        if ((__tg)) {                                                   \
-               char __pbuf[128];                                       \
-                                                                       \
-               blkg_path(tg_to_blkg(__tg), __pbuf, sizeof(__pbuf));    \
-               blk_add_trace_msg(__td->queue, "throtl %s " fmt, __pbuf, ##args); \
+               blk_add_cgroup_trace_msg(__td->queue,                   \
+                       tg_to_blkg(__tg)->blkcg, "throtl " fmt, ##args);\
        } else {                                                        \
                blk_add_trace_msg(__td->queue, "throtl " 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%c %s " fmt, (cfqq)->pid, \
+       blk_add_cgroup_trace_msg((cfqd)->queue,                         \
+                       cfqg_to_blkg((cfqq)->cfqg)->blkcg,              \
+                       "cfq%d%c%c " fmt, (cfqq)->pid,                  \
                        cfq_cfqq_sync((cfqq)) ? 'S' : 'A',              \
                        cfqq_type((cfqq)) == SYNC_NOIDLE_WORKLOAD ? 'N' : ' ',\
-                         __pbuf, ##args);                              \
+                         ##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);    \
+       blk_add_cgroup_trace_msg((cfqd)->queue,                         \
+                       cfqg_to_blkg(cfqg)->blkcg, fmt, ##args);        \
 } while (0)
 
 static inline void cfqg_stats_update_io_add(struct cfq_group *cfqg,
 
        atomic_t dropped;
 };
 
+struct blkcg;
+
 extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *);
 extern void blk_trace_shutdown(struct request_queue *);
-extern __printf(2, 3)
-void __trace_note_message(struct blk_trace *, const char *fmt, ...);
+extern __printf(3, 4)
+void __trace_note_message(struct blk_trace *, struct blkcg *blkcg, const char *fmt, ...);
 
 /**
  * blk_add_trace_msg - Add a (simple) message to the blktrace stream
  *     NOTE: Can not use 'static inline' due to presence of var args...
  *
  **/
-#define blk_add_trace_msg(q, fmt, ...)                                 \
+#define blk_add_cgroup_trace_msg(q, cg, fmt, ...)                      \
        do {                                                            \
                struct blk_trace *bt = (q)->blk_trace;                  \
                if (unlikely(bt))                                       \
-                       __trace_note_message(bt, fmt, ##__VA_ARGS__);   \
+                       __trace_note_message(bt, cg, fmt, ##__VA_ARGS__);\
        } while (0)
+#define blk_add_trace_msg(q, fmt, ...)                                 \
+       blk_add_cgroup_trace_msg(q, NULL, fmt, ##__VA_ARGS__)
 #define BLK_TN_MAX_MSG         128
 
 static inline bool blk_trace_note_message_enabled(struct request_queue *q)
 # define blk_trace_startstop(q, start)                 (-ENOTTY)
 # define blk_trace_remove(q)                           (-ENOTTY)
 # define blk_add_trace_msg(q, fmt, ...)                        do { } while (0)
+# define blk_add_cgroup_trace_msg(q, cg, fmt, ...)     do { } while (0)
 # define blk_trace_remove_sysfs(dev)                   do { } while (0)
 # define blk_trace_note_message_enabled(q)             (false)
 static inline int blk_trace_init_sysfs(struct device *dev)
 
        local_irq_restore(flags);
 }
 
-void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)
+void __trace_note_message(struct blk_trace *bt, struct blkcg *blkcg,
+       const char *fmt, ...)
 {
        int n;
        va_list args;
        n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args);
        va_end(args);
 
+       if (!(blk_tracer_flags.val & TRACE_BLK_OPT_CGROUP))
+               blkcg = NULL;
+#ifdef CONFIG_BLK_CGROUP
+       trace_note(bt, 0, BLK_TN_MESSAGE, buf, n,
+               blkcg ? cgroup_get_kernfs_id(blkcg->css.cgroup) : NULL);
+#else
        trace_note(bt, 0, BLK_TN_MESSAGE, buf, n, NULL);
+#endif
        local_irq_restore(flags);
 }
 EXPORT_SYMBOL_GPL(__trace_note_message);
                return PTR_ERR(msg);
 
        bt = filp->private_data;
-       __trace_note_message(bt, "%s", msg);
+       __trace_note_message(bt, NULL, "%s", msg);
        kfree(msg);
 
        return count;