~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/quota/kqid.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php