add preliminary 3.14 support
[openwrt.git] / target / linux / generic / patches-3.14 / 501-yaffs-3.5-convert-to-use-kuid_t-kgid_t.patch
1 --- a/fs/yaffs2/yaffs_vfs.c
2 +++ b/fs/yaffs2/yaffs_vfs.c
3 @@ -329,6 +329,33 @@ static int yaffs_readpage(struct file *f
4         return ret;
5  }
6  
7 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0))
8 +#define YCRED_FSUID()  from_kuid(&init_user_ns, current_fsuid())
9 +#define YCRED_FSGID()  from_kgid(&init_user_ns, current_fsgid())
10 +#else
11 +#define YCRED_FSUID()  YCRED(current)->fsuid
12 +#define YCRED_FSGID()  YCRED(current)->fsgid
13 +
14 +static inline uid_t i_uid_read(const struct inode *inode)
15 +{
16 +       return inode->i_uid;
17 +}
18 +
19 +static inline gid_t i_gid_read(const struct inode *inode)
20 +{
21 +       return inode->i_gid;
22 +}
23 +
24 +static inline void i_uid_write(struct inode *inode, uid_t uid)
25 +{
26 +       inode->i_uid = uid;
27 +}
28 +
29 +static inline void i_gid_write(struct inode *inode, gid_t gid)
30 +{
31 +       inode->i_gid = gid;
32 +}
33 +#endif
34  
35  static void yaffs_set_super_dirty_val(struct yaffs_dev *dev, int val)
36  {
37 @@ -1225,9 +1252,9 @@ static int yaffs_mknod(struct inode *dir
38         struct yaffs_obj *parent = yaffs_inode_to_obj(dir);
39  
40         int error = -ENOSPC;
41 -       uid_t uid = YCRED(current)->fsuid;
42 +       uid_t uid = YCRED_FSUID();
43         gid_t gid =
44 -           (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
45 +           (dir->i_mode & S_ISGID) ? i_gid_read(dir) : YCRED_FSGID();
46  
47         if ((dir->i_mode & S_ISGID) && S_ISDIR(mode))
48                 mode |= S_ISGID;
49 @@ -1424,9 +1451,9 @@ static int yaffs_symlink(struct inode *d
50  {
51         struct yaffs_obj *obj;
52         struct yaffs_dev *dev;
53 -       uid_t uid = YCRED(current)->fsuid;
54 +       uid_t uid = YCRED_FSUID();
55         gid_t gid =
56 -           (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
57 +           (dir->i_mode & S_ISGID) ? i_gid_read(dir) : YCRED_FSGID();
58  
59         yaffs_trace(YAFFS_TRACE_OS, "yaffs_symlink");
60  
61 @@ -1829,8 +1856,8 @@ static void yaffs_fill_inode_from_obj(st
62  
63                 inode->i_ino = obj->obj_id;
64                 inode->i_mode = obj->yst_mode;
65 -               inode->i_uid = obj->yst_uid;
66 -               inode->i_gid = obj->yst_gid;
67 +               i_uid_write(inode, obj->yst_uid);
68 +               i_gid_write(inode, obj->yst_gid);
69  #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
70                 inode->i_blksize = inode->i_sb->s_blocksize;
71  #endif
72 @@ -1856,7 +1883,7 @@ static void yaffs_fill_inode_from_obj(st
73  
74                 yaffs_trace(YAFFS_TRACE_OS,
75                         "yaffs_fill_inode mode %x uid %d gid %d size %lld count %d",
76 -                       inode->i_mode, inode->i_uid, inode->i_gid,
77 +                       inode->i_mode, i_uid_read(inode), i_gid_read(inode),
78                         inode->i_size, atomic_read(&inode->i_count));
79  
80                 switch (obj->yst_mode & S_IFMT) {
81 --- a/fs/yaffs2/yaffs_attribs.c
82 +++ b/fs/yaffs2/yaffs_attribs.c
83 @@ -14,6 +14,48 @@
84  #include "yaffs_guts.h"
85  #include "yaffs_attribs.h"
86  
87 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0))
88 +static inline uid_t ia_uid_read(const struct iattr *iattr)
89 +{
90 +       return from_kuid(&init_user_ns, iattr->ia_uid);
91 +}
92 +
93 +static inline gid_t ia_gid_read(const struct iattr *iattr)
94 +{
95 +       return from_kgid(&init_user_ns, iattr->ia_gid);
96 +}
97 +
98 +static inline void ia_uid_write(struct iattr *iattr, uid_t uid)
99 +{
100 +       iattr->ia_uid = make_kuid(&init_user_ns, uid);
101 +}
102 +
103 +static inline void ia_gid_write(struct iattr *iattr, gid_t gid)
104 +{
105 +       iattr->ia_gid = make_kgid(&init_user_ns, gid);
106 +}
107 +#else
108 +static inline uid_t ia_uid_read(const struct iattr *iattr)
109 +{
110 +       return iattr->ia_uid;
111 +}
112 +
113 +static inline gid_t ia_gid_read(const struct iattr *inode)
114 +{
115 +       return iattr->ia_gid;
116 +}
117 +
118 +static inline void ia_uid_write(struct iattr *iattr, uid_t uid)
119 +{
120 +       iattr->ia_uid = uid;
121 +}
122 +
123 +static inline void ia_gid_write(struct iattr *iattr, gid_t gid)
124 +{
125 +       iattr->ia_gid = gid;
126 +}
127 +#endif
128 +
129  void yaffs_load_attribs(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
130  {
131         obj->yst_uid = oh->yst_uid;
132 @@ -77,9 +119,9 @@ int yaffs_set_attribs(struct yaffs_obj *
133         if (valid & ATTR_MODE)
134                 obj->yst_mode = attr->ia_mode;
135         if (valid & ATTR_UID)
136 -               obj->yst_uid = attr->ia_uid;
137 +               obj->yst_uid =  ia_uid_read(attr);
138         if (valid & ATTR_GID)
139 -               obj->yst_gid = attr->ia_gid;
140 +               obj->yst_gid =  ia_gid_read(attr);
141  
142         if (valid & ATTR_ATIME)
143                 obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
144 @@ -103,9 +145,9 @@ int yaffs_get_attribs(struct yaffs_obj *
145  
146         attr->ia_mode = obj->yst_mode;
147         valid |= ATTR_MODE;
148 -       attr->ia_uid = obj->yst_uid;
149 +       ia_uid_write(attr, obj->yst_uid);
150         valid |= ATTR_UID;
151 -       attr->ia_gid = obj->yst_gid;
152 +       ia_gid_write(attr, obj->yst_gid);
153         valid |= ATTR_GID;
154  
155         Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;