[josef-btrfs:current-work 3/3] block/blk-wbt.c:1014:33: error: 'struct blkcg' has no member named 'css'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/josef/btrfs-next.git current-work
head:   8e6eb5db8cf85a5af945098166954454c3169b29
commit: 8e6eb5db8cf85a5af945098166954454c3169b29 [3/3] current-work
config: x86_64-randconfig-s0-02160955 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        git checkout 8e6eb5db8cf85a5af945098166954454c3169b29
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   In file included from include/linux/blkdev.h:21:0,
                    from include/linux/backing-dev.h:15,
                    from block/blk-wbt.c:24:
   include/linux/bio.h:521:55: warning: 'struct blkcg_gq' declared inside parameter list will not be visible outside of this definition or declaration
    static int bio_associate_blkg(struct bio *bio, struct blkcg_gq *blkg) { return 0; }
                                                          ^~~~~~~~
   block/blk-wbt.c: In function 'blkcg_qos_throttle':
>> block/blk-wbt.c:1014:33: error: 'struct blkcg' has no member named 'css'
     bio_associate_blkcg(bio, &blkcg->css);
                                    ^~
>> block/blk-wbt.c:1019:10: error: implicit declaration of function 'blkg_lookup_create' [-Werror=implicit-function-declaration]
      blkg = blkg_lookup_create(blkcg, q);
             ^~~~~~~~~~~~~~~~~~
   block/blk-wbt.c:1019:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
      blkg = blkg_lookup_create(blkcg, q);
           ^
>> block/blk-wbt.c:1028:26: error: passing argument 2 of 'bio_associate_blkg' from incompatible pointer type [-Werror=incompatible-pointer-types]
     bio_associate_blkg(bio, blkg);
                             ^~~~
   In file included from include/linux/blkdev.h:21:0,
                    from include/linux/backing-dev.h:15,
                    from block/blk-wbt.c:24:
   include/linux/bio.h:521:12: note: expected 'struct blkcg_gq *' but argument is of type 'struct blkcg_gq *'
    static int bio_associate_blkg(struct bio *bio, struct blkcg_gq *blkg) { return 0; }
               ^~~~~~~~~~~~~~~~~~
>> block/blk-wbt.c:1039:26: error: 'struct bio' has no member named 'bi_issue_stat'
      blk_stat_set_issue(&bio->bi_issue_stat, bio_sectors(bio));
                             ^~
   block/blk-wbt.c: In function 'blkcg_qos_done_bio':
>> block/blk-wbt.c:1114:12: error: 'struct bio' has no member named 'bi_blkg'; did you mean 'bi_flags'?
     blkg = bio->bi_blkg;
               ^~
   block/blk-wbt.c:1124:26: error: 'struct bio' has no member named 'bi_issue_stat'
     qos_record_time(qg, &bio->bi_issue_stat, now);
                             ^~
   block/blk-wbt.c: In function 'qos_set_min_lat_nsec':
>> block/blk-wbt.c:1180:13: error: 'struct blkcg_gq' has no member named 'parent'
     while (blkg->parent) {
                ^~
   block/blk-wbt.c:1181:44: error: 'struct blkcg_gq' has no member named 'parent'
      struct qos_grp *this_qg = blkg_to_qg(blkg->parent);
                                               ^~
   block/blk-wbt.c:1183:14: error: 'struct blkcg_gq' has no member named 'parent'
      blkg = blkg->parent;
                 ^~
   block/blk-wbt.c: In function 'qos_set_limit':
>> block/blk-wbt.c:1195:24: error: implicit declaration of function 'css_to_blkcg' [-Werror=implicit-function-declaration]
     struct blkcg *blkcg = css_to_blkcg(of_css(of));
                           ^~~~~~~~~~~~
   block/blk-wbt.c:1195:24: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
>> block/blk-wbt.c:1199:23: error: storage size of 'ctx' isn't known
     struct blkg_conf_ctx ctx;
                          ^~~
>> block/blk-wbt.c:1206:8: error: implicit declaration of function 'blkg_conf_prep' [-Werror=implicit-function-declaration]
     ret = blkg_conf_prep(blkcg, &blkcg_policy_qos, buf, &ctx);
           ^~~~~~~~~~~~~~
>> block/blk-wbt.c:1230:2: error: implicit declaration of function 'blkg_for_each_descendant_pre' [-Werror=implicit-function-declaration]
     blkg_for_each_descendant_pre(blkg, pos_css, ctx.blkg)
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> block/blk-wbt.c:1231:3: error: expected ';' before 'qos_set_min_lat_nsec'
      qos_set_min_lat_nsec(blkg, 1);
      ^~~~~~~~~~~~~~~~~~~~
>> block/blk-wbt.c:1234:2: error: implicit declaration of function 'blkg_conf_finish' [-Werror=implicit-function-declaration]
     blkg_conf_finish(&ctx);
     ^~~~~~~~~~~~~~~~
   block/blk-wbt.c:1199: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:1242:22: error: implicit declaration of function 'blkg_dev_name' [-Werror=implicit-function-declaration]
     const char *dname = blkg_dev_name(pd->blkg);
                         ^~~~~~~~~~~~~
>> block/blk-wbt.c:1242: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 'qos_print_limit':
>> block/blk-wbt.c:1253:2: error: implicit declaration of function 'blkcg_print_blkgs' [-Werror=implicit-function-declaration]
     blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), qg_prfill_limit,
     ^~~~~~~~~~~~~~~~~
   block/blk-wbt.c: In function 'qos_pd_init':
>> block/blk-wbt.c:1278:41: error: 'struct blkcg_gq' has no member named 'q'
     struct rq_qos *rqos = blkcg_rq_qos(blkg->q);
                                            ^~
   block/blk-wbt.c:1283:49: error: 'struct blkcg_gq' has no member named 'q'
     qg->rq_depth.queue_depth = blk_queue_depth(blkg->q);
                                                    ^~
   block/blk-wbt.c: In function 'qos_pd_offline':
   block/blk-wbt.c:1304:3: error: expected ';' before 'qos_set_min_lat_nsec'
      qos_set_min_lat_nsec(blkg, -1);
      ^~~~~~~~~~~~~~~~~~~~
   block/blk-wbt.c: At top level:
>> block/blk-wbt.c:1326:2: error: unknown field 'dfl_cftypes' specified in initializer
     .dfl_cftypes = qos_files,
     ^
   block/blk-wbt.c:1326:17: warning: excess elements in struct initializer
     .dfl_cftypes = qos_files,
                    ^~~~~~~~~
   block/blk-wbt.c:1326:17: note: (near initialization for 'blkcg_policy_qos')
>> block/blk-wbt.c:1327:2: error: unknown field 'pd_alloc_fn' specified in initializer
     .pd_alloc_fn = qos_pd_alloc,
     ^
   block/blk-wbt.c:1327:17: warning: excess elements in struct initializer
     .pd_alloc_fn = qos_pd_alloc,
                    ^~~~~~~~~~~~
   block/blk-wbt.c:1327:17: note: (near initialization for 'blkcg_policy_qos')
>> block/blk-wbt.c:1328:2: error: unknown field 'pd_init_fn' specified in initializer
     .pd_init_fn = qos_pd_init,
     ^
   block/blk-wbt.c:1328:16: warning: excess elements in struct initializer
     .pd_init_fn = qos_pd_init,
                   ^~~~~~~~~~~
   block/blk-wbt.c:1328:16: note: (near initialization for 'blkcg_policy_qos')
>> block/blk-wbt.c:1329:2: error: unknown field 'pd_offline_fn' specified in initializer
     .pd_offline_fn = qos_pd_offline,
     ^
   block/blk-wbt.c:1329:19: warning: excess elements in struct initializer
     .pd_offline_fn = qos_pd_offline,
                      ^~~~~~~~~~~~~~
   block/blk-wbt.c:1329:19: note: (near initialization for 'blkcg_policy_qos')

vim +1014 block/blk-wbt.c

   998	
   999	static enum wbt_flags blkcg_qos_throttle(struct rq_qos *rqos, struct bio *bio,
  1000						 spinlock_t *lock)
  1001	{
  1002		struct blkcg_qos *blkqos = BLKQOS(rqos);
  1003		struct blkcg *blkcg;
  1004		struct blkcg_gq *blkg;
  1005		struct qos_grp *qg;
  1006		struct request_queue *q = rqos->q;
  1007		bool throttle = false;
  1008	
  1009		if (!blkcg_qos_enabled(blkqos))
  1010			return 0;
  1011	
  1012		rcu_read_lock();
  1013		blkcg = bio_blkcg(bio);
> 1014		bio_associate_blkcg(bio, &blkcg->css);
  1015		blkg = blkg_lookup(blkcg, q);
  1016		if (unlikely(!blkg)) {
  1017			if (!lock)
  1018				spin_lock_irq(q->queue_lock);
> 1019			blkg = blkg_lookup_create(blkcg, q);
  1020			if (IS_ERR(blkg))
  1021				blkg = NULL;
  1022			if (!lock)
  1023				spin_unlock_irq(q->queue_lock);
  1024		}
  1025		if (!blkg)
  1026			goto out;
  1027	
> 1028		bio_associate_blkg(bio, blkg);
  1029		qg = blkg_to_qg(blkg);
  1030		check_scale_change(blkqos, qg);
  1031		if (!atomic_inc_below(&qg->rq_wait.inflight,
  1032				      qg->rq_depth.max_depth))
  1033			throttle = true;
  1034	out:
  1035		rcu_read_unlock();
  1036		if (throttle)
  1037			__blkcg_qos_throttle(rqos, qg, lock);
  1038		if (blkg)
> 1039			blk_stat_set_issue(&bio->bi_issue_stat, bio_sectors(bio));
  1040		return 0;
  1041	}
  1042	
  1043	static void qos_record_time(struct qos_grp *qg, struct blk_issue_stat *stat,
  1044				    u64 now)
  1045	{
  1046		struct blk_rq_stat *rq_stat;
  1047		u64 start = blk_stat_time(stat);
  1048	
  1049		if (now <= start)
  1050			return;
  1051		rq_stat = get_cpu_ptr(qg->stats);
  1052		blk_rq_stat_add(rq_stat, now - start);
  1053		put_cpu_ptr(rq_stat);
  1054	}
  1055	
  1056	#define BLKCG_QOS_MIN_SAMPLES 4
  1057	#define BLKQOS_MIN_ADJUST_TIME (5 * NSEC_PER_MSEC)
  1058	
  1059	static void qos_check_latencies(struct qos_grp *qg, u64 now)
  1060	{
  1061		struct blkcg_qos *blkqos = qg->blkqos;
  1062		struct blk_rq_stat stat;
  1063		unsigned cookie = atomic_read(&blkqos->scale_cookie);
  1064		int cpu;
  1065	
  1066		blk_rq_stat_init(&stat);
  1067		preempt_disable();
  1068		for_each_online_cpu(cpu) {
  1069			struct blk_rq_stat *s;
  1070			s = per_cpu_ptr(qg->stats, cpu);
  1071			blk_rq_stat_sum(&stat, s);
  1072			blk_rq_stat_init(s);
  1073		}
  1074		preempt_enable();
  1075	
  1076		if (stat.nr_samples < BLKCG_QOS_MIN_SAMPLES)
  1077			return;
  1078	
  1079		/* Everything is ok and we don't need to adjust the scale. */
  1080		if (stat.min <= qg->rq_depth.min_lat_nsec &&
  1081		    cookie == DEFAULT_SCALE_COOKIE)
  1082			return;
  1083	
  1084		if (blkqos->last_scale_event >= now)
  1085			return;
  1086	
  1087		if (now - blkqos->last_scale_event < BLKQOS_MIN_ADJUST_TIME)
  1088			return;
  1089	
  1090		spin_lock(&blkqos->scale_lock);
  1091		if (blkqos->last_scale_event >= now ||
  1092		    now - blkqos->last_scale_event < BLKQOS_MIN_ADJUST_TIME)
  1093			goto out;
  1094	
  1095		if (stat.min <= qg->rq_depth.min_lat_nsec) {
  1096			if (blkqos->scale_lat == qg->rq_depth.min_lat_nsec)
  1097				atomic_inc(&qg->scale_cookie);
  1098		} else {
  1099			blkqos->scale_lat = qg->rq_depth.min_lat_nsec;
  1100			smp_mb__before_atomic();
  1101			atomic_dec(&blkqos->scale_cookie);
  1102		}
  1103	out:
  1104		spin_unlock(&blkqos->scale_lock);
  1105	}
  1106	
  1107	static void blkcg_qos_done_bio(struct rq_qos *rqos, struct bio *bio)
  1108	{
  1109		struct blkcg_gq *blkg;
  1110		struct qos_grp *qg;
  1111		u64 window_start;
  1112		u64 now;
  1113	
> 1114		blkg = bio->bi_blkg;
  1115		if (!blkg)
  1116			return;
  1117		qg = blkg_to_qg(blkg);
  1118	
  1119		if (!blkcg_qos_enabled(qg->blkqos))
  1120			return;
  1121	
  1122		/* Record the time for our bio. */
  1123		now = ktime_to_ns(ktime_get());
  1124		qos_record_time(qg, &bio->bi_issue_stat, now);
  1125	
  1126		/*
  1127		 * Now check to see if enough time has elapsed, and if it has check to
  1128		 * see if we've missed our latency targets.
  1129		 */
  1130		window_start = atomic64_read(&qg->window_start);
  1131		if (now > window_start && (now - window_start) >= qg->cur_win_nsec) {
  1132			if (atomic64_cmpxchg(&qg->window_start, window_start, now) ==
  1133			    window_start)
  1134				qos_check_latencies(qg, now);
  1135		}
  1136	}
  1137	
  1138	static struct rq_qos_ops blkcg_qos_ops = {
  1139		.throttle = blkcg_qos_throttle,
  1140		.done_bio = blkcg_qos_done_bio,
  1141	};
  1142	
  1143	int blkcg_qos_init(struct request_queue *q)
  1144	{
  1145		struct blkcg_qos *blkqos;
  1146		struct rq_qos *rqos;
  1147		int ret;
  1148	
  1149		BUILD_BUG_ON(WBT_NR_BITS > BLK_STAT_RES_BITS);
  1150	
  1151		blkqos = kzalloc(sizeof(*blkqos), GFP_KERNEL);
  1152		if (!blkqos)
  1153			return -ENOMEM;
  1154	
  1155		rqos = &blkqos->rqos;
  1156		rqos->id = RQ_QOS_CGROUP;
  1157		rqos->ops = &blkcg_qos_ops;
  1158		rqos->q = q;
  1159	
  1160		rq_qos_add(q, rqos);
  1161		atomic_set(&blkqos->scale_cookie, DEFAULT_SCALE_COOKIE);
  1162		blkqos->scale_lat = 0;
  1163	
  1164		ret = blkcg_activate_policy(q, &blkcg_policy_qos);
  1165		if (ret) {
  1166			kfree(blkqos);
  1167			return ret;
  1168		}
  1169	
  1170		return 0;
  1171	}
  1172	
  1173	static void qos_set_min_lat_nsec(struct blkcg_gq *blkg, int direction)
  1174	{
  1175		struct qos_grp *qg = blkg_to_qg(blkg);
  1176		struct blkcg_qos *blkqos = qg->blkqos;
  1177		u64 val = qg->set_min_lat_nsec;
  1178		u64 oldval = qg->rq_depth.min_lat_nsec;
  1179	
> 1180		while (blkg->parent) {
> 1181			struct qos_grp *this_qg = blkg_to_qg(blkg->parent);
  1182			val = max(val, this_qg->set_min_lat_nsec);
> 1183			blkg = blkg->parent;
  1184		}
  1185		qg->rq_depth.min_lat_nsec = val;
  1186		if (direction > 0 && !oldval && val)
  1187			atomic_inc(&blkqos->enabled);
  1188		if (direction < 0 && oldval && !val)
  1189			atomic_dec(&blkqos->enabled);
  1190	}
  1191	
  1192	static ssize_t qos_set_limit(struct kernfs_open_file *of, char *buf,
  1193				     size_t nbytes, loff_t off)
  1194	{
> 1195		struct blkcg *blkcg = css_to_blkcg(of_css(of));
  1196		struct blkcg_gq *blkg;
  1197		struct cgroup_subsys_state *pos_css;
  1198		struct blkcg_qos *blkqos;
> 1199		struct blkg_conf_ctx ctx;
  1200		struct qos_grp *qg;
  1201		char tok[29];	/* latency=18446744073709551616 */
  1202		char *p;
  1203		u64 val;
  1204		int len, ret;
  1205	
> 1206		ret = blkg_conf_prep(blkcg, &blkcg_policy_qos, buf, &ctx);
  1207		if (ret)
  1208			return ret;
  1209	
  1210		qg = blkg_to_qg(ctx.blkg);
  1211		blkqos = qg->blkqos;
  1212		if (sscanf(ctx.body,"%28s%n", tok, &len) != 1)
  1213			goto out;
  1214		if (tok[0] == '\0')
  1215			goto out;
  1216	
  1217		ret = -EINVAL;
  1218		p = tok;
  1219		strsep(&p, "=");
  1220		if (!p || sscanf(p, "%llu", &val) != 1)
  1221			goto out;
  1222		if (strcmp(tok, "latency"))
  1223			goto out;
  1224		qg->set_min_lat_nsec = val;
  1225	
  1226		/* Walk up the tree to see if our new val is lower than it should be. */
  1227		blkg = ctx.blkg;
  1228		qos_set_min_lat_nsec(blkg, 1);
  1229	
  1230		blkg_for_each_descendant_pre(blkg, pos_css, ctx.blkg)
  1231			qos_set_min_lat_nsec(blkg, 1);
  1232		ret = 0;
  1233	out:
  1234		blkg_conf_finish(&ctx);
  1235		return ret ?: nbytes;
  1236	}
  1237	

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

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux