tree:   https://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-next.git 
current-work
head:   1ac686f6d1b04b480cd245fb927180e1238bd3ac
commit: 1ac686f6d1b04b480cd245fb927180e1238bd3ac [3/3] current-work
config: x86_64-randconfig-x005-201804 (attached as .config)
compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025
reproduce:
        git checkout 1ac686f6d1b04b480cd245fb927180e1238bd3ac
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   include/linux/jiffies.h:105:18: note: in definition of macro 'time_after'
      ((long)((b) - (a)) < 0))
                     ^
   block/blk-wbt.c:463:3: note: in expansion of macro 'time_before'
      time_before(now, rwb->last_comp + HZ / 10);
      ^~~~~~~~~~~
   block/blk-wbt.c: In function 'get_limit':
   block/blk-wbt.c:481:16: error: 'struct rq_wb' has no member named 'wb_max'; 
did you mean 'wb_normal'?
      limit = rwb->wb_max;
                   ^~~~~~
                   wb_normal
   block/blk-wbt.c: In function 'wbt_wait':
   block/blk-wbt.c:587:28: error: 'struct rq_wb' has no member named 
'last_issue'; did you mean 'sync_issue'?
       wb_timestamp(rwb, &rwb->last_issue);
                               ^~~~~~~~~~
                               sync_issue
   block/blk-wbt.c:593:29: error: 'struct rq_wb' has no member named 'cb'
     if (!blk_stat_is_active(rwb->cb))
                                ^~
   block/blk-wbt.c: In function 'wbt_set_queue_depth':
   block/blk-wbt.c:634:8: error: 'struct rq_wb' has no member named 
'queue_depth'; did you mean 'rq_depth'?
      rwb->queue_depth = depth;
           ^~~~~~~~~~~
           rq_depth
   block/blk-wbt.c: In function 'wbt_set_write_cache':
   block/blk-wbt.c:642:6: error: 'struct rq_wb' has no member named 'wc'
      rwb->wc = write_cache_on;
         ^~
   block/blk-wbt.c: In function 'wbt_init':
   block/blk-wbt.c:704:5: error: 'struct rq_wb' has no member named 'cb'
     rwb->cb = blk_stat_alloc_callback(wb_timer_fn, wbt_data_dir, 2, rwb);
        ^~
   block/blk-wbt.c:705:10: error: 'struct rq_wb' has no member named 'cb'
     if (!rwb->cb) {
             ^~
   block/blk-wbt.c:713:5: error: 'struct rq_wb' has no member named 'last_comp'
     rwb->last_comp = rwb->last_issue = jiffies;
        ^~
   block/blk-wbt.c:713:24: error: 'struct rq_wb' has no member named 
'last_issue'; did you mean 'sync_issue'?
     rwb->last_comp = rwb->last_issue = jiffies;
                           ^~~~~~~~~~
                           sync_issue
   block/blk-wbt.c:715:5: error: 'struct rq_wb' has no member named 'win_nsec'
     rwb->win_nsec = RWB_WINDOW_NSEC;
        ^~
   block/blk-wbt.c:723:30: error: 'struct rq_wb' has no member named 'cb'
     blk_stat_add_callback(q, rwb->cb);
                                 ^~
   block/blk-wbt.c:725:5: error: 'struct rq_wb' has no member named 
'min_lat_nsec'
     rwb->min_lat_nsec = wbt_default_latency_nsec(q);
        ^~
   block/blk-wbt.c: In function 'blk_qos_exit':
   block/blk-wbt.c:743:12: error: 'struct request_queue' has no member named 
'rwb'; did you mean 'rq_wb'?
     while (q->rwb) {
               ^~~
               rq_wb
   block/blk-wbt.c:744:26: error: 'struct request_queue' has no member named 
'rq_rwb'; did you mean 'rq_wb'?
      struct rq_wb *rwb = q->rq_rwb;
                             ^~~~~~
                             rq_wb
   block/blk-wbt.c:745:17: error: 'struct rq_wb' has no member named 'next'
      q->rq_wb = rwb->next;
                    ^~
   block/blk-wbt.c:746:34: error: 'struct rq_wb' has no member named 'cb'
      blk_stat_remove_callback(q, rwb->cb);
                                     ^~
   block/blk-wbt.c:747:29: error: 'struct rq_wb' has no member named 'cb'
      blk_stat_free_callback(rwb->cb);
                                ^~
   block/blk-wbt.c: In function 'blkg_to_qg':
   block/blk-wbt.c:783:9: error: implicit declaration of function 'pd_to_tg'; 
did you mean 'pd_to_qg'? [-Werror=implicit-function-declaration]
     return pd_to_tg(blkg_to_pd(blkg, &blkcg_policy_qos));
            ^~~~~~~~
            pd_to_qg
   block/blk-wbt.c:783:9: warning: return makes pointer from integer without a 
cast [-Wint-conversion]
     return pd_to_tg(blkg_to_pd(blkg, &blkcg_policy_qos));
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/blk-wbt.c: In function 'check_scale_change':
   block/blk-wbt.c:853:14: error: passing argument 1 of 'scale_down' from 
incompatible pointer type [-Werror=incompatible-pointer-types]
      scale_down(&qg->rq_wait, false);
                 ^
   block/blk-wbt.c:334:13: note: expected 'struct rq_depth *' but argument is 
of type 'struct rq_wait *'
    static void scale_down(struct rq_depth *rqd, bool hard_throttle)
                ^~~~~~~~~~
   block/blk-wbt.c:855:12: error: passing argument 1 of 'scale_up' from 
incompatible pointer type [-Werror=incompatible-pointer-types]
      scale_up(&qg->rq_wait);
               ^
   block/blk-wbt.c:312:13: note: expected 'struct rq_depth *' but argument is 
of type 'struct rq_wait *'
    static void scale_up(struct rq_depth *rqd)
                ^~~~~~~~
   block/blk-wbt.c:835:15: warning: unused variable 'scale_lat' 
[-Wunused-variable]
     unsigned int scale_lat = READ_ONCE(blkcg_qos->scale_lat);
                  ^~~~~~~~~
   block/blk-wbt.c: In function 'blkcg_qos_throttle':
   block/blk-wbt.c:866:32: error: 'struct rq_qos' has no member named 'q'
     struct request_queue *q = rqos->q;
                                   ^~
   block/blk-wbt.c:871:32: error: 'struct blkcg_gq' has no member named 'css'
     bio_associate_blkcg(bio, &blkg->css);
                                   ^~
>> block/blk-wbt.c:876:10: error: implicit declaration of function 
>> 'blkg_lookup_create'; did you mean 'blk_lookup_devt'? 
>> [-Werror=implicit-function-declaration]
      blkg = blkg_lookup_create(blkcg, q);
             ^~~~~~~~~~~~~~~~~~
             blk_lookup_devt
>> block/blk-wbt.c:876:8: warning: assignment makes pointer from integer 
>> without a cast [-Wint-conversion]
      blkg = blkg_lookup_create(blkcg, q);
           ^
   block/blk-wbt.c:865:18: warning: unused variable 'rqw' [-Wunused-variable]
     struct rq_wait *rqw;
                     ^~~
   block/blk-wbt.c: At top level:
   block/blk-wbt.c:907:14: error: initialization from incompatible pointer type 
[-Werror=incompatible-pointer-types]
     .throttle = blkcg_qos_throttle,
                 ^~~~~~~~~~~~~~~~~~
   block/blk-wbt.c:907:14: note: (near initialization for 
'blkcg_qos_ops.throttle')
   block/blk-wbt.c:908:14: error: initialization from incompatible pointer type 
[-Werror=incompatible-pointer-types]
     .complete = blkcg_qos_complete,
                 ^~~~~~~~~~~~~~~~~~
   block/blk-wbt.c:908:14: note: (near initialization for 
'blkcg_qos_ops.complete')
   block/blk-wbt.c: In function 'blkcg_qos_init':
   block/blk-wbt.c:920:7: error: 'rwb' undeclared (first use in this function); 
did you mean 'rmb'?
     if (!rwb)
          ^~~
          rmb
   block/blk-wbt.c:924:6: error: 'struct rq_qos' has no member named 'cb'
     rqos->cb = blk_stat_alloc_callback(qos_timer_fn, wbt_data_dir, 2,
         ^~
   block/blk-wbt.c:924:37: error: 'qos_timer_fn' undeclared (first use in this 
function); did you mean 'wb_timer_fn'?
     rqos->cb = blk_stat_alloc_callback(qos_timer_fn, wbt_data_dir, 2,
                                        ^~~~~~~~~~~~
                                        wb_timer_fn
   block/blk-wbt.c:926:11: error: 'struct rq_qos' has no member named 'cb'
     if (!rqos->cb) {
              ^~
   block/blk-wbt.c:932:31: error: 'struct rq_qos' has no member named 'cb'
     blk_stat_add_callback(q, rqos->cb);
                                  ^~
   block/blk-wbt.c:915:6: warning: unused variable 'i' [-Wunused-variable]
     int i;
         ^
   block/blk-wbt.c: In function 'qos_set_limit':
   block/blk-wbt.c:964:24: error: implicit declaration of function 
'css_to_blkcg'; did you mean 'qg_to_blkg'? 
[-Werror=implicit-function-declaration]
     struct blkcg *blkcg = css_to_blkcg(of_css(of));
                           ^~~~~~~~~~~~
                           qg_to_blkg
   block/blk-wbt.c:964:24: warning: initialization makes pointer from integer 
without a cast [-Wint-conversion]
   block/blk-wbt.c:967:23: error: storage size of 'ctx' isn't known
     struct blkg_conf_ctx ctx;
                          ^~~
   block/blk-wbt.c:974:2: error: 'ret' undeclared (first use in this function); 
did you mean 'net'?
     ret = blkg_conf_prep(blkcg, &blkcg_policy_qos, buf, &ctx);
     ^~~
     net
   block/blk-wbt.c:974:8: error: implicit declaration of function 
'blkg_conf_prep'; did you mean 'blkg_to_pd'? 
[-Werror=implicit-function-declaration]
     ret = blkg_conf_prep(blkcg, &blkcg_policy_qos, buf, &ctx);
           ^~~~~~~~~~~~~~
           blkg_to_pd
   block/blk-wbt.c:991:2: error: 'tg' undeclared (first use in this function); 
did you mean 'qg'?
     tg->set_min_lat_nsec = val;
     ^~
     qg
   block/blk-wbt.c:995:2: error: expected ';' before 'while'
     while (blkg->parent) {
     ^~~~~
   block/blk-wbt.c:1002:2: error: implicit declaration of function 
'blkg_for_each_descendant_pre'; did you mean 'css_for_each_descendant_pre'? 
[-Werror=implicit-function-declaration]
     blkg_for_each_descendant_pre(blkg, pos_css, ctx.blkg) {
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
     css_for_each_descendant_pre
   block/blk-wbt.c:1002:56: error: expected ';' before '{' token
     blkg_for_each_descendant_pre(blkg, pos_css, ctx.blkg) {
                                                           ^
   block/blk-wbt.c:1008:2: error: implicit declaration of function 
'blkg_conf_finish'; did you mean 'blk_qos_init'? 
[-Werror=implicit-function-declaration]
     blkg_conf_finish(&ctx);
     ^~~~~~~~~~~~~~~~
     blk_qos_init
   block/blk-wbt.c:967:23: warning: unused variable 'ctx' [-Wunused-variable]
     struct blkg_conf_ctx ctx;
                          ^~~
   block/blk-wbt.c: In function 'qg_prfill_limit':
   block/blk-wbt.c:1016:22: error: implicit declaration of function 
'blkg_dev_name'; did you mean 'bio_devname'? 
[-Werror=implicit-function-declaration]
     const char *dname = blkg_dev_name(pd->blkg);
                         ^~~~~~~~~~~~~
                         bio_devname
   block/blk-wbt.c:1016:38: error: 'struct blkg_policy_data' has no member 
named 'blkg'
     const char *dname = blkg_dev_name(pd->blkg);
                                         ^~
   block/blk-wbt.c: In function 'qg_print_limit':
   block/blk-wbt.c:1027:2: error: implicit declaration of function 
'blkcg_print_blkgs'; did you mean 'blkcg_root_css'? 
[-Werror=implicit-function-declaration]
     blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), qg_prfill_limit,
     ^~~~~~~~~~~~~~~~~
     blkcg_root_css
   block/blk-wbt.c: In function 'qos_pd_init':
>> block/blk-wbt.c:1049:49: error: 'struct blkcg_gq' has no member named 'q'
     qg->rq_depth.queue_depth = blk_queue_depth(blkg->q);
                                                    ^~
   In file included from include/linux/bitops.h:38:0,
                    from include/linux/kernel.h:11,
                    from block/blk-wbt.c:21:
   block/blk-wbt.c:1050:45: error: 'q' undeclared (first use in this function); 
did you mean 'qg'?
     qg->rq_depth.wc = test_bit(QUEUE_FLAG_WC, &q->queue_flags);
                                                ^
   arch/x86/include/asm/bitops.h:351:30: note: in definition of macro 'test_bit'
      ? constant_test_bit((nr), (addr)) \
                                 ^~~~
   block/blk-wbt.c:1052:13: error: 'struct blkcg_gq' has no member named 
'parent'
     while (blkg->parent) {
                ^~
   block/blk-wbt.c:1053:44: error: 'struct blkcg_gq' has no member named 
'parent'
      struct qos_grp *this_qg = blkg_to_qg(blkg->parent);
                                               ^~
   block/blk-wbt.c:1055:14: error: 'struct blkcg_gq' has no member named 
'parent'
      blkg = blkg->parent;
                 ^~
   block/blk-wbt.c: In function 'qos_pd_offline':
   block/blk-wbt.c:1068:2: error: 'ag' undeclared (first use in this function); 
did you mean 'qg'?
     ag->set_min_lat_nsec = 0;
     ^~
     qg
   block/blk-wbt.c:1071:13: error: 'struct blkcg_gq' has no member named 
'parent'
     while (blkg->parent) {
                ^~
   block/blk-wbt.c:1072:44: error: 'struct blkcg_gq' has no member named 
'parent'
      struct qos_grp *this_qg = blkg_to_qg(blkg->parent);
                                               ^~
   block/blk-wbt.c:1074:14: error: 'struct blkcg_gq' has no member named 
'parent'
      blkg = blkg->parent;
                 ^~
   block/blk-wbt.c:1077:62: error: expected ';' before '{' token
     blkg_for_each_descendant_pre(blkg, pos_css, qg_to_blkg(qg)) {
                                                                 ^
   block/blk-wbt.c: At top level:
   block/blk-wbt.c:1093:15: error: 'qos_print_limit' undeclared here (not in a 
function); did you mean 'qg_print_limit'?
      .seq_show = qos_print_limit,
                  ^~~~~~~~~~~~~~~
                  qg_print_limit
   block/blk-wbt.c:1100:3: error: 'struct blkcg_policy' has no member named 
'dfl_cftypes'
     .dfl_cftypes = qos_files,
      ^~~~~~~~~~~
   block/blk-wbt.c:1100:17: warning: excess elements in struct initializer
     .dfl_cftypes = qos_files,
                    ^~~~~~~~~
   block/blk-wbt.c:1100:17: note: (near initialization for 'blkcg_policy_qos')
   block/blk-wbt.c:1101:3: error: 'struct blkcg_policy' has no member named 
'pd_alloc_fn'
     .pd_alloc_fn = pos_pd_alloc,
      ^~~~~~~~~~~
   block/blk-wbt.c:1101:17: error: 'pos_pd_alloc' undeclared here (not in a 
function); did you mean 'qos_pd_alloc'?
     .pd_alloc_fn = pos_pd_alloc,
                    ^~~~~~~~~~~~
                    qos_pd_alloc
   block/blk-wbt.c:1101:17: warning: excess elements in struct initializer
   block/blk-wbt.c:1101:17: note: (near initialization for 'blkcg_policy_qos')
   block/blk-wbt.c:1102:3: error: 'struct blkcg_policy' has no member named 
'pd_init_fn'
     .pd_init_fn = qos_pd_init,
      ^~~~~~~~~~
   block/blk-wbt.c:1102:16: warning: excess elements in struct initializer
     .pd_init_fn = qos_pd_init,
                   ^~~~~~~~~~~
   block/blk-wbt.c:1102:16: note: (near initialization for 'blkcg_policy_qos')
   block/blk-wbt.c:1103:3: error: 'struct blkcg_policy' has no member named 
'pd_offline_fn'
     .pd_offline_fn = qos_pd_offline,
      ^~~~~~~~~~~~~
   block/blk-wbt.c:1103:19: warning: excess elements in struct initializer
     .pd_offline_fn = qos_pd_offline,
                      ^~~~~~~~~~~~~~
   block/blk-wbt.c:1103:19: note: (near initialization for 'blkcg_policy_qos')
   block/blk-wbt.c:1104:3: error: 'struct blkcg_policy' has no member named 
'pd_free_fn'
     .pd_free_fn = qos_pd_free,
      ^~~~~~~~~~
   block/blk-wbt.c:1104:16: warning: excess elements in struct initializer
     .pd_free_fn = qos_pd_free,
                   ^~~~~~~~~~~
   block/blk-wbt.c:1104:16: note: (near initialization for 'blkcg_policy_qos')
   block/blk-wbt.c: In function 'close_io':
   block/blk-wbt.c:464:1: warning: control reaches end of non-void function 
[-Wreturn-type]
    }
    ^
   block/blk-wbt.c: In function 'blk_qos_exit':
   block/blk-wbt.c:750:1: warning: control reaches end of non-void function 
[-Wreturn-type]
    }
    ^
   At top level:
   block/blk-wbt.c:1032:33: warning: 'qos_pd_alloc' defined but not used 
[-Wunused-function]
    static struct blkg_policy_data *qos_pd_alloc(gfp_t gfp, int node)
                                    ^~~~~~~~~~~~
   block/blk-wbt.c:1025:12: warning: 'qg_print_limit' defined but not used 
[-Wunused-function]
    static int qg_print_limit(struct seq_file *sf, void *v)
               ^~~~~~~~~~~~~~
   block/blk-wbt.c:906:26: warning: 'blkcg_qos_ops' defined but not used 
[-Wunused-variable]
    static struct rq_qos_ops blkcg_qos_ops = {
                             ^~~~~~~~~~~~~
   In file included from include/linux/blkdev.h:21:0,
                    from include/linux/backing-dev.h:15,
                    from block/blk-wbt.c:24:

vim +876 block/blk-wbt.c

   857  
   858  static enum wbt_flags blkcg_qos_throttle(struct rq_qos *rqos, struct 
bio *bio,
   859                                           spinlock_t *lock)
   860  {
   861          struct blkcg_qos *blkcg_qos = BLKCG_QOS(rqos);
   862          struct blkcg *blkcg;
   863          struct blkcg_gq *blkg;
   864          struct qos_grp *qg;
   865          struct rq_wait *rqw;
 > 866          struct request_queue *q = rqos->q;
   867          bool throttle = false;
   868  
   869          rcu_read_lock();
   870          blkcg = bio_blkcg(bio);
 > 871          bio_associate_blkcg(bio, &blkg->css);
   872          blkg = blkg_lookup(blkcg, q);
   873          if (unlikely(!blkg)) {
   874                  if (!lock)
   875                          spin_lock_irq(q->queue_lock);
 > 876                  blkg = blkg_lookup_create(blkcg, q);
   877                  if (IS_ERR(blkg))
   878                          blkg = NULL;
   879                  if (!lock)
   880                          spin_unlock_irq(q->queue_lock);
   881          }
   882          if (!blkg)
   883                  goto out;
   884  
   885          qg = blkg_to_qg(blkg);
   886          check_scale_change(blkcg_qos, qg);
   887          if (!atomic_inc_below(&qg->rq_wait.inflight,
   888                                qg->rq_depth.max_depth)) {
   889                  blkg_get(blkg);
   890                  throttle = true;
   891          }
   892  out:
   893          rcu_read_unlock();
   894          if (throttle) {
   895                  __blkcg_qos_throttle(rqos, qg, lock);
   896                  blkg_put(blkg);
   897          }
   898          return 0;
   899  }
   900  
   901  static void blkcg_qos_complete(struct rq_qos *rqos,
   902                                 struct blk_issue_stat *stat)
   903  {
   904  }
   905  
   906  static struct rq_qos_ops blkcg_qos_ops = {
   907          .throttle = blkcg_qos_throttle,
   908          .complete = blkcg_qos_complete,
   909  };
   910  
   911  static int blkcg_qos_init(struct request_queue *q)
   912  {
   913          struct blkcg_qos *blkcg_qos;
   914          struct rq_qos *rqos;
   915          int i;
   916  
   917          BUILD_BUG_ON(WBT_NR_BITS > BLK_STAT_RES_BITS);
   918  
   919          blkcg_qos = kzalloc(sizeof(*blkcg_qos), GFP_KERNEL);
   920          if (!rwb)
   921                  return -ENOMEM;
   922  
   923          rqos = &blkcg_qos->rqos;
   924          rqos->cb = blk_stat_alloc_callback(qos_timer_fn, wbt_data_dir, 
2,
   925                                             blkcg_qos);
   926          if (!rqos->cb) {
   927                  kfree(blkcg_qos);
   928                  return -ENOMEM;
   929          }
   930  
   931          rq_qos_add(q, rqos);
   932          blk_stat_add_callback(q, rqos->cb);
   933          atomic_set(&blkcg_qos->scale_cookie, DEFAULT_SCALE_COOKIE);
   934          blkcg_qos->scale_lat = 0;
   935  #if 0
   936          for (i = 0; i < WBT_NUM_RWQ; i++) {
   937                  atomic_set(&rwb->rq_wait[i].inflight, 0);
   938                  init_waitqueue_head(&rwb->rq_wait[i].wait);
   939          }
   940  
   941          rwb->enable_state = WBT_STATE_ON_DEFAULT;
   942          wbt_update_limits(rwb);
   943  
   944          /*
   945           * Assign rwb and add the stats callback.
   946           */
   947          if (q->rq_wb)
   948                  q->rq_wb->next = rwb;
   949          else (q->rq_wb)
   950                  q->rq_wb = rwb;
   951          blk_stat_add_callback(q, rwb->cb);
   952  
   953          rwb->min_lat_nsec = wbt_default_latency_nsec(q);
   954  
   955          wbt_set_queue_depth(rwb, blk_queue_depth(q));
   956          wbt_set_write_cache(rwb, test_bit(QUEUE_FLAG_WC, 
&q->queue_flags));
   957  #endif
   958          return 0;
   959  }
   960  
   961  static ssize_t qos_set_limit(struct kernfs_open_file *of, char *buf,
   962                               size_t nbytes, loff_t off)
   963  {
   964          struct blkcg *blkcg = css_to_blkcg(of_css(of));
   965          struct blkcg_gq *blkg;
   966          struct cgroup_subsys_state *pos_css;
   967          struct blkg_conf_ctx ctx;
   968          struct qos_grp *qg;
   969          char tok[29];   /* latency=18446744073709551616 */
   970          char *p;
   971          u64 val;
   972          int len;
   973  
   974          ret = blkg_conf_prep(blkcg, &blkcg_policy_qos, buf, &ctx);
   975          if (ret)
   976                  return ret;
   977  
   978          qg = blkg_to_qg(ctx.blkg);
   979          if (sscanf(ctx.body,"%28s%n", tok, &len) != 1)
   980                  goto out;
   981          if (tok[0] == '\0')
   982                  goto out;
   983  
   984          ret = -EINVAL;
   985          p = tok;
   986          strsep(&p, "=");
   987          if (!p || sscanf(p, "%llu", &val) != 1)
   988                  goto out;
   989          if (strcmp(tok, "latency"))
   990                  goto out;
   991          tg->set_min_lat_nsec = val;
   992  
   993          /* Walk up the tree to see if our new val is lower than it 
should be. */
   994          blkg = ctx.blkg
   995          while (blkg->parent) {
   996                  struct qos_grp *this_qg = blk_to_cg(blkg->parent);
   997                  val = max(val, this_qg->set_min_lat_nsec);
   998                  blkg = blkg->parent;
   999          }
  1000          tg->rq_depth.min_lat_nsec = val;
  1001  
  1002          blkg_for_each_descendant_pre(blkg, pos_css, ctx.blkg) {
  1003                  struct qos_grp *this_qg = blkg_to_qg(blkg);
  1004                  this_qg->rq.depth.min_lat_nsec = max(val, 
this_qg->rq_depth.min_lat_nsec);
  1005          }
  1006          ret = 0;
  1007  out:
  1008          blkg_conf_finish(&ctx);
  1009          return ret ?: nbytes;
  1010  }
  1011  
  1012  static u64 qg_prfill_limit(struct seq_file *sf, struct blkg_policy_data 
*pd,
  1013                             int off)
  1014  {
  1015          struct qos_grp *qg = pd_to_qg(pd);
> 1016          const char *dname = blkg_dev_name(pd->blkg);
  1017  
  1018          if (!dname)
  1019                  return 0;
  1020          seq_printf(sf, "%s latency=%llu\n",
  1021                     dname, (unsigned long long)qg->set_min_lat_nsec);
  1022          return 0;
  1023  }
  1024  
  1025  static int qg_print_limit(struct seq_file *sf, void *v)
  1026  {
  1027          blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), 
qg_prfill_limit,
  1028                            &blkcg_policy_qos, seq_cft(sf)->private, 
false);
  1029          return 0;
  1030  }
  1031  
  1032  static struct blkg_policy_data *qos_pd_alloc(gfp_t gfp, int node)
  1033  {
  1034          struct qos_grp *qg;
  1035  
  1036          qg = kzalloc_node(sizeof(*qg), gfp, node);
  1037          if (!qg)
  1038                  return NULL;
  1039          return &qg->pd;
  1040  }
  1041  
  1042  static void qos_pd_init(struct blkg_policy_data *pd)
  1043  {
  1044          struct qos_grp *qg = pd_to_qg(pd);
  1045          struct blkcg_gq *blkg = qg_to_blkg(qg);
  1046          u64 val = 0;
  1047  
  1048          rq_wait_init(&qg->rq_wait);
> 1049          qg->rq_depth.queue_depth = blk_queue_depth(blkg->q);
  1050          qg->rq_depth.wc = test_bit(QUEUE_FLAG_WC, &q->queue_flags);
  1051  
  1052          while (blkg->parent) {
  1053                  struct qos_grp *this_qg = blkg_to_qg(blkg->parent);
  1054                  val = max(val, this_qg->set_min_lat_nsec);
  1055                  blkg = blkg->parent;
  1056          }
  1057          qg->set_min_lat_nsec = 0;
  1058          qg->rq_depth.min_lat_nsec = val;
  1059  }
  1060  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to