History

blk-cgroup: move blkcg_{get,set}_fc_appid out of line

No need to have these helpers inline. Also remove the stubs and just use an IS_ENABLED for the get side (the set side already is only built conditionlly).

Christoph Hellwig committed 4 years ago

Commit db056281 parent c8141534 files · +63 −57Browse files

Unified · Split

4 files
  1. block/Makefile +1 −0
  2. block/blk-cgroup-fc-appid.c +57 −0
  3. drivers/scsi/lpfc/lpfc_scsi.c +3 −1
  4. include/linux/blk-cgroup.h +2 −56
block/Makefile+1−0
@@ -16,6 +16,7 @@ obj-$(CONFIG_BLK_DEV_BSG_COMMON) += bsg.o · 15 unmodified lines
16obj-$(CONFIG_BLK_DEV_BSGLIB) += bsg-lib.o16obj-$(CONFIG_BLK_DEV_BSGLIB) += bsg-lib.o
17obj-$(CONFIG_BLK_CGROUP) += blk-cgroup.o17obj-$(CONFIG_BLK_CGROUP) += blk-cgroup.o
18obj-$(CONFIG_BLK_CGROUP_RWSTAT) += blk-cgroup-rwstat.o18obj-$(CONFIG_BLK_CGROUP_RWSTAT) += blk-cgroup-rwstat.o
19obj-$(CONFIG_BLK_CGROUP_FC_APPID) += blk-cgroup-fc-appid.o
19obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o20obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o
20obj-$(CONFIG_BLK_CGROUP_IOPRIO) += blk-ioprio.o21obj-$(CONFIG_BLK_CGROUP_IOPRIO) += blk-ioprio.o
21obj-$(CONFIG_BLK_CGROUP_IOLATENCY) += blk-iolatency.o22obj-$(CONFIG_BLK_CGROUP_IOLATENCY) += blk-iolatency.o
block/blk-cgroup-fc-appid.c+57−0
@@ -0,0 +1,57 @@
1// SPDX-License-Identifier: GPL-2.0
2
3#include "blk-cgroup.h"
4
5/**
6 * blkcg_set_fc_appid - set the fc_app_id field associted to blkcg
7 * @app_id: application identifier
8 * @cgrp_id: cgroup id
9 * @app_id_len: size of application identifier
10 */
11int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len)
12{
13 struct cgroup *cgrp;
14 struct cgroup_subsys_state *css;
15 struct blkcg *blkcg;
16 int ret = 0;
17
18 if (app_id_len > FC_APPID_LEN)
19 return -EINVAL;
20
21 cgrp = cgroup_get_from_id(cgrp_id);
22 if (!cgrp)
23 return -ENOENT;
24 css = cgroup_get_e_css(cgrp, &io_cgrp_subsys);
25 if (!css) {
26 ret = -ENOENT;
27 goto out_cgrp_put;
28 }
29 blkcg = css_to_blkcg(css);
30 /*
31 * There is a slight race condition on setting the appid.
32 * Worst case an I/O may not find the right id.
33 * This is no different from the I/O we let pass while obtaining
34 * the vmid from the fabric.
35 * Adding the overhead of a lock is not necessary.
36 */
37 strlcpy(blkcg->fc_app_id, app_id, app_id_len);
38 css_put(css);
39out_cgrp_put:
40 cgroup_put(cgrp);
41 return ret;
42}
43EXPORT_SYMBOL_GPL(blkcg_set_fc_appid);
44
45/**
46 * blkcg_get_fc_appid - get the fc app identifier associated with a bio
47 * @bio: target bio
48 *
49 * On success return the fc_app_id, on failure return NULL
50 */
51char *blkcg_get_fc_appid(struct bio *bio)
52{
53 if (!bio->bi_blkg || bio->bi_blkg->blkcg->fc_app_id[0] == '\0')
54 return NULL;
55 return bio->bi_blkg->blkcg->fc_app_id;
56}
57EXPORT_SYMBOL_GPL(blkcg_get_fc_appid);
drivers/scsi/lpfc/lpfc_scsi.c+3−1
@@ -5528,7 +5528,9 @@ static char *lpfc_is_command_vm_io(struct scsi_cmnd *cmd) · 5527 unmodified lines
5528{5528{
5529 struct bio *bio = scsi_cmd_to_rq(cmd)->bio;5529 struct bio *bio = scsi_cmd_to_rq(cmd)->bio;
5530 5530
5531 return bio ? blkcg_get_fc_appid(bio) : NULL;5531 if (!IS_ENABLED(CONFIG_BLK_CGROUP_FC_APPID) || !bio)
5532 return NULL;
5533 return blkcg_get_fc_appid(bio);
5532}5534}
5533 5535
5534/**5536/**
include/linux/blk-cgroup.h+2−56
@@ -218,61 +218,7 @@ static inline struct blkcg *bio_blkcg(struct bio *bio) { return NULL; } · 217 unmodified lines
218 218
219#endif /* CONFIG_BLK_CGROUP */219#endif /* CONFIG_BLK_CGROUP */
220 220
221#ifdef CONFIG_BLK_CGROUP_FC_APPID221int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len);
222/*222char *blkcg_get_fc_appid(struct bio *bio);
223 * Sets the fc_app_id field associted to blkcg
224 * @app_id: application identifier
225 * @cgrp_id: cgroup id
226 * @app_id_len: size of application identifier
227 */
228static inline int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len)
229{
230 struct cgroup *cgrp;
231 struct cgroup_subsys_state *css;
232 struct blkcg *blkcg;
233 int ret = 0;
234
235 if (app_id_len > FC_APPID_LEN)
236 return -EINVAL;
237
238 cgrp = cgroup_get_from_id(cgrp_id);
239 if (!cgrp)
240 return -ENOENT;
241 css = cgroup_get_e_css(cgrp, &io_cgrp_subsys);
242 if (!css) {
243 ret = -ENOENT;
244 goto out_cgrp_put;
245 }
246 blkcg = css_to_blkcg(css);
247 /*
248 * There is a slight race condition on setting the appid.
249 * Worst case an I/O may not find the right id.
250 * This is no different from the I/O we let pass while obtaining
251 * the vmid from the fabric.
252 * Adding the overhead of a lock is not necessary.
253 */
254 strlcpy(blkcg->fc_app_id, app_id, app_id_len);
255 css_put(css);
256out_cgrp_put:
257 cgroup_put(cgrp);
258 return ret;
259}
260 223
261/**
262 * blkcg_get_fc_appid - get the fc app identifier associated with a bio
263 * @bio: target bio
264 *
265 * On success return the fc_app_id, on failure return NULL
266 */
267static inline char *blkcg_get_fc_appid(struct bio *bio)
268{
269 if (bio && bio->bi_blkg &&
270 (bio->bi_blkg->blkcg->fc_app_id[0] != '\0'))
271 return bio->bi_blkg->blkcg->fc_app_id;
272 return NULL;
273}
274#else
275static inline int blkcg_set_fc_appid(char *buf, u64 id, size_t len) { return -EINVAL; }
276static inline char *blkcg_get_fc_appid(struct bio *bio) { return NULL; }
277#endif /*CONFIG_BLK_CGROUP_FC_APPID*/
278#endif /* _BLK_CGROUP_H */224#endif /* _BLK_CGROUP_H */