[LU-16077] Cannot use tbf to filter brw request per effective uid/gid, inode attr ids is used instead Created: 05/Aug/22 Updated: 27/Sep/23 Resolved: 31/Aug/23 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | Lustre 2.16.0 |
| Type: | Bug | Priority: | Major |
| Reporter: | Etienne Aujames | Assignee: | Etienne Aujames |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||
| Epic/Theme: | OSC, QoS-TBF | ||||||||
| Severity: | 3 | ||||||||
| Rank (Obsolete): | 9223372036854775807 | ||||||||
| Description |
|
Recently, we had to limit a user on an OST of products (lot of libs in it). But we were not able to do that with TBF. After some tries, we were able to set a limit, but with the GID's owner. The TBF rules on an OST get the uid/gid values from: static int ost_tbf_id_cli_set(struct ptlrpc_request *req, struct tbf_id *id) struct ost_body *body; ... id->ti_uid = body->oa.o_uid; id->ti_gid = body->oa.o_gid; These values are filled by the osc here: int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, struct list_head *ext_list, int cmd) .... crattr->cra_oa = oa; cl_req_attr_set(env, osc2cl(obj), crattr); static int osc_brw_prep_request(int cmd, struct client_obd *cli, struct obdo *oa, u32 page_count, struct brw_page **pga, struct ptlrpc_request **reqp, int resend) ..... lustre_set_wire_obdo(&req->rq_import->imp_connect_data, &body->oa, oa); /* For READ and WRITE, we can't fill o_uid and o_gid using from_kuid() * and from_kgid(), because they are asynchronous. Fortunately, variable * oa contains valid o_uid and o_gid in these two operations. * Besides, filling o_uid and o_gid is enough for nrs-tbf, see LU-9658. * OBD_MD_FLUID and OBD_MD_FLUID is not set in order to avoid breaking * other process logic */ body->oa.o_uid = oa->o_uid; body->oa.o_gid = oa->o_gid; So the uid/gid use to filter the request came directly from the inode attr. |
| Comments |
| Comment by Etienne Aujames [ 05/Aug/22 ] |
|
I think this issue can be fixed the same way that for jobid: int vvp_io_init(const struct lu_env *env, struct cl_object *obj, struct cl_io *io) .... if (io->ci_type == CIT_READ || io->ci_type == CIT_WRITE) { size_t count; struct ll_inode_info *lli = ll_i2info(inode); count = io->u.ci_rw.crw_count; /* "If nbyte is 0, read() will return 0 and have no other * results." -- Single Unix Spec */ if (count == 0) result = 1; else vio->vui_tot_count = count; /* for read/write, we store the jobid in the inode, and * it'll be fetched by osc when building RPC. * * it's not accurate if the file is shared by different * jobs. */ lustre_get_jobid(lli->lli_jobid, sizeof(lli->lli_jobid)); static void vvp_req_attr_set(const struct lu_env *env, struct cl_object *obj, struct cl_req_attr *attr) .... memcpy(attr->cra_jobid, ll_i2info(inode)->lli_jobid, sizeof(attr->cra_jobid)); int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, struct list_head *ext_list, int cmd) .... lustre_msg_set_jobid(req->rq_reqmsg, crattr->cra_jobid); |
| Comment by Gerrit Updater [ 12/Aug/22 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/48213 |
| Comment by Gerrit Updater [ 16/Aug/22 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/48235 |
| Comment by Gerrit Updater [ 18/Apr/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/48235/ |
| Comment by Peter Jones [ 18/Apr/23 ] |
|
Landed for 2.16 |
| Comment by Andreas Dilger [ 24/Apr/23 ] |
|
I noticed a couple of issues with the patch after it landed that need to be fixed before 2.16 is released. Comments on the patch. |
| Comment by Gerrit Updater [ 24/May/23 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/51122 |
| Comment by Gerrit Updater [ 03/Jul/23 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/51536 |
| Comment by Gerrit Updater [ 03/Jul/23 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/51537 |
| Comment by Gerrit Updater [ 31/Aug/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/51122/ |