Branch data Line data Source code
1 : : #include <linux/fs.h>
2 : : #include <linux/quota.h>
3 : : #include <linux/export.h>
4 : :
5 : : /**
6 : : * qid_eq - Test to see if to kquid values are the same
7 : : * @left: A qid value
8 : : * @right: Another quid value
9 : : *
10 : : * Return true if the two qid values are equal and false otherwise.
11 : : */
12 : 0 : bool qid_eq(struct kqid left, struct kqid right)
13 : : {
14 [ # # ]: 0 : if (left.type != right.type)
15 : : return false;
16 [ # # # # ]: 0 : switch(left.type) {
17 : : case USRQUOTA:
18 : 0 : return uid_eq(left.uid, right.uid);
19 : : case GRPQUOTA:
20 : 0 : return gid_eq(left.gid, right.gid);
21 : : case PRJQUOTA:
22 : 0 : return projid_eq(left.projid, right.projid);
23 : : default:
24 : 0 : BUG();
25 : : }
26 : : }
27 : : EXPORT_SYMBOL(qid_eq);
28 : :
29 : : /**
30 : : * qid_lt - Test to see if one qid value is less than another
31 : : * @left: The possibly lesser qid value
32 : : * @right: The possibly greater qid value
33 : : *
34 : : * Return true if left is less than right and false otherwise.
35 : : */
36 : 0 : bool qid_lt(struct kqid left, struct kqid right)
37 : : {
38 [ # # ]: 0 : if (left.type < right.type)
39 : : return true;
40 [ # # ]: 0 : if (left.type > right.type)
41 : : return false;
42 [ # # # # ]: 0 : switch (left.type) {
43 : : case USRQUOTA:
44 : 0 : return uid_lt(left.uid, right.uid);
45 : : case GRPQUOTA:
46 : 0 : return gid_lt(left.gid, right.gid);
47 : : case PRJQUOTA:
48 : 0 : return projid_lt(left.projid, right.projid);
49 : : default:
50 : 0 : BUG();
51 : : }
52 : : }
53 : : EXPORT_SYMBOL(qid_lt);
54 : :
55 : : /**
56 : : * from_kqid - Create a qid from a kqid user-namespace pair.
57 : : * @targ: The user namespace we want a qid in.
58 : : * @kuid: The kernel internal quota identifier to start with.
59 : : *
60 : : * Map @kqid into the user-namespace specified by @targ and
61 : : * return the resulting qid.
62 : : *
63 : : * There is always a mapping into the initial user_namespace.
64 : : *
65 : : * If @kqid has no mapping in @targ (qid_t)-1 is returned.
66 : : */
67 : 0 : qid_t from_kqid(struct user_namespace *targ, struct kqid kqid)
68 : : {
69 [ # # # # ]: 0 : switch (kqid.type) {
70 : : case USRQUOTA:
71 : 0 : return from_kuid(targ, kqid.uid);
72 : : case GRPQUOTA:
73 : 0 : return from_kgid(targ, kqid.gid);
74 : : case PRJQUOTA:
75 : 0 : return from_kprojid(targ, kqid.projid);
76 : : default:
77 : 0 : BUG();
78 : : }
79 : : }
80 : : EXPORT_SYMBOL(from_kqid);
81 : :
82 : : /**
83 : : * from_kqid_munged - Create a qid from a kqid user-namespace pair.
84 : : * @targ: The user namespace we want a qid in.
85 : : * @kqid: The kernel internal quota identifier to start with.
86 : : *
87 : : * Map @kqid into the user-namespace specified by @targ and
88 : : * return the resulting qid.
89 : : *
90 : : * There is always a mapping into the initial user_namespace.
91 : : *
92 : : * Unlike from_kqid from_kqid_munged never fails and always
93 : : * returns a valid projid. This makes from_kqid_munged
94 : : * appropriate for use in places where failing to provide
95 : : * a qid_t is not a good option.
96 : : *
97 : : * If @kqid has no mapping in @targ the kqid.type specific
98 : : * overflow identifier is returned.
99 : : */
100 : 0 : qid_t from_kqid_munged(struct user_namespace *targ, struct kqid kqid)
101 : : {
102 [ # # # # ]: 0 : switch (kqid.type) {
103 : : case USRQUOTA:
104 : 0 : return from_kuid_munged(targ, kqid.uid);
105 : : case GRPQUOTA:
106 : 0 : return from_kgid_munged(targ, kqid.gid);
107 : : case PRJQUOTA:
108 : 0 : return from_kprojid_munged(targ, kqid.projid);
109 : : default:
110 : 0 : BUG();
111 : : }
112 : : }
113 : : EXPORT_SYMBOL(from_kqid_munged);
114 : :
115 : : /**
116 : : * qid_valid - Report if a valid value is stored in a kqid.
117 : : * @qid: The kernel internal quota identifier to test.
118 : : */
119 : 0 : bool qid_valid(struct kqid qid)
120 : : {
121 [ # # # # ]: 0 : switch (qid.type) {
122 : : case USRQUOTA:
123 : 0 : return uid_valid(qid.uid);
124 : : case GRPQUOTA:
125 : 0 : return gid_valid(qid.gid);
126 : : case PRJQUOTA:
127 : 0 : return projid_valid(qid.projid);
128 : : default:
129 : 0 : BUG();
130 : : }
131 : : }
132 : : EXPORT_SYMBOL(qid_valid);
|