123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include <linux/fs.h>
- #include <linux/quota.h>
- #include <linux/export.h>
- /**
- * qid_eq - Test to see if to kquid values are the same
- * @left: A qid value
- * @right: Another quid value
- *
- * Return true if the two qid values are equal and false otherwise.
- */
- bool qid_eq(struct kqid left, struct kqid right)
- {
- if (left.type != right.type)
- return false;
- switch(left.type) {
- case USRQUOTA:
- return uid_eq(left.uid, right.uid);
- case GRPQUOTA:
- return gid_eq(left.gid, right.gid);
- case PRJQUOTA:
- return projid_eq(left.projid, right.projid);
- default:
- BUG();
- }
- }
- EXPORT_SYMBOL(qid_eq);
- /**
- * qid_lt - Test to see if one qid value is less than another
- * @left: The possibly lesser qid value
- * @right: The possibly greater qid value
- *
- * Return true if left is less than right and false otherwise.
- */
- bool qid_lt(struct kqid left, struct kqid right)
- {
- if (left.type < right.type)
- return true;
- if (left.type > right.type)
- return false;
- switch (left.type) {
- case USRQUOTA:
- return uid_lt(left.uid, right.uid);
- case GRPQUOTA:
- return gid_lt(left.gid, right.gid);
- case PRJQUOTA:
- return projid_lt(left.projid, right.projid);
- default:
- BUG();
- }
- }
- EXPORT_SYMBOL(qid_lt);
- /**
- * from_kqid - Create a qid from a kqid user-namespace pair.
- * @targ: The user namespace we want a qid in.
- * @kqid: The kernel internal quota identifier to start with.
- *
- * Map @kqid into the user-namespace specified by @targ and
- * return the resulting qid.
- *
- * There is always a mapping into the initial user_namespace.
- *
- * If @kqid has no mapping in @targ (qid_t)-1 is returned.
- */
- qid_t from_kqid(struct user_namespace *targ, struct kqid kqid)
- {
- switch (kqid.type) {
- case USRQUOTA:
- return from_kuid(targ, kqid.uid);
- case GRPQUOTA:
- return from_kgid(targ, kqid.gid);
- case PRJQUOTA:
- return from_kprojid(targ, kqid.projid);
- default:
- BUG();
- }
- }
- EXPORT_SYMBOL(from_kqid);
- /**
- * from_kqid_munged - Create a qid from a kqid user-namespace pair.
- * @targ: The user namespace we want a qid in.
- * @kqid: The kernel internal quota identifier to start with.
- *
- * Map @kqid into the user-namespace specified by @targ and
- * return the resulting qid.
- *
- * There is always a mapping into the initial user_namespace.
- *
- * Unlike from_kqid from_kqid_munged never fails and always
- * returns a valid projid. This makes from_kqid_munged
- * appropriate for use in places where failing to provide
- * a qid_t is not a good option.
- *
- * If @kqid has no mapping in @targ the kqid.type specific
- * overflow identifier is returned.
- */
- qid_t from_kqid_munged(struct user_namespace *targ, struct kqid kqid)
- {
- switch (kqid.type) {
- case USRQUOTA:
- return from_kuid_munged(targ, kqid.uid);
- case GRPQUOTA:
- return from_kgid_munged(targ, kqid.gid);
- case PRJQUOTA:
- return from_kprojid_munged(targ, kqid.projid);
- default:
- BUG();
- }
- }
- EXPORT_SYMBOL(from_kqid_munged);
- /**
- * qid_valid - Report if a valid value is stored in a kqid.
- * @qid: The kernel internal quota identifier to test.
- */
- bool qid_valid(struct kqid qid)
- {
- switch (qid.type) {
- case USRQUOTA:
- return uid_valid(qid.uid);
- case GRPQUOTA:
- return gid_valid(qid.gid);
- case PRJQUOTA:
- return projid_valid(qid.projid);
- default:
- BUG();
- }
- }
- EXPORT_SYMBOL(qid_valid);
|