forked from Minki/linux
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). Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/20220420042723.1010598-5-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
c814153c83
commit
db05628435
@ -16,6 +16,7 @@ obj-$(CONFIG_BLK_DEV_BSG_COMMON) += bsg.o
|
||||
obj-$(CONFIG_BLK_DEV_BSGLIB) += bsg-lib.o
|
||||
obj-$(CONFIG_BLK_CGROUP) += blk-cgroup.o
|
||||
obj-$(CONFIG_BLK_CGROUP_RWSTAT) += blk-cgroup-rwstat.o
|
||||
obj-$(CONFIG_BLK_CGROUP_FC_APPID) += blk-cgroup-fc-appid.o
|
||||
obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o
|
||||
obj-$(CONFIG_BLK_CGROUP_IOPRIO) += blk-ioprio.o
|
||||
obj-$(CONFIG_BLK_CGROUP_IOLATENCY) += blk-iolatency.o
|
||||
|
57
block/blk-cgroup-fc-appid.c
Normal file
57
block/blk-cgroup-fc-appid.c
Normal file
@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include "blk-cgroup.h"
|
||||
|
||||
/**
|
||||
* blkcg_set_fc_appid - set the fc_app_id field associted to blkcg
|
||||
* @app_id: application identifier
|
||||
* @cgrp_id: cgroup id
|
||||
* @app_id_len: size of application identifier
|
||||
*/
|
||||
int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len)
|
||||
{
|
||||
struct cgroup *cgrp;
|
||||
struct cgroup_subsys_state *css;
|
||||
struct blkcg *blkcg;
|
||||
int ret = 0;
|
||||
|
||||
if (app_id_len > FC_APPID_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
cgrp = cgroup_get_from_id(cgrp_id);
|
||||
if (!cgrp)
|
||||
return -ENOENT;
|
||||
css = cgroup_get_e_css(cgrp, &io_cgrp_subsys);
|
||||
if (!css) {
|
||||
ret = -ENOENT;
|
||||
goto out_cgrp_put;
|
||||
}
|
||||
blkcg = css_to_blkcg(css);
|
||||
/*
|
||||
* There is a slight race condition on setting the appid.
|
||||
* Worst case an I/O may not find the right id.
|
||||
* This is no different from the I/O we let pass while obtaining
|
||||
* the vmid from the fabric.
|
||||
* Adding the overhead of a lock is not necessary.
|
||||
*/
|
||||
strlcpy(blkcg->fc_app_id, app_id, app_id_len);
|
||||
css_put(css);
|
||||
out_cgrp_put:
|
||||
cgroup_put(cgrp);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blkcg_set_fc_appid);
|
||||
|
||||
/**
|
||||
* blkcg_get_fc_appid - get the fc app identifier associated with a bio
|
||||
* @bio: target bio
|
||||
*
|
||||
* On success return the fc_app_id, on failure return NULL
|
||||
*/
|
||||
char *blkcg_get_fc_appid(struct bio *bio)
|
||||
{
|
||||
if (!bio->bi_blkg || bio->bi_blkg->blkcg->fc_app_id[0] == '\0')
|
||||
return NULL;
|
||||
return bio->bi_blkg->blkcg->fc_app_id;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(blkcg_get_fc_appid);
|
@ -5528,7 +5528,9 @@ static char *lpfc_is_command_vm_io(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct bio *bio = scsi_cmd_to_rq(cmd)->bio;
|
||||
|
||||
return bio ? blkcg_get_fc_appid(bio) : NULL;
|
||||
if (!IS_ENABLED(CONFIG_BLK_CGROUP_FC_APPID) || !bio)
|
||||
return NULL;
|
||||
return blkcg_get_fc_appid(bio);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -218,61 +218,7 @@ static inline struct blkcg *bio_blkcg(struct bio *bio) { return NULL; }
|
||||
|
||||
#endif /* CONFIG_BLK_CGROUP */
|
||||
|
||||
#ifdef CONFIG_BLK_CGROUP_FC_APPID
|
||||
/*
|
||||
* Sets the fc_app_id field associted to blkcg
|
||||
* @app_id: application identifier
|
||||
* @cgrp_id: cgroup id
|
||||
* @app_id_len: size of application identifier
|
||||
*/
|
||||
static inline int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len)
|
||||
{
|
||||
struct cgroup *cgrp;
|
||||
struct cgroup_subsys_state *css;
|
||||
struct blkcg *blkcg;
|
||||
int ret = 0;
|
||||
int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len);
|
||||
char *blkcg_get_fc_appid(struct bio *bio);
|
||||
|
||||
if (app_id_len > FC_APPID_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
cgrp = cgroup_get_from_id(cgrp_id);
|
||||
if (!cgrp)
|
||||
return -ENOENT;
|
||||
css = cgroup_get_e_css(cgrp, &io_cgrp_subsys);
|
||||
if (!css) {
|
||||
ret = -ENOENT;
|
||||
goto out_cgrp_put;
|
||||
}
|
||||
blkcg = css_to_blkcg(css);
|
||||
/*
|
||||
* There is a slight race condition on setting the appid.
|
||||
* Worst case an I/O may not find the right id.
|
||||
* This is no different from the I/O we let pass while obtaining
|
||||
* the vmid from the fabric.
|
||||
* Adding the overhead of a lock is not necessary.
|
||||
*/
|
||||
strlcpy(blkcg->fc_app_id, app_id, app_id_len);
|
||||
css_put(css);
|
||||
out_cgrp_put:
|
||||
cgroup_put(cgrp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* blkcg_get_fc_appid - get the fc app identifier associated with a bio
|
||||
* @bio: target bio
|
||||
*
|
||||
* On success return the fc_app_id, on failure return NULL
|
||||
*/
|
||||
static inline char *blkcg_get_fc_appid(struct bio *bio)
|
||||
{
|
||||
if (bio && bio->bi_blkg &&
|
||||
(bio->bi_blkg->blkcg->fc_app_id[0] != '\0'))
|
||||
return bio->bi_blkg->blkcg->fc_app_id;
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
static inline int blkcg_set_fc_appid(char *buf, u64 id, size_t len) { return -EINVAL; }
|
||||
static inline char *blkcg_get_fc_appid(struct bio *bio) { return NULL; }
|
||||
#endif /*CONFIG_BLK_CGROUP_FC_APPID*/
|
||||
#endif /* _BLK_CGROUP_H */
|
||||
|
Loading…
Reference in New Issue
Block a user