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

TOMOYO Linux Cross Reference
Linux/fs/libfs.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ 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.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/libfs.c (Version linux-6.12-rc7) and /fs/libfs.c (Version linux-5.17.15)


  1 // SPDX-License-Identifier: GPL-2.0-only            1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*                                                  2 /*
  3  *      fs/libfs.c                                  3  *      fs/libfs.c
  4  *      Library for filesystems writers.            4  *      Library for filesystems writers.
  5  */                                                 5  */
  6                                                     6 
  7 #include <linux/blkdev.h>                           7 #include <linux/blkdev.h>
  8 #include <linux/export.h>                           8 #include <linux/export.h>
  9 #include <linux/pagemap.h>                          9 #include <linux/pagemap.h>
 10 #include <linux/slab.h>                            10 #include <linux/slab.h>
 11 #include <linux/cred.h>                            11 #include <linux/cred.h>
 12 #include <linux/mount.h>                           12 #include <linux/mount.h>
 13 #include <linux/vfs.h>                             13 #include <linux/vfs.h>
 14 #include <linux/quotaops.h>                        14 #include <linux/quotaops.h>
 15 #include <linux/mutex.h>                           15 #include <linux/mutex.h>
 16 #include <linux/namei.h>                           16 #include <linux/namei.h>
 17 #include <linux/exportfs.h>                        17 #include <linux/exportfs.h>
 18 #include <linux/iversion.h>                    << 
 19 #include <linux/writeback.h>                       18 #include <linux/writeback.h>
 20 #include <linux/buffer_head.h> /* sync_mapping     19 #include <linux/buffer_head.h> /* sync_mapping_buffers */
 21 #include <linux/fs_context.h>                      20 #include <linux/fs_context.h>
 22 #include <linux/pseudo_fs.h>                       21 #include <linux/pseudo_fs.h>
 23 #include <linux/fsnotify.h>                        22 #include <linux/fsnotify.h>
 24 #include <linux/unicode.h>                         23 #include <linux/unicode.h>
 25 #include <linux/fscrypt.h>                         24 #include <linux/fscrypt.h>
 26 #include <linux/pidfs.h>                       << 
 27                                                    25 
 28 #include <linux/uaccess.h>                         26 #include <linux/uaccess.h>
 29                                                    27 
 30 #include "internal.h"                              28 #include "internal.h"
 31                                                    29 
 32 int simple_getattr(struct mnt_idmap *idmap, co !!  30 int simple_getattr(struct user_namespace *mnt_userns, const struct path *path,
 33                    struct kstat *stat, u32 req     31                    struct kstat *stat, u32 request_mask,
 34                    unsigned int query_flags)       32                    unsigned int query_flags)
 35 {                                                  33 {
 36         struct inode *inode = d_inode(path->de     34         struct inode *inode = d_inode(path->dentry);
 37         generic_fillattr(&nop_mnt_idmap, reque !!  35         generic_fillattr(&init_user_ns, inode, stat);
 38         stat->blocks = inode->i_mapping->nrpag     36         stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9);
 39         return 0;                                  37         return 0;
 40 }                                                  38 }
 41 EXPORT_SYMBOL(simple_getattr);                     39 EXPORT_SYMBOL(simple_getattr);
 42                                                    40 
 43 int simple_statfs(struct dentry *dentry, struc     41 int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
 44 {                                                  42 {
 45         u64 id = huge_encode_dev(dentry->d_sb- << 
 46                                                << 
 47         buf->f_fsid = u64_to_fsid(id);         << 
 48         buf->f_type = dentry->d_sb->s_magic;       43         buf->f_type = dentry->d_sb->s_magic;
 49         buf->f_bsize = PAGE_SIZE;                  44         buf->f_bsize = PAGE_SIZE;
 50         buf->f_namelen = NAME_MAX;                 45         buf->f_namelen = NAME_MAX;
 51         return 0;                                  46         return 0;
 52 }                                                  47 }
 53 EXPORT_SYMBOL(simple_statfs);                      48 EXPORT_SYMBOL(simple_statfs);
 54                                                    49 
 55 /*                                                 50 /*
 56  * Retaining negative dentries for an in-memor     51  * Retaining negative dentries for an in-memory filesystem just wastes
 57  * memory and lookup time: arrange for them to     52  * memory and lookup time: arrange for them to be deleted immediately.
 58  */                                                53  */
 59 int always_delete_dentry(const struct dentry *     54 int always_delete_dentry(const struct dentry *dentry)
 60 {                                                  55 {
 61         return 1;                                  56         return 1;
 62 }                                                  57 }
 63 EXPORT_SYMBOL(always_delete_dentry);               58 EXPORT_SYMBOL(always_delete_dentry);
 64                                                    59 
 65 const struct dentry_operations simple_dentry_o     60 const struct dentry_operations simple_dentry_operations = {
 66         .d_delete = always_delete_dentry,          61         .d_delete = always_delete_dentry,
 67 };                                                 62 };
 68 EXPORT_SYMBOL(simple_dentry_operations);           63 EXPORT_SYMBOL(simple_dentry_operations);
 69                                                    64 
 70 /*                                                 65 /*
 71  * Lookup the data. This is trivial - if the d     66  * Lookup the data. This is trivial - if the dentry didn't already
 72  * exist, we know it is negative.  Set d_op to     67  * exist, we know it is negative.  Set d_op to delete negative dentries.
 73  */                                                68  */
 74 struct dentry *simple_lookup(struct inode *dir     69 struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
 75 {                                                  70 {
 76         if (dentry->d_name.len > NAME_MAX)         71         if (dentry->d_name.len > NAME_MAX)
 77                 return ERR_PTR(-ENAMETOOLONG);     72                 return ERR_PTR(-ENAMETOOLONG);
 78         if (!dentry->d_sb->s_d_op)                 73         if (!dentry->d_sb->s_d_op)
 79                 d_set_d_op(dentry, &simple_den     74                 d_set_d_op(dentry, &simple_dentry_operations);
 80         d_add(dentry, NULL);                       75         d_add(dentry, NULL);
 81         return NULL;                               76         return NULL;
 82 }                                                  77 }
 83 EXPORT_SYMBOL(simple_lookup);                      78 EXPORT_SYMBOL(simple_lookup);
 84                                                    79 
 85 int dcache_dir_open(struct inode *inode, struc     80 int dcache_dir_open(struct inode *inode, struct file *file)
 86 {                                                  81 {
 87         file->private_data = d_alloc_cursor(fi     82         file->private_data = d_alloc_cursor(file->f_path.dentry);
 88                                                    83 
 89         return file->private_data ? 0 : -ENOME     84         return file->private_data ? 0 : -ENOMEM;
 90 }                                                  85 }
 91 EXPORT_SYMBOL(dcache_dir_open);                    86 EXPORT_SYMBOL(dcache_dir_open);
 92                                                    87 
 93 int dcache_dir_close(struct inode *inode, stru     88 int dcache_dir_close(struct inode *inode, struct file *file)
 94 {                                                  89 {
 95         dput(file->private_data);                  90         dput(file->private_data);
 96         return 0;                                  91         return 0;
 97 }                                                  92 }
 98 EXPORT_SYMBOL(dcache_dir_close);                   93 EXPORT_SYMBOL(dcache_dir_close);
 99                                                    94 
100 /* parent is locked at least shared */             95 /* parent is locked at least shared */
101 /*                                                 96 /*
102  * Returns an element of siblings' list.           97  * Returns an element of siblings' list.
103  * We are looking for <count>th positive after     98  * We are looking for <count>th positive after <p>; if
104  * found, dentry is grabbed and returned to ca     99  * found, dentry is grabbed and returned to caller.
105  * If no such element exists, NULL is returned    100  * If no such element exists, NULL is returned.
106  */                                               101  */
107 static struct dentry *scan_positives(struct de    102 static struct dentry *scan_positives(struct dentry *cursor,
108                                         struct !! 103                                         struct list_head *p,
109                                         loff_t    104                                         loff_t count,
110                                         struct    105                                         struct dentry *last)
111 {                                                 106 {
112         struct dentry *dentry = cursor->d_pare    107         struct dentry *dentry = cursor->d_parent, *found = NULL;
113                                                   108 
114         spin_lock(&dentry->d_lock);               109         spin_lock(&dentry->d_lock);
115         while (*p) {                           !! 110         while ((p = p->next) != &dentry->d_subdirs) {
116                 struct dentry *d = hlist_entry !! 111                 struct dentry *d = list_entry(p, struct dentry, d_child);
117                 p = &d->d_sib.next;            << 
118                 // we must at least skip curso    112                 // we must at least skip cursors, to avoid livelocks
119                 if (d->d_flags & DCACHE_DENTRY    113                 if (d->d_flags & DCACHE_DENTRY_CURSOR)
120                         continue;                 114                         continue;
121                 if (simple_positive(d) && !--c    115                 if (simple_positive(d) && !--count) {
122                         spin_lock_nested(&d->d    116                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
123                         if (simple_positive(d)    117                         if (simple_positive(d))
124                                 found = dget_d    118                                 found = dget_dlock(d);
125                         spin_unlock(&d->d_lock    119                         spin_unlock(&d->d_lock);
126                         if (likely(found))        120                         if (likely(found))
127                                 break;            121                                 break;
128                         count = 1;                122                         count = 1;
129                 }                                 123                 }
130                 if (need_resched()) {             124                 if (need_resched()) {
131                         if (!hlist_unhashed(&c !! 125                         list_move(&cursor->d_child, p);
132                                 __hlist_del(&c !! 126                         p = &cursor->d_child;
133                         hlist_add_behind(&curs << 
134                         p = &cursor->d_sib.nex << 
135                         spin_unlock(&dentry->d    127                         spin_unlock(&dentry->d_lock);
136                         cond_resched();           128                         cond_resched();
137                         spin_lock(&dentry->d_l    129                         spin_lock(&dentry->d_lock);
138                 }                                 130                 }
139         }                                         131         }
140         spin_unlock(&dentry->d_lock);             132         spin_unlock(&dentry->d_lock);
141         dput(last);                               133         dput(last);
142         return found;                             134         return found;
143 }                                                 135 }
144                                                   136 
145 loff_t dcache_dir_lseek(struct file *file, lof    137 loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
146 {                                                 138 {
147         struct dentry *dentry = file->f_path.d    139         struct dentry *dentry = file->f_path.dentry;
148         switch (whence) {                         140         switch (whence) {
149                 case 1:                           141                 case 1:
150                         offset += file->f_pos;    142                         offset += file->f_pos;
151                         fallthrough;              143                         fallthrough;
152                 case 0:                           144                 case 0:
153                         if (offset >= 0)          145                         if (offset >= 0)
154                                 break;            146                                 break;
155                         fallthrough;              147                         fallthrough;
156                 default:                          148                 default:
157                         return -EINVAL;           149                         return -EINVAL;
158         }                                         150         }
159         if (offset != file->f_pos) {              151         if (offset != file->f_pos) {
160                 struct dentry *cursor = file->    152                 struct dentry *cursor = file->private_data;
161                 struct dentry *to = NULL;         153                 struct dentry *to = NULL;
162                                                   154 
163                 inode_lock_shared(dentry->d_in    155                 inode_lock_shared(dentry->d_inode);
164                                                   156 
165                 if (offset > 2)                   157                 if (offset > 2)
166                         to = scan_positives(cu !! 158                         to = scan_positives(cursor, &dentry->d_subdirs,
167                                             of    159                                             offset - 2, NULL);
168                 spin_lock(&dentry->d_lock);       160                 spin_lock(&dentry->d_lock);
169                 hlist_del_init(&cursor->d_sib) << 
170                 if (to)                           161                 if (to)
171                         hlist_add_behind(&curs !! 162                         list_move(&cursor->d_child, &to->d_child);
                                                   >> 163                 else
                                                   >> 164                         list_del_init(&cursor->d_child);
172                 spin_unlock(&dentry->d_lock);     165                 spin_unlock(&dentry->d_lock);
173                 dput(to);                         166                 dput(to);
174                                                   167 
175                 file->f_pos = offset;             168                 file->f_pos = offset;
176                                                   169 
177                 inode_unlock_shared(dentry->d_    170                 inode_unlock_shared(dentry->d_inode);
178         }                                         171         }
179         return offset;                            172         return offset;
180 }                                                 173 }
181 EXPORT_SYMBOL(dcache_dir_lseek);                  174 EXPORT_SYMBOL(dcache_dir_lseek);
182                                                   175 
                                                   >> 176 /* Relationship between i_mode and the DT_xxx types */
                                                   >> 177 static inline unsigned char dt_type(struct inode *inode)
                                                   >> 178 {
                                                   >> 179         return (inode->i_mode >> 12) & 15;
                                                   >> 180 }
                                                   >> 181 
183 /*                                                182 /*
184  * Directory is locked and all positive dentri    183  * Directory is locked and all positive dentries in it are safe, since
185  * for ramfs-type trees they can't go away wit    184  * for ramfs-type trees they can't go away without unlink() or rmdir(),
186  * both impossible due to the lock on director    185  * both impossible due to the lock on directory.
187  */                                               186  */
188                                                   187 
189 int dcache_readdir(struct file *file, struct d    188 int dcache_readdir(struct file *file, struct dir_context *ctx)
190 {                                                 189 {
191         struct dentry *dentry = file->f_path.d    190         struct dentry *dentry = file->f_path.dentry;
192         struct dentry *cursor = file->private_    191         struct dentry *cursor = file->private_data;
                                                   >> 192         struct list_head *anchor = &dentry->d_subdirs;
193         struct dentry *next = NULL;               193         struct dentry *next = NULL;
194         struct hlist_node **p;                 !! 194         struct list_head *p;
195                                                   195 
196         if (!dir_emit_dots(file, ctx))            196         if (!dir_emit_dots(file, ctx))
197                 return 0;                         197                 return 0;
198                                                   198 
199         if (ctx->pos == 2)                        199         if (ctx->pos == 2)
200                 p = &dentry->d_children.first; !! 200                 p = anchor;
                                                   >> 201         else if (!list_empty(&cursor->d_child))
                                                   >> 202                 p = &cursor->d_child;
201         else                                      203         else
202                 p = &cursor->d_sib.next;       !! 204                 return 0;
203                                                   205 
204         while ((next = scan_positives(cursor,     206         while ((next = scan_positives(cursor, p, 1, next)) != NULL) {
205                 if (!dir_emit(ctx, next->d_nam    207                 if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
206                               d_inode(next)->i !! 208                               d_inode(next)->i_ino, dt_type(d_inode(next))))
207                               fs_umode_to_dtyp << 
208                         break;                    209                         break;
209                 ctx->pos++;                       210                 ctx->pos++;
210                 p = &next->d_sib.next;         !! 211                 p = &next->d_child;
211         }                                         212         }
212         spin_lock(&dentry->d_lock);               213         spin_lock(&dentry->d_lock);
213         hlist_del_init(&cursor->d_sib);        << 
214         if (next)                                 214         if (next)
215                 hlist_add_before(&cursor->d_si !! 215                 list_move_tail(&cursor->d_child, &next->d_child);
                                                   >> 216         else
                                                   >> 217                 list_del_init(&cursor->d_child);
216         spin_unlock(&dentry->d_lock);             218         spin_unlock(&dentry->d_lock);
217         dput(next);                               219         dput(next);
218                                                   220 
219         return 0;                                 221         return 0;
220 }                                                 222 }
221 EXPORT_SYMBOL(dcache_readdir);                    223 EXPORT_SYMBOL(dcache_readdir);
222                                                   224 
223 ssize_t generic_read_dir(struct file *filp, ch    225 ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
224 {                                                 226 {
225         return -EISDIR;                           227         return -EISDIR;
226 }                                                 228 }
227 EXPORT_SYMBOL(generic_read_dir);                  229 EXPORT_SYMBOL(generic_read_dir);
228                                                   230 
229 const struct file_operations simple_dir_operat    231 const struct file_operations simple_dir_operations = {
230         .open           = dcache_dir_open,        232         .open           = dcache_dir_open,
231         .release        = dcache_dir_close,       233         .release        = dcache_dir_close,
232         .llseek         = dcache_dir_lseek,       234         .llseek         = dcache_dir_lseek,
233         .read           = generic_read_dir,       235         .read           = generic_read_dir,
234         .iterate_shared = dcache_readdir,         236         .iterate_shared = dcache_readdir,
235         .fsync          = noop_fsync,             237         .fsync          = noop_fsync,
236 };                                                238 };
237 EXPORT_SYMBOL(simple_dir_operations);             239 EXPORT_SYMBOL(simple_dir_operations);
238                                                   240 
239 const struct inode_operations simple_dir_inode    241 const struct inode_operations simple_dir_inode_operations = {
240         .lookup         = simple_lookup,          242         .lookup         = simple_lookup,
241 };                                                243 };
242 EXPORT_SYMBOL(simple_dir_inode_operations);       244 EXPORT_SYMBOL(simple_dir_inode_operations);
243                                                   245 
244 /* 0 is '.', 1 is '..', so always start with o << 
245 enum {                                         << 
246         DIR_OFFSET_MIN  = 2,                   << 
247 };                                             << 
248                                                << 
249 static void offset_set(struct dentry *dentry,  << 
250 {                                              << 
251         dentry->d_fsdata = (void *)offset;     << 
252 }                                              << 
253                                                << 
254 static long dentry2offset(struct dentry *dentr << 
255 {                                              << 
256         return (long)dentry->d_fsdata;         << 
257 }                                              << 
258                                                << 
259 static struct lock_class_key simple_offset_loc << 
260                                                << 
261 /**                                            << 
262  * simple_offset_init - initialize an offset_c << 
263  * @octx: directory offset map to be initializ << 
264  *                                             << 
265  */                                            << 
266 void simple_offset_init(struct offset_ctx *oct << 
267 {                                              << 
268         mt_init_flags(&octx->mt, MT_FLAGS_ALLO << 
269         lockdep_set_class(&octx->mt.ma_lock, & << 
270         octx->next_offset = DIR_OFFSET_MIN;    << 
271 }                                              << 
272                                                << 
273 /**                                            << 
274  * simple_offset_add - Add an entry to a direc << 
275  * @octx: directory offset ctx to be updated   << 
276  * @dentry: new dentry being added             << 
277  *                                             << 
278  * Returns zero on success. @octx and the dent << 
279  * Otherwise, a negative errno value is return << 
280  */                                            << 
281 int simple_offset_add(struct offset_ctx *octx, << 
282 {                                              << 
283         unsigned long offset;                  << 
284         int ret;                               << 
285                                                << 
286         if (dentry2offset(dentry) != 0)        << 
287                 return -EBUSY;                 << 
288                                                << 
289         ret = mtree_alloc_cyclic(&octx->mt, &o << 
290                                  LONG_MAX, &oc << 
291         if (ret < 0)                           << 
292                 return ret;                    << 
293                                                << 
294         offset_set(dentry, offset);            << 
295         return 0;                              << 
296 }                                              << 
297                                                << 
298 static int simple_offset_replace(struct offset << 
299                                  long offset)  << 
300 {                                              << 
301         int ret;                               << 
302                                                << 
303         ret = mtree_store(&octx->mt, offset, d << 
304         if (ret)                               << 
305                 return ret;                    << 
306         offset_set(dentry, offset);            << 
307         return 0;                              << 
308 }                                              << 
309                                                << 
310 /**                                            << 
311  * simple_offset_remove - Remove an entry to a << 
312  * @octx: directory offset ctx to be updated   << 
313  * @dentry: dentry being removed               << 
314  *                                             << 
315  */                                            << 
316 void simple_offset_remove(struct offset_ctx *o << 
317 {                                              << 
318         long offset;                           << 
319                                                << 
320         offset = dentry2offset(dentry);        << 
321         if (offset == 0)                       << 
322                 return;                        << 
323                                                << 
324         mtree_erase(&octx->mt, offset);        << 
325         offset_set(dentry, 0);                 << 
326 }                                              << 
327                                                << 
328 /**                                            << 
329  * simple_offset_empty - Check if a dentry can << 
330  * @dentry: dentry to be tested                << 
331  *                                             << 
332  * Returns 0 if @dentry is a non-empty directo << 
333  */                                            << 
334 int simple_offset_empty(struct dentry *dentry) << 
335 {                                              << 
336         struct inode *inode = d_inode(dentry); << 
337         struct offset_ctx *octx;               << 
338         struct dentry *child;                  << 
339         unsigned long index;                   << 
340         int ret = 1;                           << 
341                                                << 
342         if (!inode || !S_ISDIR(inode->i_mode)) << 
343                 return ret;                    << 
344                                                << 
345         index = DIR_OFFSET_MIN;                << 
346         octx = inode->i_op->get_offset_ctx(ino << 
347         mt_for_each(&octx->mt, child, index, L << 
348                 spin_lock(&child->d_lock);     << 
349                 if (simple_positive(child)) {  << 
350                         spin_unlock(&child->d_ << 
351                         ret = 0;               << 
352                         break;                 << 
353                 }                              << 
354                 spin_unlock(&child->d_lock);   << 
355         }                                      << 
356                                                << 
357         return ret;                            << 
358 }                                              << 
359                                                << 
360 /**                                            << 
361  * simple_offset_rename - handle directory off << 
362  * @old_dir: parent directory of source entry  << 
363  * @old_dentry: dentry of source entry         << 
364  * @new_dir: parent_directory of destination e << 
365  * @new_dentry: dentry of destination          << 
366  *                                             << 
367  * Caller provides appropriate serialization.  << 
368  *                                             << 
369  * User space expects the directory offset val << 
370  * (new) directory entry to be unchanged after << 
371  *                                             << 
372  * Returns zero on success, a negative errno v << 
373  */                                            << 
374 int simple_offset_rename(struct inode *old_dir << 
375                          struct inode *new_dir << 
376 {                                              << 
377         struct offset_ctx *old_ctx = old_dir-> << 
378         struct offset_ctx *new_ctx = new_dir-> << 
379         long new_offset = dentry2offset(new_de << 
380                                                << 
381         simple_offset_remove(old_ctx, old_dent << 
382                                                << 
383         if (new_offset) {                      << 
384                 offset_set(new_dentry, 0);     << 
385                 return simple_offset_replace(n << 
386         }                                      << 
387         return simple_offset_add(new_ctx, old_ << 
388 }                                              << 
389                                                << 
390 /**                                            << 
391  * simple_offset_rename_exchange - exchange re << 
392  * @old_dir: parent of dentry being moved      << 
393  * @old_dentry: dentry being moved             << 
394  * @new_dir: destination parent                << 
395  * @new_dentry: destination dentry             << 
396  *                                             << 
397  * This API preserves the directory offset val << 
398  * appropriate serialization.                  << 
399  *                                             << 
400  * Returns zero on success. Otherwise a negati << 
401  * rename is rolled back.                      << 
402  */                                            << 
403 int simple_offset_rename_exchange(struct inode << 
404                                   struct dentr << 
405                                   struct inode << 
406                                   struct dentr << 
407 {                                              << 
408         struct offset_ctx *old_ctx = old_dir-> << 
409         struct offset_ctx *new_ctx = new_dir-> << 
410         long old_index = dentry2offset(old_den << 
411         long new_index = dentry2offset(new_den << 
412         int ret;                               << 
413                                                << 
414         simple_offset_remove(old_ctx, old_dent << 
415         simple_offset_remove(new_ctx, new_dent << 
416                                                << 
417         ret = simple_offset_replace(new_ctx, o << 
418         if (ret)                               << 
419                 goto out_restore;              << 
420                                                << 
421         ret = simple_offset_replace(old_ctx, n << 
422         if (ret) {                             << 
423                 simple_offset_remove(new_ctx,  << 
424                 goto out_restore;              << 
425         }                                      << 
426                                                << 
427         ret = simple_rename_exchange(old_dir,  << 
428         if (ret) {                             << 
429                 simple_offset_remove(new_ctx,  << 
430                 simple_offset_remove(old_ctx,  << 
431                 goto out_restore;              << 
432         }                                      << 
433         return 0;                              << 
434                                                << 
435 out_restore:                                   << 
436         (void)simple_offset_replace(old_ctx, o << 
437         (void)simple_offset_replace(new_ctx, n << 
438         return ret;                            << 
439 }                                              << 
440                                                << 
441 /**                                            << 
442  * simple_offset_destroy - Release offset map  << 
443  * @octx: directory offset ctx that is about t << 
444  *                                             << 
445  * During fs teardown (eg. umount), a director << 
446  * contain entries. xa_destroy() cleans out an << 
447  */                                            << 
448 void simple_offset_destroy(struct offset_ctx * << 
449 {                                              << 
450         mtree_destroy(&octx->mt);              << 
451 }                                              << 
452                                                << 
453 static int offset_dir_open(struct inode *inode << 
454 {                                              << 
455         struct offset_ctx *ctx = inode->i_op-> << 
456                                                << 
457         file->private_data = (void *)ctx->next << 
458         return 0;                              << 
459 }                                              << 
460                                                << 
461 /**                                            << 
462  * offset_dir_llseek - Advance the read positi << 
463  * @file: an open directory whose position is  << 
464  * @offset: a byte offset                      << 
465  * @whence: enumerator describing the starting << 
466  *                                             << 
467  * SEEK_END, SEEK_DATA, and SEEK_HOLE are not  << 
468  *                                             << 
469  * Returns the updated read position if succes << 
470  * negative errno is returned and the read pos << 
471  */                                            << 
472 static loff_t offset_dir_llseek(struct file *f << 
473 {                                              << 
474         struct inode *inode = file->f_inode;   << 
475         struct offset_ctx *ctx = inode->i_op-> << 
476                                                << 
477         switch (whence) {                      << 
478         case SEEK_CUR:                         << 
479                 offset += file->f_pos;         << 
480                 fallthrough;                   << 
481         case SEEK_SET:                         << 
482                 if (offset >= 0)               << 
483                         break;                 << 
484                 fallthrough;                   << 
485         default:                               << 
486                 return -EINVAL;                << 
487         }                                      << 
488                                                << 
489         /* In this case, ->private_data is pro << 
490         if (!offset)                           << 
491                 file->private_data = (void *)c << 
492         return vfs_setpos(file, offset, LONG_M << 
493 }                                              << 
494                                                << 
495 static struct dentry *offset_find_next(struct  << 
496 {                                              << 
497         MA_STATE(mas, &octx->mt, offset, offse << 
498         struct dentry *child, *found = NULL;   << 
499                                                << 
500         rcu_read_lock();                       << 
501         child = mas_find(&mas, LONG_MAX);      << 
502         if (!child)                            << 
503                 goto out;                      << 
504         spin_lock(&child->d_lock);             << 
505         if (simple_positive(child))            << 
506                 found = dget_dlock(child);     << 
507         spin_unlock(&child->d_lock);           << 
508 out:                                           << 
509         rcu_read_unlock();                     << 
510         return found;                          << 
511 }                                              << 
512                                                << 
513 static bool offset_dir_emit(struct dir_context << 
514 {                                              << 
515         struct inode *inode = d_inode(dentry); << 
516         long offset = dentry2offset(dentry);   << 
517                                                << 
518         return ctx->actor(ctx, dentry->d_name. << 
519                           inode->i_ino, fs_umo << 
520 }                                              << 
521                                                << 
522 static void offset_iterate_dir(struct inode *i << 
523 {                                              << 
524         struct offset_ctx *octx = inode->i_op- << 
525         struct dentry *dentry;                 << 
526                                                << 
527         while (true) {                         << 
528                 dentry = offset_find_next(octx << 
529                 if (!dentry)                   << 
530                         return;                << 
531                                                << 
532                 if (dentry2offset(dentry) >= l << 
533                         dput(dentry);          << 
534                         return;                << 
535                 }                              << 
536                                                << 
537                 if (!offset_dir_emit(ctx, dent << 
538                         dput(dentry);          << 
539                         return;                << 
540                 }                              << 
541                                                << 
542                 ctx->pos = dentry2offset(dentr << 
543                 dput(dentry);                  << 
544         }                                      << 
545 }                                              << 
546                                                << 
547 /**                                            << 
548  * offset_readdir - Emit entries starting at o << 
549  * @file: an open directory to iterate over    << 
550  * @ctx: directory iteration context           << 
551  *                                             << 
552  * Caller must hold @file's i_rwsem to prevent << 
553  * entries during this call.                   << 
554  *                                             << 
555  * On entry, @ctx->pos contains an offset that << 
556  * to be read from the directory.              << 
557  *                                             << 
558  * The operation continues until there are no  << 
559  * until the ctx->actor indicates there is no  << 
560  * output buffer.                              << 
561  *                                             << 
562  * On return, @ctx->pos contains an offset tha << 
563  * in this directory when offset_readdir() is  << 
564  *                                             << 
565  * Return values:                              << 
566  *   %0 - Complete                             << 
567  */                                            << 
568 static int offset_readdir(struct file *file, s << 
569 {                                              << 
570         struct dentry *dir = file->f_path.dent << 
571         long last_index = (long)file->private_ << 
572                                                << 
573         lockdep_assert_held(&d_inode(dir)->i_r << 
574                                                << 
575         if (!dir_emit_dots(file, ctx))         << 
576                 return 0;                      << 
577                                                << 
578         offset_iterate_dir(d_inode(dir), ctx,  << 
579         return 0;                              << 
580 }                                              << 
581                                                << 
582 const struct file_operations simple_offset_dir << 
583         .open           = offset_dir_open,     << 
584         .llseek         = offset_dir_llseek,   << 
585         .iterate_shared = offset_readdir,      << 
586         .read           = generic_read_dir,    << 
587         .fsync          = noop_fsync,          << 
588 };                                             << 
589                                                << 
590 static struct dentry *find_next_child(struct d    246 static struct dentry *find_next_child(struct dentry *parent, struct dentry *prev)
591 {                                                 247 {
592         struct dentry *child = NULL, *d;       !! 248         struct dentry *child = NULL;
                                                   >> 249         struct list_head *p = prev ? &prev->d_child : &parent->d_subdirs;
593                                                   250 
594         spin_lock(&parent->d_lock);               251         spin_lock(&parent->d_lock);
595         d = prev ? d_next_sibling(prev) : d_fi !! 252         while ((p = p->next) != &parent->d_subdirs) {
596         hlist_for_each_entry_from(d, d_sib) {  !! 253                 struct dentry *d = container_of(p, struct dentry, d_child);
597                 if (simple_positive(d)) {         254                 if (simple_positive(d)) {
598                         spin_lock_nested(&d->d    255                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
599                         if (simple_positive(d)    256                         if (simple_positive(d))
600                                 child = dget_d    257                                 child = dget_dlock(d);
601                         spin_unlock(&d->d_lock    258                         spin_unlock(&d->d_lock);
602                         if (likely(child))        259                         if (likely(child))
603                                 break;            260                                 break;
604                 }                                 261                 }
605         }                                         262         }
606         spin_unlock(&parent->d_lock);             263         spin_unlock(&parent->d_lock);
607         dput(prev);                               264         dput(prev);
608         return child;                             265         return child;
609 }                                                 266 }
610                                                   267 
611 void simple_recursive_removal(struct dentry *d    268 void simple_recursive_removal(struct dentry *dentry,
612                               void (*callback)    269                               void (*callback)(struct dentry *))
613 {                                                 270 {
614         struct dentry *this = dget(dentry);       271         struct dentry *this = dget(dentry);
615         while (true) {                            272         while (true) {
616                 struct dentry *victim = NULL,     273                 struct dentry *victim = NULL, *child;
617                 struct inode *inode = this->d_    274                 struct inode *inode = this->d_inode;
618                                                   275 
619                 inode_lock(inode);                276                 inode_lock(inode);
620                 if (d_is_dir(this))               277                 if (d_is_dir(this))
621                         inode->i_flags |= S_DE    278                         inode->i_flags |= S_DEAD;
622                 while ((child = find_next_chil    279                 while ((child = find_next_child(this, victim)) == NULL) {
623                         // kill and ascend        280                         // kill and ascend
624                         // update metadata whi    281                         // update metadata while it's still locked
625                         inode_set_ctime_curren !! 282                         inode->i_ctime = current_time(inode);
626                         clear_nlink(inode);       283                         clear_nlink(inode);
627                         inode_unlock(inode);      284                         inode_unlock(inode);
628                         victim = this;            285                         victim = this;
629                         this = this->d_parent;    286                         this = this->d_parent;
630                         inode = this->d_inode;    287                         inode = this->d_inode;
631                         inode_lock(inode);        288                         inode_lock(inode);
632                         if (simple_positive(vi    289                         if (simple_positive(victim)) {
633                                 d_invalidate(v    290                                 d_invalidate(victim);   // avoid lost mounts
634                                 if (d_is_dir(v    291                                 if (d_is_dir(victim))
635                                         fsnoti    292                                         fsnotify_rmdir(inode, victim);
636                                 else              293                                 else
637                                         fsnoti    294                                         fsnotify_unlink(inode, victim);
638                                 if (callback)     295                                 if (callback)
639                                         callba    296                                         callback(victim);
640                                 dput(victim);     297                                 dput(victim);           // unpin it
641                         }                         298                         }
642                         if (victim == dentry)     299                         if (victim == dentry) {
643                                 inode_set_mtim !! 300                                 inode->i_ctime = inode->i_mtime =
644                                                !! 301                                         current_time(inode);
645                                 if (d_is_dir(d    302                                 if (d_is_dir(dentry))
646                                         drop_n    303                                         drop_nlink(inode);
647                                 inode_unlock(i    304                                 inode_unlock(inode);
648                                 dput(dentry);     305                                 dput(dentry);
649                                 return;           306                                 return;
650                         }                         307                         }
651                 }                                 308                 }
652                 inode_unlock(inode);              309                 inode_unlock(inode);
653                 this = child;                     310                 this = child;
654         }                                         311         }
655 }                                                 312 }
656 EXPORT_SYMBOL(simple_recursive_removal);          313 EXPORT_SYMBOL(simple_recursive_removal);
657                                                   314 
658 static const struct super_operations simple_su    315 static const struct super_operations simple_super_operations = {
659         .statfs         = simple_statfs,          316         .statfs         = simple_statfs,
660 };                                                317 };
661                                                   318 
662 static int pseudo_fs_fill_super(struct super_b    319 static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc)
663 {                                                 320 {
664         struct pseudo_fs_context *ctx = fc->fs    321         struct pseudo_fs_context *ctx = fc->fs_private;
665         struct inode *root;                       322         struct inode *root;
666                                                   323 
667         s->s_maxbytes = MAX_LFS_FILESIZE;         324         s->s_maxbytes = MAX_LFS_FILESIZE;
668         s->s_blocksize = PAGE_SIZE;               325         s->s_blocksize = PAGE_SIZE;
669         s->s_blocksize_bits = PAGE_SHIFT;         326         s->s_blocksize_bits = PAGE_SHIFT;
670         s->s_magic = ctx->magic;                  327         s->s_magic = ctx->magic;
671         s->s_op = ctx->ops ?: &simple_super_op    328         s->s_op = ctx->ops ?: &simple_super_operations;
672         s->s_xattr = ctx->xattr;                  329         s->s_xattr = ctx->xattr;
673         s->s_time_gran = 1;                       330         s->s_time_gran = 1;
674         root = new_inode(s);                      331         root = new_inode(s);
675         if (!root)                                332         if (!root)
676                 return -ENOMEM;                   333                 return -ENOMEM;
677                                                   334 
678         /*                                        335         /*
679          * since this is the first inode, make    336          * since this is the first inode, make it number 1. New inodes created
680          * after this must take care not to co    337          * after this must take care not to collide with it (by passing
681          * max_reserved of 1 to iunique).         338          * max_reserved of 1 to iunique).
682          */                                       339          */
683         root->i_ino = 1;                          340         root->i_ino = 1;
684         root->i_mode = S_IFDIR | S_IRUSR | S_I    341         root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
685         simple_inode_init_ts(root);            !! 342         root->i_atime = root->i_mtime = root->i_ctime = current_time(root);
686         s->s_root = d_make_root(root);            343         s->s_root = d_make_root(root);
687         if (!s->s_root)                           344         if (!s->s_root)
688                 return -ENOMEM;                   345                 return -ENOMEM;
689         s->s_d_op = ctx->dops;                    346         s->s_d_op = ctx->dops;
690         return 0;                                 347         return 0;
691 }                                                 348 }
692                                                   349 
693 static int pseudo_fs_get_tree(struct fs_contex    350 static int pseudo_fs_get_tree(struct fs_context *fc)
694 {                                                 351 {
695         return get_tree_nodev(fc, pseudo_fs_fi    352         return get_tree_nodev(fc, pseudo_fs_fill_super);
696 }                                                 353 }
697                                                   354 
698 static void pseudo_fs_free(struct fs_context *    355 static void pseudo_fs_free(struct fs_context *fc)
699 {                                                 356 {
700         kfree(fc->fs_private);                    357         kfree(fc->fs_private);
701 }                                                 358 }
702                                                   359 
703 static const struct fs_context_operations pseu    360 static const struct fs_context_operations pseudo_fs_context_ops = {
704         .free           = pseudo_fs_free,         361         .free           = pseudo_fs_free,
705         .get_tree       = pseudo_fs_get_tree,     362         .get_tree       = pseudo_fs_get_tree,
706 };                                                363 };
707                                                   364 
708 /*                                                365 /*
709  * Common helper for pseudo-filesystems (sockf    366  * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that
710  * will never be mountable)                       367  * will never be mountable)
711  */                                               368  */
712 struct pseudo_fs_context *init_pseudo(struct f    369 struct pseudo_fs_context *init_pseudo(struct fs_context *fc,
713                                         unsign    370                                         unsigned long magic)
714 {                                                 371 {
715         struct pseudo_fs_context *ctx;            372         struct pseudo_fs_context *ctx;
716                                                   373 
717         ctx = kzalloc(sizeof(struct pseudo_fs_    374         ctx = kzalloc(sizeof(struct pseudo_fs_context), GFP_KERNEL);
718         if (likely(ctx)) {                        375         if (likely(ctx)) {
719                 ctx->magic = magic;               376                 ctx->magic = magic;
720                 fc->fs_private = ctx;             377                 fc->fs_private = ctx;
721                 fc->ops = &pseudo_fs_context_o    378                 fc->ops = &pseudo_fs_context_ops;
722                 fc->sb_flags |= SB_NOUSER;        379                 fc->sb_flags |= SB_NOUSER;
723                 fc->global = true;                380                 fc->global = true;
724         }                                         381         }
725         return ctx;                               382         return ctx;
726 }                                                 383 }
727 EXPORT_SYMBOL(init_pseudo);                       384 EXPORT_SYMBOL(init_pseudo);
728                                                   385 
729 int simple_open(struct inode *inode, struct fi    386 int simple_open(struct inode *inode, struct file *file)
730 {                                                 387 {
731         if (inode->i_private)                     388         if (inode->i_private)
732                 file->private_data = inode->i_    389                 file->private_data = inode->i_private;
733         return 0;                                 390         return 0;
734 }                                                 391 }
735 EXPORT_SYMBOL(simple_open);                       392 EXPORT_SYMBOL(simple_open);
736                                                   393 
737 int simple_link(struct dentry *old_dentry, str    394 int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
738 {                                                 395 {
739         struct inode *inode = d_inode(old_dent    396         struct inode *inode = d_inode(old_dentry);
740                                                   397 
741         inode_set_mtime_to_ts(dir,             !! 398         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
742                               inode_set_ctime_ << 
743         inc_nlink(inode);                         399         inc_nlink(inode);
744         ihold(inode);                             400         ihold(inode);
745         dget(dentry);                             401         dget(dentry);
746         d_instantiate(dentry, inode);             402         d_instantiate(dentry, inode);
747         return 0;                                 403         return 0;
748 }                                                 404 }
749 EXPORT_SYMBOL(simple_link);                       405 EXPORT_SYMBOL(simple_link);
750                                                   406 
751 int simple_empty(struct dentry *dentry)           407 int simple_empty(struct dentry *dentry)
752 {                                                 408 {
753         struct dentry *child;                     409         struct dentry *child;
754         int ret = 0;                              410         int ret = 0;
755                                                   411 
756         spin_lock(&dentry->d_lock);               412         spin_lock(&dentry->d_lock);
757         hlist_for_each_entry(child, &dentry->d !! 413         list_for_each_entry(child, &dentry->d_subdirs, d_child) {
758                 spin_lock_nested(&child->d_loc    414                 spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
759                 if (simple_positive(child)) {     415                 if (simple_positive(child)) {
760                         spin_unlock(&child->d_    416                         spin_unlock(&child->d_lock);
761                         goto out;                 417                         goto out;
762                 }                                 418                 }
763                 spin_unlock(&child->d_lock);      419                 spin_unlock(&child->d_lock);
764         }                                         420         }
765         ret = 1;                                  421         ret = 1;
766 out:                                              422 out:
767         spin_unlock(&dentry->d_lock);             423         spin_unlock(&dentry->d_lock);
768         return ret;                               424         return ret;
769 }                                                 425 }
770 EXPORT_SYMBOL(simple_empty);                      426 EXPORT_SYMBOL(simple_empty);
771                                                   427 
772 int simple_unlink(struct inode *dir, struct de    428 int simple_unlink(struct inode *dir, struct dentry *dentry)
773 {                                                 429 {
774         struct inode *inode = d_inode(dentry);    430         struct inode *inode = d_inode(dentry);
775                                                   431 
776         inode_set_mtime_to_ts(dir,             !! 432         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
777                               inode_set_ctime_ << 
778         drop_nlink(inode);                        433         drop_nlink(inode);
779         dput(dentry);                             434         dput(dentry);
780         return 0;                                 435         return 0;
781 }                                                 436 }
782 EXPORT_SYMBOL(simple_unlink);                     437 EXPORT_SYMBOL(simple_unlink);
783                                                   438 
784 int simple_rmdir(struct inode *dir, struct den    439 int simple_rmdir(struct inode *dir, struct dentry *dentry)
785 {                                                 440 {
786         if (!simple_empty(dentry))                441         if (!simple_empty(dentry))
787                 return -ENOTEMPTY;                442                 return -ENOTEMPTY;
788                                                   443 
789         drop_nlink(d_inode(dentry));              444         drop_nlink(d_inode(dentry));
790         simple_unlink(dir, dentry);               445         simple_unlink(dir, dentry);
791         drop_nlink(dir);                          446         drop_nlink(dir);
792         return 0;                                 447         return 0;
793 }                                                 448 }
794 EXPORT_SYMBOL(simple_rmdir);                      449 EXPORT_SYMBOL(simple_rmdir);
795                                                   450 
796 /**                                            << 
797  * simple_rename_timestamp - update the variou << 
798  * @old_dir: old parent directory              << 
799  * @old_dentry: dentry that is being renamed   << 
800  * @new_dir: new parent directory              << 
801  * @new_dentry: target for rename              << 
802  *                                             << 
803  * POSIX mandates that the old and new parent  << 
804  * mtime updated, and that inodes of @old_dent << 
805  * their ctime updated.                        << 
806  */                                            << 
807 void simple_rename_timestamp(struct inode *old << 
808                              struct inode *new << 
809 {                                              << 
810         struct inode *newino = d_inode(new_den << 
811                                                << 
812         inode_set_mtime_to_ts(old_dir, inode_s << 
813         if (new_dir != old_dir)                << 
814                 inode_set_mtime_to_ts(new_dir, << 
815                                       inode_se << 
816         inode_set_ctime_current(d_inode(old_de << 
817         if (newino)                            << 
818                 inode_set_ctime_current(newino << 
819 }                                              << 
820 EXPORT_SYMBOL_GPL(simple_rename_timestamp);    << 
821                                                << 
822 int simple_rename_exchange(struct inode *old_d    451 int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry,
823                            struct inode *new_d    452                            struct inode *new_dir, struct dentry *new_dentry)
824 {                                                 453 {
825         bool old_is_dir = d_is_dir(old_dentry)    454         bool old_is_dir = d_is_dir(old_dentry);
826         bool new_is_dir = d_is_dir(new_dentry)    455         bool new_is_dir = d_is_dir(new_dentry);
827                                                   456 
828         if (old_dir != new_dir && old_is_dir !    457         if (old_dir != new_dir && old_is_dir != new_is_dir) {
829                 if (old_is_dir) {                 458                 if (old_is_dir) {
830                         drop_nlink(old_dir);      459                         drop_nlink(old_dir);
831                         inc_nlink(new_dir);       460                         inc_nlink(new_dir);
832                 } else {                          461                 } else {
833                         drop_nlink(new_dir);      462                         drop_nlink(new_dir);
834                         inc_nlink(old_dir);       463                         inc_nlink(old_dir);
835                 }                                 464                 }
836         }                                         465         }
837         simple_rename_timestamp(old_dir, old_d !! 466         old_dir->i_ctime = old_dir->i_mtime =
                                                   >> 467         new_dir->i_ctime = new_dir->i_mtime =
                                                   >> 468         d_inode(old_dentry)->i_ctime =
                                                   >> 469         d_inode(new_dentry)->i_ctime = current_time(old_dir);
                                                   >> 470 
838         return 0;                                 471         return 0;
839 }                                                 472 }
840 EXPORT_SYMBOL_GPL(simple_rename_exchange);        473 EXPORT_SYMBOL_GPL(simple_rename_exchange);
841                                                   474 
842 int simple_rename(struct mnt_idmap *idmap, str !! 475 int simple_rename(struct user_namespace *mnt_userns, struct inode *old_dir,
843                   struct dentry *old_dentry, s    476                   struct dentry *old_dentry, struct inode *new_dir,
844                   struct dentry *new_dentry, u    477                   struct dentry *new_dentry, unsigned int flags)
845 {                                                 478 {
                                                   >> 479         struct inode *inode = d_inode(old_dentry);
846         int they_are_dirs = d_is_dir(old_dentr    480         int they_are_dirs = d_is_dir(old_dentry);
847                                                   481 
848         if (flags & ~(RENAME_NOREPLACE | RENAM    482         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE))
849                 return -EINVAL;                   483                 return -EINVAL;
850                                                   484 
851         if (flags & RENAME_EXCHANGE)              485         if (flags & RENAME_EXCHANGE)
852                 return simple_rename_exchange(    486                 return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry);
853                                                   487 
854         if (!simple_empty(new_dentry))            488         if (!simple_empty(new_dentry))
855                 return -ENOTEMPTY;                489                 return -ENOTEMPTY;
856                                                   490 
857         if (d_really_is_positive(new_dentry))     491         if (d_really_is_positive(new_dentry)) {
858                 simple_unlink(new_dir, new_den    492                 simple_unlink(new_dir, new_dentry);
859                 if (they_are_dirs) {              493                 if (they_are_dirs) {
860                         drop_nlink(d_inode(new    494                         drop_nlink(d_inode(new_dentry));
861                         drop_nlink(old_dir);      495                         drop_nlink(old_dir);
862                 }                                 496                 }
863         } else if (they_are_dirs) {               497         } else if (they_are_dirs) {
864                 drop_nlink(old_dir);              498                 drop_nlink(old_dir);
865                 inc_nlink(new_dir);               499                 inc_nlink(new_dir);
866         }                                         500         }
867                                                   501 
868         simple_rename_timestamp(old_dir, old_d !! 502         old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime =
                                                   >> 503                 new_dir->i_mtime = inode->i_ctime = current_time(old_dir);
                                                   >> 504 
869         return 0;                                 505         return 0;
870 }                                                 506 }
871 EXPORT_SYMBOL(simple_rename);                     507 EXPORT_SYMBOL(simple_rename);
872                                                   508 
873 /**                                               509 /**
874  * simple_setattr - setattr for simple filesys    510  * simple_setattr - setattr for simple filesystem
875  * @idmap: idmap of the target mount           !! 511  * @mnt_userns: user namespace of the target mount
876  * @dentry: dentry                                512  * @dentry: dentry
877  * @iattr: iattr structure                        513  * @iattr: iattr structure
878  *                                                514  *
879  * Returns 0 on success, -error on failure.       515  * Returns 0 on success, -error on failure.
880  *                                                516  *
881  * simple_setattr is a simple ->setattr implem    517  * simple_setattr is a simple ->setattr implementation without a proper
882  * implementation of size changes.                518  * implementation of size changes.
883  *                                                519  *
884  * It can either be used for in-memory filesys    520  * It can either be used for in-memory filesystems or special files
885  * on simple regular filesystems.  Anything th    521  * on simple regular filesystems.  Anything that needs to change on-disk
886  * or wire state on size changes needs its own    522  * or wire state on size changes needs its own setattr method.
887  */                                               523  */
888 int simple_setattr(struct mnt_idmap *idmap, st !! 524 int simple_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
889                    struct iattr *iattr)           525                    struct iattr *iattr)
890 {                                                 526 {
891         struct inode *inode = d_inode(dentry);    527         struct inode *inode = d_inode(dentry);
892         int error;                                528         int error;
893                                                   529 
894         error = setattr_prepare(idmap, dentry, !! 530         error = setattr_prepare(mnt_userns, dentry, iattr);
895         if (error)                                531         if (error)
896                 return error;                     532                 return error;
897                                                   533 
898         if (iattr->ia_valid & ATTR_SIZE)          534         if (iattr->ia_valid & ATTR_SIZE)
899                 truncate_setsize(inode, iattr-    535                 truncate_setsize(inode, iattr->ia_size);
900         setattr_copy(idmap, inode, iattr);     !! 536         setattr_copy(mnt_userns, inode, iattr);
901         mark_inode_dirty(inode);                  537         mark_inode_dirty(inode);
902         return 0;                                 538         return 0;
903 }                                                 539 }
904 EXPORT_SYMBOL(simple_setattr);                    540 EXPORT_SYMBOL(simple_setattr);
905                                                   541 
906 static int simple_read_folio(struct file *file !! 542 static int simple_readpage(struct file *file, struct page *page)
907 {                                                 543 {
908         folio_zero_range(folio, 0, folio_size( !! 544         clear_highpage(page);
909         flush_dcache_folio(folio);             !! 545         flush_dcache_page(page);
910         folio_mark_uptodate(folio);            !! 546         SetPageUptodate(page);
911         folio_unlock(folio);                   !! 547         unlock_page(page);
912         return 0;                                 548         return 0;
913 }                                                 549 }
914                                                   550 
915 int simple_write_begin(struct file *file, stru    551 int simple_write_begin(struct file *file, struct address_space *mapping,
916                         loff_t pos, unsigned l !! 552                         loff_t pos, unsigned len, unsigned flags,
917                         struct folio **foliop, !! 553                         struct page **pagep, void **fsdata)
918 {                                                 554 {
919         struct folio *folio;                   !! 555         struct page *page;
                                                   >> 556         pgoff_t index;
                                                   >> 557 
                                                   >> 558         index = pos >> PAGE_SHIFT;
920                                                   559 
921         folio = __filemap_get_folio(mapping, p !! 560         page = grab_cache_page_write_begin(mapping, index, flags);
922                         mapping_gfp_mask(mappi !! 561         if (!page)
923         if (IS_ERR(folio))                     !! 562                 return -ENOMEM;
924                 return PTR_ERR(folio);         << 
925                                                   563 
926         *foliop = folio;                       !! 564         *pagep = page;
927                                                   565 
928         if (!folio_test_uptodate(folio) && (le !! 566         if (!PageUptodate(page) && (len != PAGE_SIZE)) {
929                 size_t from = offset_in_folio( !! 567                 unsigned from = pos & (PAGE_SIZE - 1);
930                                                   568 
931                 folio_zero_segments(folio, 0,  !! 569                 zero_user_segments(page, 0, from, from + len, PAGE_SIZE);
932                                 from + len, fo << 
933         }                                         570         }
934         return 0;                                 571         return 0;
935 }                                                 572 }
936 EXPORT_SYMBOL(simple_write_begin);                573 EXPORT_SYMBOL(simple_write_begin);
937                                                   574 
938 /**                                               575 /**
939  * simple_write_end - .write_end helper for no    576  * simple_write_end - .write_end helper for non-block-device FSes
940  * @file: See .write_end of address_space_oper    577  * @file: See .write_end of address_space_operations
941  * @mapping:            "                         578  * @mapping:            "
942  * @pos:                "                         579  * @pos:                "
943  * @len:                "                         580  * @len:                "
944  * @copied:             "                         581  * @copied:             "
945  * @folio:              "                      !! 582  * @page:               "
946  * @fsdata:             "                         583  * @fsdata:             "
947  *                                                584  *
948  * simple_write_end does the minimum needed fo !! 585  * simple_write_end does the minimum needed for updating a page after writing is
949  * writing is done. It has the same API signat !! 586  * done. It has the same API signature as the .write_end of
950  * address_space_operations vector. So it can     587  * address_space_operations vector. So it can just be set onto .write_end for
951  * FSes that don't need any other processing.     588  * FSes that don't need any other processing. i_mutex is assumed to be held.
952  * Block based filesystems should use generic_    589  * Block based filesystems should use generic_write_end().
953  * NOTE: Even though i_size might get updated     590  * NOTE: Even though i_size might get updated by this function, mark_inode_dirty
954  * is not called, so a filesystem that actuall    591  * is not called, so a filesystem that actually does store data in .write_inode
955  * should extend on what's done here with a ca    592  * should extend on what's done here with a call to mark_inode_dirty() in the
956  * case that i_size has changed.                  593  * case that i_size has changed.
957  *                                                594  *
958  * Use *ONLY* with simple_read_folio()         !! 595  * Use *ONLY* with simple_readpage()
959  */                                               596  */
960 static int simple_write_end(struct file *file,    597 static int simple_write_end(struct file *file, struct address_space *mapping,
961                         loff_t pos, unsigned l    598                         loff_t pos, unsigned len, unsigned copied,
962                         struct folio *folio, v !! 599                         struct page *page, void *fsdata)
963 {                                                 600 {
964         struct inode *inode = folio->mapping-> !! 601         struct inode *inode = page->mapping->host;
965         loff_t last_pos = pos + copied;           602         loff_t last_pos = pos + copied;
966                                                   603 
967         /* zero the stale part of the folio if !! 604         /* zero the stale part of the page if we did a short copy */
968         if (!folio_test_uptodate(folio)) {     !! 605         if (!PageUptodate(page)) {
969                 if (copied < len) {               606                 if (copied < len) {
970                         size_t from = offset_i !! 607                         unsigned from = pos & (PAGE_SIZE - 1);
971                                                   608 
972                         folio_zero_range(folio !! 609                         zero_user(page, from + copied, len - copied);
973                 }                                 610                 }
974                 folio_mark_uptodate(folio);    !! 611                 SetPageUptodate(page);
975         }                                         612         }
976         /*                                        613         /*
977          * No need to use i_size_read() here,     614          * No need to use i_size_read() here, the i_size
978          * cannot change under us because we h    615          * cannot change under us because we hold the i_mutex.
979          */                                       616          */
980         if (last_pos > inode->i_size)             617         if (last_pos > inode->i_size)
981                 i_size_write(inode, last_pos);    618                 i_size_write(inode, last_pos);
982                                                   619 
983         folio_mark_dirty(folio);               !! 620         set_page_dirty(page);
984         folio_unlock(folio);                   !! 621         unlock_page(page);
985         folio_put(folio);                      !! 622         put_page(page);
986                                                   623 
987         return copied;                            624         return copied;
988 }                                                 625 }
989                                                   626 
990 /*                                                627 /*
991  * Provides ramfs-style behavior: data in the     628  * Provides ramfs-style behavior: data in the pagecache, but no writeback.
992  */                                               629  */
993 const struct address_space_operations ram_aops    630 const struct address_space_operations ram_aops = {
994         .read_folio     = simple_read_folio,   !! 631         .readpage       = simple_readpage,
995         .write_begin    = simple_write_begin,     632         .write_begin    = simple_write_begin,
996         .write_end      = simple_write_end,       633         .write_end      = simple_write_end,
997         .dirty_folio    = noop_dirty_folio,    !! 634         .set_page_dirty = __set_page_dirty_no_writeback,
998 };                                                635 };
999 EXPORT_SYMBOL(ram_aops);                          636 EXPORT_SYMBOL(ram_aops);
1000                                                  637 
1001 /*                                               638 /*
1002  * the inodes created here are not hashed. If    639  * the inodes created here are not hashed. If you use iunique to generate
1003  * unique inode values later for this filesys    640  * unique inode values later for this filesystem, then you must take care
1004  * to pass it an appropriate max_reserved val    641  * to pass it an appropriate max_reserved value to avoid collisions.
1005  */                                              642  */
1006 int simple_fill_super(struct super_block *s,     643 int simple_fill_super(struct super_block *s, unsigned long magic,
1007                       const struct tree_descr    644                       const struct tree_descr *files)
1008 {                                                645 {
1009         struct inode *inode;                     646         struct inode *inode;
                                                   >> 647         struct dentry *root;
1010         struct dentry *dentry;                   648         struct dentry *dentry;
1011         int i;                                   649         int i;
1012                                                  650 
1013         s->s_blocksize = PAGE_SIZE;              651         s->s_blocksize = PAGE_SIZE;
1014         s->s_blocksize_bits = PAGE_SHIFT;        652         s->s_blocksize_bits = PAGE_SHIFT;
1015         s->s_magic = magic;                      653         s->s_magic = magic;
1016         s->s_op = &simple_super_operations;      654         s->s_op = &simple_super_operations;
1017         s->s_time_gran = 1;                      655         s->s_time_gran = 1;
1018                                                  656 
1019         inode = new_inode(s);                    657         inode = new_inode(s);
1020         if (!inode)                              658         if (!inode)
1021                 return -ENOMEM;                  659                 return -ENOMEM;
1022         /*                                       660         /*
1023          * because the root inode is 1, the f    661          * because the root inode is 1, the files array must not contain an
1024          * entry at index 1                      662          * entry at index 1
1025          */                                      663          */
1026         inode->i_ino = 1;                        664         inode->i_ino = 1;
1027         inode->i_mode = S_IFDIR | 0755;          665         inode->i_mode = S_IFDIR | 0755;
1028         simple_inode_init_ts(inode);          !! 666         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1029         inode->i_op = &simple_dir_inode_opera    667         inode->i_op = &simple_dir_inode_operations;
1030         inode->i_fop = &simple_dir_operations    668         inode->i_fop = &simple_dir_operations;
1031         set_nlink(inode, 2);                     669         set_nlink(inode, 2);
1032         s->s_root = d_make_root(inode);       !! 670         root = d_make_root(inode);
1033         if (!s->s_root)                       !! 671         if (!root)
1034                 return -ENOMEM;                  672                 return -ENOMEM;
1035         for (i = 0; !files->name || files->na    673         for (i = 0; !files->name || files->name[0]; i++, files++) {
1036                 if (!files->name)                674                 if (!files->name)
1037                         continue;                675                         continue;
1038                                                  676 
1039                 /* warn if it tries to confli    677                 /* warn if it tries to conflict with the root inode */
1040                 if (unlikely(i == 1))            678                 if (unlikely(i == 1))
1041                         printk(KERN_WARNING "    679                         printk(KERN_WARNING "%s: %s passed in a files array"
1042                                 "with an inde    680                                 "with an index of 1!\n", __func__,
1043                                 s->s_type->na    681                                 s->s_type->name);
1044                                                  682 
1045                 dentry = d_alloc_name(s->s_ro !! 683                 dentry = d_alloc_name(root, files->name);
1046                 if (!dentry)                     684                 if (!dentry)
1047                         return -ENOMEM;       !! 685                         goto out;
1048                 inode = new_inode(s);            686                 inode = new_inode(s);
1049                 if (!inode) {                    687                 if (!inode) {
1050                         dput(dentry);            688                         dput(dentry);
1051                         return -ENOMEM;       !! 689                         goto out;
1052                 }                                690                 }
1053                 inode->i_mode = S_IFREG | fil    691                 inode->i_mode = S_IFREG | files->mode;
1054                 simple_inode_init_ts(inode);  !! 692                 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1055                 inode->i_fop = files->ops;       693                 inode->i_fop = files->ops;
1056                 inode->i_ino = i;                694                 inode->i_ino = i;
1057                 d_add(dentry, inode);            695                 d_add(dentry, inode);
1058         }                                        696         }
                                                   >> 697         s->s_root = root;
1059         return 0;                                698         return 0;
                                                   >> 699 out:
                                                   >> 700         d_genocide(root);
                                                   >> 701         shrink_dcache_parent(root);
                                                   >> 702         dput(root);
                                                   >> 703         return -ENOMEM;
1060 }                                                704 }
1061 EXPORT_SYMBOL(simple_fill_super);                705 EXPORT_SYMBOL(simple_fill_super);
1062                                                  706 
1063 static DEFINE_SPINLOCK(pin_fs_lock);             707 static DEFINE_SPINLOCK(pin_fs_lock);
1064                                                  708 
1065 int simple_pin_fs(struct file_system_type *ty    709 int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *count)
1066 {                                                710 {
1067         struct vfsmount *mnt = NULL;             711         struct vfsmount *mnt = NULL;
1068         spin_lock(&pin_fs_lock);                 712         spin_lock(&pin_fs_lock);
1069         if (unlikely(!*mount)) {                 713         if (unlikely(!*mount)) {
1070                 spin_unlock(&pin_fs_lock);       714                 spin_unlock(&pin_fs_lock);
1071                 mnt = vfs_kern_mount(type, SB    715                 mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, NULL);
1072                 if (IS_ERR(mnt))                 716                 if (IS_ERR(mnt))
1073                         return PTR_ERR(mnt);     717                         return PTR_ERR(mnt);
1074                 spin_lock(&pin_fs_lock);         718                 spin_lock(&pin_fs_lock);
1075                 if (!*mount)                     719                 if (!*mount)
1076                         *mount = mnt;            720                         *mount = mnt;
1077         }                                        721         }
1078         mntget(*mount);                          722         mntget(*mount);
1079         ++*count;                                723         ++*count;
1080         spin_unlock(&pin_fs_lock);               724         spin_unlock(&pin_fs_lock);
1081         mntput(mnt);                             725         mntput(mnt);
1082         return 0;                                726         return 0;
1083 }                                                727 }
1084 EXPORT_SYMBOL(simple_pin_fs);                    728 EXPORT_SYMBOL(simple_pin_fs);
1085                                                  729 
1086 void simple_release_fs(struct vfsmount **moun    730 void simple_release_fs(struct vfsmount **mount, int *count)
1087 {                                                731 {
1088         struct vfsmount *mnt;                    732         struct vfsmount *mnt;
1089         spin_lock(&pin_fs_lock);                 733         spin_lock(&pin_fs_lock);
1090         mnt = *mount;                            734         mnt = *mount;
1091         if (!--*count)                           735         if (!--*count)
1092                 *mount = NULL;                   736                 *mount = NULL;
1093         spin_unlock(&pin_fs_lock);               737         spin_unlock(&pin_fs_lock);
1094         mntput(mnt);                             738         mntput(mnt);
1095 }                                                739 }
1096 EXPORT_SYMBOL(simple_release_fs);                740 EXPORT_SYMBOL(simple_release_fs);
1097                                                  741 
1098 /**                                              742 /**
1099  * simple_read_from_buffer - copy data from t    743  * simple_read_from_buffer - copy data from the buffer to user space
1100  * @to: the user space buffer to read to         744  * @to: the user space buffer to read to
1101  * @count: the maximum number of bytes to rea    745  * @count: the maximum number of bytes to read
1102  * @ppos: the current position in the buffer     746  * @ppos: the current position in the buffer
1103  * @from: the buffer to read from                747  * @from: the buffer to read from
1104  * @available: the size of the buffer            748  * @available: the size of the buffer
1105  *                                               749  *
1106  * The simple_read_from_buffer() function rea    750  * The simple_read_from_buffer() function reads up to @count bytes from the
1107  * buffer @from at offset @ppos into the user    751  * buffer @from at offset @ppos into the user space address starting at @to.
1108  *                                               752  *
1109  * On success, the number of bytes read is re    753  * On success, the number of bytes read is returned and the offset @ppos is
1110  * advanced by this number, or negative value    754  * advanced by this number, or negative value is returned on error.
1111  **/                                             755  **/
1112 ssize_t simple_read_from_buffer(void __user *    756 ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
1113                                 const void *f    757                                 const void *from, size_t available)
1114 {                                                758 {
1115         loff_t pos = *ppos;                      759         loff_t pos = *ppos;
1116         size_t ret;                              760         size_t ret;
1117                                                  761 
1118         if (pos < 0)                             762         if (pos < 0)
1119                 return -EINVAL;                  763                 return -EINVAL;
1120         if (pos >= available || !count)          764         if (pos >= available || !count)
1121                 return 0;                        765                 return 0;
1122         if (count > available - pos)             766         if (count > available - pos)
1123                 count = available - pos;         767                 count = available - pos;
1124         ret = copy_to_user(to, from + pos, co    768         ret = copy_to_user(to, from + pos, count);
1125         if (ret == count)                        769         if (ret == count)
1126                 return -EFAULT;                  770                 return -EFAULT;
1127         count -= ret;                            771         count -= ret;
1128         *ppos = pos + count;                     772         *ppos = pos + count;
1129         return count;                            773         return count;
1130 }                                                774 }
1131 EXPORT_SYMBOL(simple_read_from_buffer);          775 EXPORT_SYMBOL(simple_read_from_buffer);
1132                                                  776 
1133 /**                                              777 /**
1134  * simple_write_to_buffer - copy data from us    778  * simple_write_to_buffer - copy data from user space to the buffer
1135  * @to: the buffer to write to                   779  * @to: the buffer to write to
1136  * @available: the size of the buffer            780  * @available: the size of the buffer
1137  * @ppos: the current position in the buffer     781  * @ppos: the current position in the buffer
1138  * @from: the user space buffer to read from     782  * @from: the user space buffer to read from
1139  * @count: the maximum number of bytes to rea    783  * @count: the maximum number of bytes to read
1140  *                                               784  *
1141  * The simple_write_to_buffer() function read    785  * The simple_write_to_buffer() function reads up to @count bytes from the user
1142  * space address starting at @from into the b    786  * space address starting at @from into the buffer @to at offset @ppos.
1143  *                                               787  *
1144  * On success, the number of bytes written is    788  * On success, the number of bytes written is returned and the offset @ppos is
1145  * advanced by this number, or negative value    789  * advanced by this number, or negative value is returned on error.
1146  **/                                             790  **/
1147 ssize_t simple_write_to_buffer(void *to, size    791 ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
1148                 const void __user *from, size    792                 const void __user *from, size_t count)
1149 {                                                793 {
1150         loff_t pos = *ppos;                      794         loff_t pos = *ppos;
1151         size_t res;                              795         size_t res;
1152                                                  796 
1153         if (pos < 0)                             797         if (pos < 0)
1154                 return -EINVAL;                  798                 return -EINVAL;
1155         if (pos >= available || !count)          799         if (pos >= available || !count)
1156                 return 0;                        800                 return 0;
1157         if (count > available - pos)             801         if (count > available - pos)
1158                 count = available - pos;         802                 count = available - pos;
1159         res = copy_from_user(to + pos, from,     803         res = copy_from_user(to + pos, from, count);
1160         if (res == count)                        804         if (res == count)
1161                 return -EFAULT;                  805                 return -EFAULT;
1162         count -= res;                            806         count -= res;
1163         *ppos = pos + count;                     807         *ppos = pos + count;
1164         return count;                            808         return count;
1165 }                                                809 }
1166 EXPORT_SYMBOL(simple_write_to_buffer);           810 EXPORT_SYMBOL(simple_write_to_buffer);
1167                                                  811 
1168 /**                                              812 /**
1169  * memory_read_from_buffer - copy data from t    813  * memory_read_from_buffer - copy data from the buffer
1170  * @to: the kernel space buffer to read to       814  * @to: the kernel space buffer to read to
1171  * @count: the maximum number of bytes to rea    815  * @count: the maximum number of bytes to read
1172  * @ppos: the current position in the buffer     816  * @ppos: the current position in the buffer
1173  * @from: the buffer to read from                817  * @from: the buffer to read from
1174  * @available: the size of the buffer            818  * @available: the size of the buffer
1175  *                                               819  *
1176  * The memory_read_from_buffer() function rea    820  * The memory_read_from_buffer() function reads up to @count bytes from the
1177  * buffer @from at offset @ppos into the kern    821  * buffer @from at offset @ppos into the kernel space address starting at @to.
1178  *                                               822  *
1179  * On success, the number of bytes read is re    823  * On success, the number of bytes read is returned and the offset @ppos is
1180  * advanced by this number, or negative value    824  * advanced by this number, or negative value is returned on error.
1181  **/                                             825  **/
1182 ssize_t memory_read_from_buffer(void *to, siz    826 ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
1183                                 const void *f    827                                 const void *from, size_t available)
1184 {                                                828 {
1185         loff_t pos = *ppos;                      829         loff_t pos = *ppos;
1186                                                  830 
1187         if (pos < 0)                             831         if (pos < 0)
1188                 return -EINVAL;                  832                 return -EINVAL;
1189         if (pos >= available)                    833         if (pos >= available)
1190                 return 0;                        834                 return 0;
1191         if (count > available - pos)             835         if (count > available - pos)
1192                 count = available - pos;         836                 count = available - pos;
1193         memcpy(to, from + pos, count);           837         memcpy(to, from + pos, count);
1194         *ppos = pos + count;                     838         *ppos = pos + count;
1195                                                  839 
1196         return count;                            840         return count;
1197 }                                                841 }
1198 EXPORT_SYMBOL(memory_read_from_buffer);          842 EXPORT_SYMBOL(memory_read_from_buffer);
1199                                                  843 
1200 /*                                               844 /*
1201  * Transaction based IO.                         845  * Transaction based IO.
1202  * The file expects a single write which trig    846  * The file expects a single write which triggers the transaction, and then
1203  * possibly a read which collects the result     847  * possibly a read which collects the result - which is stored in a
1204  * file-local buffer.                            848  * file-local buffer.
1205  */                                              849  */
1206                                                  850 
1207 void simple_transaction_set(struct file *file    851 void simple_transaction_set(struct file *file, size_t n)
1208 {                                                852 {
1209         struct simple_transaction_argresp *ar    853         struct simple_transaction_argresp *ar = file->private_data;
1210                                                  854 
1211         BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);    855         BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
1212                                                  856 
1213         /*                                       857         /*
1214          * The barrier ensures that ar->size     858          * The barrier ensures that ar->size will really remain zero until
1215          * ar->data is ready for reading.        859          * ar->data is ready for reading.
1216          */                                      860          */
1217         smp_mb();                                861         smp_mb();
1218         ar->size = n;                            862         ar->size = n;
1219 }                                                863 }
1220 EXPORT_SYMBOL(simple_transaction_set);           864 EXPORT_SYMBOL(simple_transaction_set);
1221                                                  865 
1222 char *simple_transaction_get(struct file *fil    866 char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
1223 {                                                867 {
1224         struct simple_transaction_argresp *ar    868         struct simple_transaction_argresp *ar;
1225         static DEFINE_SPINLOCK(simple_transac    869         static DEFINE_SPINLOCK(simple_transaction_lock);
1226                                                  870 
1227         if (size > SIMPLE_TRANSACTION_LIMIT -    871         if (size > SIMPLE_TRANSACTION_LIMIT - 1)
1228                 return ERR_PTR(-EFBIG);          872                 return ERR_PTR(-EFBIG);
1229                                                  873 
1230         ar = (struct simple_transaction_argre    874         ar = (struct simple_transaction_argresp *)get_zeroed_page(GFP_KERNEL);
1231         if (!ar)                                 875         if (!ar)
1232                 return ERR_PTR(-ENOMEM);         876                 return ERR_PTR(-ENOMEM);
1233                                                  877 
1234         spin_lock(&simple_transaction_lock);     878         spin_lock(&simple_transaction_lock);
1235                                                  879 
1236         /* only one write allowed per open */    880         /* only one write allowed per open */
1237         if (file->private_data) {                881         if (file->private_data) {
1238                 spin_unlock(&simple_transacti    882                 spin_unlock(&simple_transaction_lock);
1239                 free_page((unsigned long)ar);    883                 free_page((unsigned long)ar);
1240                 return ERR_PTR(-EBUSY);          884                 return ERR_PTR(-EBUSY);
1241         }                                        885         }
1242                                                  886 
1243         file->private_data = ar;                 887         file->private_data = ar;
1244                                                  888 
1245         spin_unlock(&simple_transaction_lock)    889         spin_unlock(&simple_transaction_lock);
1246                                                  890 
1247         if (copy_from_user(ar->data, buf, siz    891         if (copy_from_user(ar->data, buf, size))
1248                 return ERR_PTR(-EFAULT);         892                 return ERR_PTR(-EFAULT);
1249                                                  893 
1250         return ar->data;                         894         return ar->data;
1251 }                                                895 }
1252 EXPORT_SYMBOL(simple_transaction_get);           896 EXPORT_SYMBOL(simple_transaction_get);
1253                                                  897 
1254 ssize_t simple_transaction_read(struct file *    898 ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
1255 {                                                899 {
1256         struct simple_transaction_argresp *ar    900         struct simple_transaction_argresp *ar = file->private_data;
1257                                                  901 
1258         if (!ar)                                 902         if (!ar)
1259                 return 0;                        903                 return 0;
1260         return simple_read_from_buffer(buf, s    904         return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
1261 }                                                905 }
1262 EXPORT_SYMBOL(simple_transaction_read);          906 EXPORT_SYMBOL(simple_transaction_read);
1263                                                  907 
1264 int simple_transaction_release(struct inode *    908 int simple_transaction_release(struct inode *inode, struct file *file)
1265 {                                                909 {
1266         free_page((unsigned long)file->privat    910         free_page((unsigned long)file->private_data);
1267         return 0;                                911         return 0;
1268 }                                                912 }
1269 EXPORT_SYMBOL(simple_transaction_release);       913 EXPORT_SYMBOL(simple_transaction_release);
1270                                                  914 
1271 /* Simple attribute files */                     915 /* Simple attribute files */
1272                                                  916 
1273 struct simple_attr {                             917 struct simple_attr {
1274         int (*get)(void *, u64 *);               918         int (*get)(void *, u64 *);
1275         int (*set)(void *, u64);                 919         int (*set)(void *, u64);
1276         char get_buf[24];       /* enough to     920         char get_buf[24];       /* enough to store a u64 and "\n\0" */
1277         char set_buf[24];                        921         char set_buf[24];
1278         void *data;                              922         void *data;
1279         const char *fmt;        /* format for    923         const char *fmt;        /* format for read operation */
1280         struct mutex mutex;     /* protects a    924         struct mutex mutex;     /* protects access to these buffers */
1281 };                                               925 };
1282                                                  926 
1283 /* simple_attr_open is called by an actual at    927 /* simple_attr_open is called by an actual attribute open file operation
1284  * to set the attribute specific access opera    928  * to set the attribute specific access operations. */
1285 int simple_attr_open(struct inode *inode, str    929 int simple_attr_open(struct inode *inode, struct file *file,
1286                      int (*get)(void *, u64 *    930                      int (*get)(void *, u64 *), int (*set)(void *, u64),
1287                      const char *fmt)            931                      const char *fmt)
1288 {                                                932 {
1289         struct simple_attr *attr;                933         struct simple_attr *attr;
1290                                                  934 
1291         attr = kzalloc(sizeof(*attr), GFP_KER    935         attr = kzalloc(sizeof(*attr), GFP_KERNEL);
1292         if (!attr)                               936         if (!attr)
1293                 return -ENOMEM;                  937                 return -ENOMEM;
1294                                                  938 
1295         attr->get = get;                         939         attr->get = get;
1296         attr->set = set;                         940         attr->set = set;
1297         attr->data = inode->i_private;           941         attr->data = inode->i_private;
1298         attr->fmt = fmt;                         942         attr->fmt = fmt;
1299         mutex_init(&attr->mutex);                943         mutex_init(&attr->mutex);
1300                                                  944 
1301         file->private_data = attr;               945         file->private_data = attr;
1302                                                  946 
1303         return nonseekable_open(inode, file);    947         return nonseekable_open(inode, file);
1304 }                                                948 }
1305 EXPORT_SYMBOL_GPL(simple_attr_open);             949 EXPORT_SYMBOL_GPL(simple_attr_open);
1306                                                  950 
1307 int simple_attr_release(struct inode *inode,     951 int simple_attr_release(struct inode *inode, struct file *file)
1308 {                                                952 {
1309         kfree(file->private_data);               953         kfree(file->private_data);
1310         return 0;                                954         return 0;
1311 }                                                955 }
1312 EXPORT_SYMBOL_GPL(simple_attr_release); /* GP    956 EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only?  This?  Really? */
1313                                                  957 
1314 /* read from the buffer that is filled with t    958 /* read from the buffer that is filled with the get function */
1315 ssize_t simple_attr_read(struct file *file, c    959 ssize_t simple_attr_read(struct file *file, char __user *buf,
1316                          size_t len, loff_t *    960                          size_t len, loff_t *ppos)
1317 {                                                961 {
1318         struct simple_attr *attr;                962         struct simple_attr *attr;
1319         size_t size;                             963         size_t size;
1320         ssize_t ret;                             964         ssize_t ret;
1321                                                  965 
1322         attr = file->private_data;               966         attr = file->private_data;
1323                                                  967 
1324         if (!attr->get)                          968         if (!attr->get)
1325                 return -EACCES;                  969                 return -EACCES;
1326                                                  970 
1327         ret = mutex_lock_interruptible(&attr-    971         ret = mutex_lock_interruptible(&attr->mutex);
1328         if (ret)                                 972         if (ret)
1329                 return ret;                      973                 return ret;
1330                                                  974 
1331         if (*ppos && attr->get_buf[0]) {         975         if (*ppos && attr->get_buf[0]) {
1332                 /* continued read */             976                 /* continued read */
1333                 size = strlen(attr->get_buf);    977                 size = strlen(attr->get_buf);
1334         } else {                                 978         } else {
1335                 /* first read */                 979                 /* first read */
1336                 u64 val;                         980                 u64 val;
1337                 ret = attr->get(attr->data, &    981                 ret = attr->get(attr->data, &val);
1338                 if (ret)                         982                 if (ret)
1339                         goto out;                983                         goto out;
1340                                                  984 
1341                 size = scnprintf(attr->get_bu    985                 size = scnprintf(attr->get_buf, sizeof(attr->get_buf),
1342                                  attr->fmt, (    986                                  attr->fmt, (unsigned long long)val);
1343         }                                        987         }
1344                                                  988 
1345         ret = simple_read_from_buffer(buf, le    989         ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size);
1346 out:                                             990 out:
1347         mutex_unlock(&attr->mutex);              991         mutex_unlock(&attr->mutex);
1348         return ret;                              992         return ret;
1349 }                                                993 }
1350 EXPORT_SYMBOL_GPL(simple_attr_read);             994 EXPORT_SYMBOL_GPL(simple_attr_read);
1351                                                  995 
1352 /* interpret the buffer as a number to call t    996 /* interpret the buffer as a number to call the set function with */
1353 static ssize_t simple_attr_write_xsigned(stru !! 997 ssize_t simple_attr_write(struct file *file, const char __user *buf,
1354                           size_t len, loff_t  !! 998                           size_t len, loff_t *ppos)
1355 {                                                999 {
1356         struct simple_attr *attr;                1000         struct simple_attr *attr;
1357         unsigned long long val;                  1001         unsigned long long val;
1358         size_t size;                             1002         size_t size;
1359         ssize_t ret;                             1003         ssize_t ret;
1360                                                  1004 
1361         attr = file->private_data;               1005         attr = file->private_data;
1362         if (!attr->set)                          1006         if (!attr->set)
1363                 return -EACCES;                  1007                 return -EACCES;
1364                                                  1008 
1365         ret = mutex_lock_interruptible(&attr-    1009         ret = mutex_lock_interruptible(&attr->mutex);
1366         if (ret)                                 1010         if (ret)
1367                 return ret;                      1011                 return ret;
1368                                                  1012 
1369         ret = -EFAULT;                           1013         ret = -EFAULT;
1370         size = min(sizeof(attr->set_buf) - 1,    1014         size = min(sizeof(attr->set_buf) - 1, len);
1371         if (copy_from_user(attr->set_buf, buf    1015         if (copy_from_user(attr->set_buf, buf, size))
1372                 goto out;                        1016                 goto out;
1373                                                  1017 
1374         attr->set_buf[size] = '\0';              1018         attr->set_buf[size] = '\0';
1375         if (is_signed)                        !! 1019         ret = kstrtoull(attr->set_buf, 0, &val);
1376                 ret = kstrtoll(attr->set_buf, << 
1377         else                                  << 
1378                 ret = kstrtoull(attr->set_buf << 
1379         if (ret)                                 1020         if (ret)
1380                 goto out;                        1021                 goto out;
1381         ret = attr->set(attr->data, val);        1022         ret = attr->set(attr->data, val);
1382         if (ret == 0)                            1023         if (ret == 0)
1383                 ret = len; /* on success, cla    1024                 ret = len; /* on success, claim we got the whole input */
1384 out:                                             1025 out:
1385         mutex_unlock(&attr->mutex);              1026         mutex_unlock(&attr->mutex);
1386         return ret;                              1027         return ret;
1387 }                                                1028 }
1388                                               << 
1389 ssize_t simple_attr_write(struct file *file,  << 
1390                           size_t len, loff_t  << 
1391 {                                             << 
1392         return simple_attr_write_xsigned(file << 
1393 }                                             << 
1394 EXPORT_SYMBOL_GPL(simple_attr_write);            1029 EXPORT_SYMBOL_GPL(simple_attr_write);
1395                                                  1030 
1396 ssize_t simple_attr_write_signed(struct file  << 
1397                           size_t len, loff_t  << 
1398 {                                             << 
1399         return simple_attr_write_xsigned(file << 
1400 }                                             << 
1401 EXPORT_SYMBOL_GPL(simple_attr_write_signed);  << 
1402                                               << 
1403 /**                                           << 
1404  * generic_encode_ino32_fh - generic export_o << 
1405  * @inode:   the object to encode             << 
1406  * @fh:      where to store the file handle f << 
1407  * @max_len: maximum length to store there (i << 
1408  * @parent:  parent directory inode, if wante << 
1409  *                                            << 
1410  * This generic encode_fh function assumes th << 
1411  * is suitable for locating an inode, and tha << 
1412  * can be used to check that it is still vali << 
1413  * filehandle fragment where export_decode_fh << 
1414  */                                           << 
1415 int generic_encode_ino32_fh(struct inode *ino << 
1416                             struct inode *par << 
1417 {                                             << 
1418         struct fid *fid = (void *)fh;         << 
1419         int len = *max_len;                   << 
1420         int type = FILEID_INO32_GEN;          << 
1421                                               << 
1422         if (parent && (len < 4)) {            << 
1423                 *max_len = 4;                 << 
1424                 return FILEID_INVALID;        << 
1425         } else if (len < 2) {                 << 
1426                 *max_len = 2;                 << 
1427                 return FILEID_INVALID;        << 
1428         }                                     << 
1429                                               << 
1430         len = 2;                              << 
1431         fid->i32.ino = inode->i_ino;          << 
1432         fid->i32.gen = inode->i_generation;   << 
1433         if (parent) {                         << 
1434                 fid->i32.parent_ino = parent- << 
1435                 fid->i32.parent_gen = parent- << 
1436                 len = 4;                      << 
1437                 type = FILEID_INO32_GEN_PAREN << 
1438         }                                     << 
1439         *max_len = len;                       << 
1440         return type;                          << 
1441 }                                             << 
1442 EXPORT_SYMBOL_GPL(generic_encode_ino32_fh);   << 
1443                                               << 
1444 /**                                              1031 /**
1445  * generic_fh_to_dentry - generic helper for     1032  * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
1446  * @sb:         filesystem to do the file han    1033  * @sb:         filesystem to do the file handle conversion on
1447  * @fid:        file handle to convert           1034  * @fid:        file handle to convert
1448  * @fh_len:     length of the file handle in     1035  * @fh_len:     length of the file handle in bytes
1449  * @fh_type:    type of file handle              1036  * @fh_type:    type of file handle
1450  * @get_inode:  filesystem callback to retrie    1037  * @get_inode:  filesystem callback to retrieve inode
1451  *                                               1038  *
1452  * This function decodes @fid as long as it h    1039  * This function decodes @fid as long as it has one of the well-known
1453  * Linux filehandle types and calls @get_inod    1040  * Linux filehandle types and calls @get_inode on it to retrieve the
1454  * inode for the object specified in the file    1041  * inode for the object specified in the file handle.
1455  */                                              1042  */
1456 struct dentry *generic_fh_to_dentry(struct su    1043 struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid,
1457                 int fh_len, int fh_type, stru    1044                 int fh_len, int fh_type, struct inode *(*get_inode)
1458                         (struct super_block *    1045                         (struct super_block *sb, u64 ino, u32 gen))
1459 {                                                1046 {
1460         struct inode *inode = NULL;              1047         struct inode *inode = NULL;
1461                                                  1048 
1462         if (fh_len < 2)                          1049         if (fh_len < 2)
1463                 return NULL;                     1050                 return NULL;
1464                                                  1051 
1465         switch (fh_type) {                       1052         switch (fh_type) {
1466         case FILEID_INO32_GEN:                   1053         case FILEID_INO32_GEN:
1467         case FILEID_INO32_GEN_PARENT:            1054         case FILEID_INO32_GEN_PARENT:
1468                 inode = get_inode(sb, fid->i3    1055                 inode = get_inode(sb, fid->i32.ino, fid->i32.gen);
1469                 break;                           1056                 break;
1470         }                                        1057         }
1471                                                  1058 
1472         return d_obtain_alias(inode);            1059         return d_obtain_alias(inode);
1473 }                                                1060 }
1474 EXPORT_SYMBOL_GPL(generic_fh_to_dentry);         1061 EXPORT_SYMBOL_GPL(generic_fh_to_dentry);
1475                                                  1062 
1476 /**                                              1063 /**
1477  * generic_fh_to_parent - generic helper for     1064  * generic_fh_to_parent - generic helper for the fh_to_parent export operation
1478  * @sb:         filesystem to do the file han    1065  * @sb:         filesystem to do the file handle conversion on
1479  * @fid:        file handle to convert           1066  * @fid:        file handle to convert
1480  * @fh_len:     length of the file handle in     1067  * @fh_len:     length of the file handle in bytes
1481  * @fh_type:    type of file handle              1068  * @fh_type:    type of file handle
1482  * @get_inode:  filesystem callback to retrie    1069  * @get_inode:  filesystem callback to retrieve inode
1483  *                                               1070  *
1484  * This function decodes @fid as long as it h    1071  * This function decodes @fid as long as it has one of the well-known
1485  * Linux filehandle types and calls @get_inod    1072  * Linux filehandle types and calls @get_inode on it to retrieve the
1486  * inode for the _parent_ object specified in    1073  * inode for the _parent_ object specified in the file handle if it
1487  * is specified in the file handle, or NULL o    1074  * is specified in the file handle, or NULL otherwise.
1488  */                                              1075  */
1489 struct dentry *generic_fh_to_parent(struct su    1076 struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,
1490                 int fh_len, int fh_type, stru    1077                 int fh_len, int fh_type, struct inode *(*get_inode)
1491                         (struct super_block *    1078                         (struct super_block *sb, u64 ino, u32 gen))
1492 {                                                1079 {
1493         struct inode *inode = NULL;              1080         struct inode *inode = NULL;
1494                                                  1081 
1495         if (fh_len <= 2)                         1082         if (fh_len <= 2)
1496                 return NULL;                     1083                 return NULL;
1497                                                  1084 
1498         switch (fh_type) {                       1085         switch (fh_type) {
1499         case FILEID_INO32_GEN_PARENT:            1086         case FILEID_INO32_GEN_PARENT:
1500                 inode = get_inode(sb, fid->i3    1087                 inode = get_inode(sb, fid->i32.parent_ino,
1501                                   (fh_len > 3    1088                                   (fh_len > 3 ? fid->i32.parent_gen : 0));
1502                 break;                           1089                 break;
1503         }                                        1090         }
1504                                                  1091 
1505         return d_obtain_alias(inode);            1092         return d_obtain_alias(inode);
1506 }                                                1093 }
1507 EXPORT_SYMBOL_GPL(generic_fh_to_parent);         1094 EXPORT_SYMBOL_GPL(generic_fh_to_parent);
1508                                                  1095 
1509 /**                                              1096 /**
1510  * __generic_file_fsync - generic fsync imple    1097  * __generic_file_fsync - generic fsync implementation for simple filesystems
1511  *                                               1098  *
1512  * @file:       file to synchronize              1099  * @file:       file to synchronize
1513  * @start:      start offset in bytes            1100  * @start:      start offset in bytes
1514  * @end:        end offset in bytes (inclusiv    1101  * @end:        end offset in bytes (inclusive)
1515  * @datasync:   only synchronize essential me    1102  * @datasync:   only synchronize essential metadata if true
1516  *                                               1103  *
1517  * This is a generic implementation of the fs    1104  * This is a generic implementation of the fsync method for simple
1518  * filesystems which track all non-inode meta    1105  * filesystems which track all non-inode metadata in the buffers list
1519  * hanging off the address_space structure.      1106  * hanging off the address_space structure.
1520  */                                              1107  */
1521 int __generic_file_fsync(struct file *file, l    1108 int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
1522                                  int datasync    1109                                  int datasync)
1523 {                                                1110 {
1524         struct inode *inode = file->f_mapping    1111         struct inode *inode = file->f_mapping->host;
1525         int err;                                 1112         int err;
1526         int ret;                                 1113         int ret;
1527                                                  1114 
1528         err = file_write_and_wait_range(file,    1115         err = file_write_and_wait_range(file, start, end);
1529         if (err)                                 1116         if (err)
1530                 return err;                      1117                 return err;
1531                                                  1118 
1532         inode_lock(inode);                       1119         inode_lock(inode);
1533         ret = sync_mapping_buffers(inode->i_m    1120         ret = sync_mapping_buffers(inode->i_mapping);
1534         if (!(inode->i_state & I_DIRTY_ALL))     1121         if (!(inode->i_state & I_DIRTY_ALL))
1535                 goto out;                        1122                 goto out;
1536         if (datasync && !(inode->i_state & I_    1123         if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
1537                 goto out;                        1124                 goto out;
1538                                                  1125 
1539         err = sync_inode_metadata(inode, 1);     1126         err = sync_inode_metadata(inode, 1);
1540         if (ret == 0)                            1127         if (ret == 0)
1541                 ret = err;                       1128                 ret = err;
1542                                                  1129 
1543 out:                                             1130 out:
1544         inode_unlock(inode);                     1131         inode_unlock(inode);
1545         /* check and advance again to catch e    1132         /* check and advance again to catch errors after syncing out buffers */
1546         err = file_check_and_advance_wb_err(f    1133         err = file_check_and_advance_wb_err(file);
1547         if (ret == 0)                            1134         if (ret == 0)
1548                 ret = err;                       1135                 ret = err;
1549         return ret;                              1136         return ret;
1550 }                                                1137 }
1551 EXPORT_SYMBOL(__generic_file_fsync);             1138 EXPORT_SYMBOL(__generic_file_fsync);
1552                                                  1139 
1553 /**                                              1140 /**
1554  * generic_file_fsync - generic fsync impleme    1141  * generic_file_fsync - generic fsync implementation for simple filesystems
1555  *                      with flush               1142  *                      with flush
1556  * @file:       file to synchronize              1143  * @file:       file to synchronize
1557  * @start:      start offset in bytes            1144  * @start:      start offset in bytes
1558  * @end:        end offset in bytes (inclusiv    1145  * @end:        end offset in bytes (inclusive)
1559  * @datasync:   only synchronize essential me    1146  * @datasync:   only synchronize essential metadata if true
1560  *                                               1147  *
1561  */                                              1148  */
1562                                                  1149 
1563 int generic_file_fsync(struct file *file, lof    1150 int generic_file_fsync(struct file *file, loff_t start, loff_t end,
1564                        int datasync)             1151                        int datasync)
1565 {                                                1152 {
1566         struct inode *inode = file->f_mapping    1153         struct inode *inode = file->f_mapping->host;
1567         int err;                                 1154         int err;
1568                                                  1155 
1569         err = __generic_file_fsync(file, star    1156         err = __generic_file_fsync(file, start, end, datasync);
1570         if (err)                                 1157         if (err)
1571                 return err;                      1158                 return err;
1572         return blkdev_issue_flush(inode->i_sb    1159         return blkdev_issue_flush(inode->i_sb->s_bdev);
1573 }                                                1160 }
1574 EXPORT_SYMBOL(generic_file_fsync);               1161 EXPORT_SYMBOL(generic_file_fsync);
1575                                                  1162 
1576 /**                                              1163 /**
1577  * generic_check_addressable - Check addressa    1164  * generic_check_addressable - Check addressability of file system
1578  * @blocksize_bits:     log of file system bl    1165  * @blocksize_bits:     log of file system block size
1579  * @num_blocks:         number of blocks in f    1166  * @num_blocks:         number of blocks in file system
1580  *                                               1167  *
1581  * Determine whether a file system with @num_    1168  * Determine whether a file system with @num_blocks blocks (and a
1582  * block size of 2**@blocksize_bits) is addre    1169  * block size of 2**@blocksize_bits) is addressable by the sector_t
1583  * and page cache of the system.  Return 0 if    1170  * and page cache of the system.  Return 0 if so and -EFBIG otherwise.
1584  */                                              1171  */
1585 int generic_check_addressable(unsigned blocks    1172 int generic_check_addressable(unsigned blocksize_bits, u64 num_blocks)
1586 {                                                1173 {
1587         u64 last_fs_block = num_blocks - 1;      1174         u64 last_fs_block = num_blocks - 1;
1588         u64 last_fs_page =                       1175         u64 last_fs_page =
1589                 last_fs_block >> (PAGE_SHIFT     1176                 last_fs_block >> (PAGE_SHIFT - blocksize_bits);
1590                                                  1177 
1591         if (unlikely(num_blocks == 0))           1178         if (unlikely(num_blocks == 0))
1592                 return 0;                        1179                 return 0;
1593                                                  1180 
1594         if ((blocksize_bits < 9) || (blocksiz    1181         if ((blocksize_bits < 9) || (blocksize_bits > PAGE_SHIFT))
1595                 return -EINVAL;                  1182                 return -EINVAL;
1596                                                  1183 
1597         if ((last_fs_block > (sector_t)(~0ULL    1184         if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) ||
1598             (last_fs_page > (pgoff_t)(~0ULL))    1185             (last_fs_page > (pgoff_t)(~0ULL))) {
1599                 return -EFBIG;                   1186                 return -EFBIG;
1600         }                                        1187         }
1601         return 0;                                1188         return 0;
1602 }                                                1189 }
1603 EXPORT_SYMBOL(generic_check_addressable);        1190 EXPORT_SYMBOL(generic_check_addressable);
1604                                                  1191 
1605 /*                                               1192 /*
1606  * No-op implementation of ->fsync for in-mem    1193  * No-op implementation of ->fsync for in-memory filesystems.
1607  */                                              1194  */
1608 int noop_fsync(struct file *file, loff_t star    1195 int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1609 {                                                1196 {
1610         return 0;                                1197         return 0;
1611 }                                                1198 }
1612 EXPORT_SYMBOL(noop_fsync);                       1199 EXPORT_SYMBOL(noop_fsync);
1613                                                  1200 
                                                   >> 1201 void noop_invalidatepage(struct page *page, unsigned int offset,
                                                   >> 1202                 unsigned int length)
                                                   >> 1203 {
                                                   >> 1204         /*
                                                   >> 1205          * There is no page cache to invalidate in the dax case, however
                                                   >> 1206          * we need this callback defined to prevent falling back to
                                                   >> 1207          * block_invalidatepage() in do_invalidatepage().
                                                   >> 1208          */
                                                   >> 1209 }
                                                   >> 1210 EXPORT_SYMBOL_GPL(noop_invalidatepage);
                                                   >> 1211 
1614 ssize_t noop_direct_IO(struct kiocb *iocb, st    1212 ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
1615 {                                                1213 {
1616         /*                                       1214         /*
1617          * iomap based filesystems support di    1215          * iomap based filesystems support direct I/O without need for
1618          * this callback. However, it still n    1216          * this callback. However, it still needs to be set in
1619          * inode->a_ops so that open/fcntl kn    1217          * inode->a_ops so that open/fcntl know that direct I/O is
1620          * generally supported.                  1218          * generally supported.
1621          */                                      1219          */
1622         return -EINVAL;                          1220         return -EINVAL;
1623 }                                                1221 }
1624 EXPORT_SYMBOL_GPL(noop_direct_IO);               1222 EXPORT_SYMBOL_GPL(noop_direct_IO);
1625                                                  1223 
1626 /* Because kfree isn't assignment-compatible     1224 /* Because kfree isn't assignment-compatible with void(void*) ;-/ */
1627 void kfree_link(void *p)                         1225 void kfree_link(void *p)
1628 {                                                1226 {
1629         kfree(p);                                1227         kfree(p);
1630 }                                                1228 }
1631 EXPORT_SYMBOL(kfree_link);                       1229 EXPORT_SYMBOL(kfree_link);
1632                                                  1230 
1633 struct inode *alloc_anon_inode(struct super_b    1231 struct inode *alloc_anon_inode(struct super_block *s)
1634 {                                                1232 {
1635         static const struct address_space_ope    1233         static const struct address_space_operations anon_aops = {
1636                 .dirty_folio    = noop_dirty_ !! 1234                 .set_page_dirty = __set_page_dirty_no_writeback,
1637         };                                       1235         };
1638         struct inode *inode = new_inode_pseud    1236         struct inode *inode = new_inode_pseudo(s);
1639                                                  1237 
1640         if (!inode)                              1238         if (!inode)
1641                 return ERR_PTR(-ENOMEM);         1239                 return ERR_PTR(-ENOMEM);
1642                                                  1240 
1643         inode->i_ino = get_next_ino();           1241         inode->i_ino = get_next_ino();
1644         inode->i_mapping->a_ops = &anon_aops;    1242         inode->i_mapping->a_ops = &anon_aops;
1645                                                  1243 
1646         /*                                       1244         /*
1647          * Mark the inode dirty from the very    1245          * Mark the inode dirty from the very beginning,
1648          * that way it will never be moved to    1246          * that way it will never be moved to the dirty
1649          * list because mark_inode_dirty() wi    1247          * list because mark_inode_dirty() will think
1650          * that it already _is_ on the dirty     1248          * that it already _is_ on the dirty list.
1651          */                                      1249          */
1652         inode->i_state = I_DIRTY;                1250         inode->i_state = I_DIRTY;
1653         inode->i_mode = S_IRUSR | S_IWUSR;       1251         inode->i_mode = S_IRUSR | S_IWUSR;
1654         inode->i_uid = current_fsuid();          1252         inode->i_uid = current_fsuid();
1655         inode->i_gid = current_fsgid();          1253         inode->i_gid = current_fsgid();
1656         inode->i_flags |= S_PRIVATE;             1254         inode->i_flags |= S_PRIVATE;
1657         simple_inode_init_ts(inode);          !! 1255         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1658         return inode;                            1256         return inode;
1659 }                                                1257 }
1660 EXPORT_SYMBOL(alloc_anon_inode);                 1258 EXPORT_SYMBOL(alloc_anon_inode);
1661                                                  1259 
1662 /**                                              1260 /**
1663  * simple_nosetlease - generic helper for pro    1261  * simple_nosetlease - generic helper for prohibiting leases
1664  * @filp: file pointer                           1262  * @filp: file pointer
1665  * @arg: type of lease to obtain                 1263  * @arg: type of lease to obtain
1666  * @flp: new lease supplied for insertion        1264  * @flp: new lease supplied for insertion
1667  * @priv: private data for lm_setup operation    1265  * @priv: private data for lm_setup operation
1668  *                                               1266  *
1669  * Generic helper for filesystems that do not    1267  * Generic helper for filesystems that do not wish to allow leases to be set.
1670  * All arguments are ignored and it just retu    1268  * All arguments are ignored and it just returns -EINVAL.
1671  */                                              1269  */
1672 int                                              1270 int
1673 simple_nosetlease(struct file *filp, int arg, !! 1271 simple_nosetlease(struct file *filp, long arg, struct file_lock **flp,
1674                   void **priv)                   1272                   void **priv)
1675 {                                                1273 {
1676         return -EINVAL;                          1274         return -EINVAL;
1677 }                                                1275 }
1678 EXPORT_SYMBOL(simple_nosetlease);                1276 EXPORT_SYMBOL(simple_nosetlease);
1679                                                  1277 
1680 /**                                              1278 /**
1681  * simple_get_link - generic helper to get th    1279  * simple_get_link - generic helper to get the target of "fast" symlinks
1682  * @dentry: not used here                        1280  * @dentry: not used here
1683  * @inode: the symlink inode                     1281  * @inode: the symlink inode
1684  * @done: not used here                          1282  * @done: not used here
1685  *                                               1283  *
1686  * Generic helper for filesystems to use for     1284  * Generic helper for filesystems to use for symlink inodes where a pointer to
1687  * the symlink target is stored in ->i_link.     1285  * the symlink target is stored in ->i_link.  NOTE: this isn't normally called,
1688  * since as an optimization the path lookup c    1286  * since as an optimization the path lookup code uses any non-NULL ->i_link
1689  * directly, without calling ->get_link().  B    1287  * directly, without calling ->get_link().  But ->get_link() still must be set,
1690  * to mark the inode_operations as being for     1288  * to mark the inode_operations as being for a symlink.
1691  *                                               1289  *
1692  * Return: the symlink target                    1290  * Return: the symlink target
1693  */                                              1291  */
1694 const char *simple_get_link(struct dentry *de    1292 const char *simple_get_link(struct dentry *dentry, struct inode *inode,
1695                             struct delayed_ca    1293                             struct delayed_call *done)
1696 {                                                1294 {
1697         return inode->i_link;                    1295         return inode->i_link;
1698 }                                                1296 }
1699 EXPORT_SYMBOL(simple_get_link);                  1297 EXPORT_SYMBOL(simple_get_link);
1700                                                  1298 
1701 const struct inode_operations simple_symlink_    1299 const struct inode_operations simple_symlink_inode_operations = {
1702         .get_link = simple_get_link,             1300         .get_link = simple_get_link,
1703 };                                               1301 };
1704 EXPORT_SYMBOL(simple_symlink_inode_operations    1302 EXPORT_SYMBOL(simple_symlink_inode_operations);
1705                                                  1303 
1706 /*                                               1304 /*
1707  * Operations for a permanently empty directo    1305  * Operations for a permanently empty directory.
1708  */                                              1306  */
1709 static struct dentry *empty_dir_lookup(struct    1307 static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
1710 {                                                1308 {
1711         return ERR_PTR(-ENOENT);                 1309         return ERR_PTR(-ENOENT);
1712 }                                                1310 }
1713                                                  1311 
1714 static int empty_dir_getattr(struct mnt_idmap !! 1312 static int empty_dir_getattr(struct user_namespace *mnt_userns,
1715                              const struct pat    1313                              const struct path *path, struct kstat *stat,
1716                              u32 request_mask    1314                              u32 request_mask, unsigned int query_flags)
1717 {                                                1315 {
1718         struct inode *inode = d_inode(path->d    1316         struct inode *inode = d_inode(path->dentry);
1719         generic_fillattr(&nop_mnt_idmap, requ !! 1317         generic_fillattr(&init_user_ns, inode, stat);
1720         return 0;                                1318         return 0;
1721 }                                                1319 }
1722                                                  1320 
1723 static int empty_dir_setattr(struct mnt_idmap !! 1321 static int empty_dir_setattr(struct user_namespace *mnt_userns,
1724                              struct dentry *d    1322                              struct dentry *dentry, struct iattr *attr)
1725 {                                                1323 {
1726         return -EPERM;                           1324         return -EPERM;
1727 }                                                1325 }
1728                                                  1326 
1729 static ssize_t empty_dir_listxattr(struct den    1327 static ssize_t empty_dir_listxattr(struct dentry *dentry, char *list, size_t size)
1730 {                                                1328 {
1731         return -EOPNOTSUPP;                      1329         return -EOPNOTSUPP;
1732 }                                                1330 }
1733                                                  1331 
1734 static const struct inode_operations empty_di    1332 static const struct inode_operations empty_dir_inode_operations = {
1735         .lookup         = empty_dir_lookup,      1333         .lookup         = empty_dir_lookup,
1736         .permission     = generic_permission,    1334         .permission     = generic_permission,
1737         .setattr        = empty_dir_setattr,     1335         .setattr        = empty_dir_setattr,
1738         .getattr        = empty_dir_getattr,     1336         .getattr        = empty_dir_getattr,
1739         .listxattr      = empty_dir_listxattr    1337         .listxattr      = empty_dir_listxattr,
1740 };                                               1338 };
1741                                                  1339 
1742 static loff_t empty_dir_llseek(struct file *f    1340 static loff_t empty_dir_llseek(struct file *file, loff_t offset, int whence)
1743 {                                                1341 {
1744         /* An empty directory has two entries    1342         /* An empty directory has two entries . and .. at offsets 0 and 1 */
1745         return generic_file_llseek_size(file,    1343         return generic_file_llseek_size(file, offset, whence, 2, 2);
1746 }                                                1344 }
1747                                                  1345 
1748 static int empty_dir_readdir(struct file *fil    1346 static int empty_dir_readdir(struct file *file, struct dir_context *ctx)
1749 {                                                1347 {
1750         dir_emit_dots(file, ctx);                1348         dir_emit_dots(file, ctx);
1751         return 0;                                1349         return 0;
1752 }                                                1350 }
1753                                                  1351 
1754 static const struct file_operations empty_dir    1352 static const struct file_operations empty_dir_operations = {
1755         .llseek         = empty_dir_llseek,      1353         .llseek         = empty_dir_llseek,
1756         .read           = generic_read_dir,      1354         .read           = generic_read_dir,
1757         .iterate_shared = empty_dir_readdir,     1355         .iterate_shared = empty_dir_readdir,
1758         .fsync          = noop_fsync,            1356         .fsync          = noop_fsync,
1759 };                                               1357 };
1760                                                  1358 
1761                                                  1359 
1762 void make_empty_dir_inode(struct inode *inode    1360 void make_empty_dir_inode(struct inode *inode)
1763 {                                                1361 {
1764         set_nlink(inode, 2);                     1362         set_nlink(inode, 2);
1765         inode->i_mode = S_IFDIR | S_IRUGO | S    1363         inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO;
1766         inode->i_uid = GLOBAL_ROOT_UID;          1364         inode->i_uid = GLOBAL_ROOT_UID;
1767         inode->i_gid = GLOBAL_ROOT_GID;          1365         inode->i_gid = GLOBAL_ROOT_GID;
1768         inode->i_rdev = 0;                       1366         inode->i_rdev = 0;
1769         inode->i_size = 0;                       1367         inode->i_size = 0;
1770         inode->i_blkbits = PAGE_SHIFT;           1368         inode->i_blkbits = PAGE_SHIFT;
1771         inode->i_blocks = 0;                     1369         inode->i_blocks = 0;
1772                                                  1370 
1773         inode->i_op = &empty_dir_inode_operat    1371         inode->i_op = &empty_dir_inode_operations;
1774         inode->i_opflags &= ~IOP_XATTR;          1372         inode->i_opflags &= ~IOP_XATTR;
1775         inode->i_fop = &empty_dir_operations;    1373         inode->i_fop = &empty_dir_operations;
1776 }                                                1374 }
1777                                                  1375 
1778 bool is_empty_dir_inode(struct inode *inode)     1376 bool is_empty_dir_inode(struct inode *inode)
1779 {                                                1377 {
1780         return (inode->i_fop == &empty_dir_op    1378         return (inode->i_fop == &empty_dir_operations) &&
1781                 (inode->i_op == &empty_dir_in    1379                 (inode->i_op == &empty_dir_inode_operations);
1782 }                                                1380 }
1783                                                  1381 
1784 #if IS_ENABLED(CONFIG_UNICODE)                   1382 #if IS_ENABLED(CONFIG_UNICODE)
                                                   >> 1383 /*
                                                   >> 1384  * Determine if the name of a dentry should be casefolded.
                                                   >> 1385  *
                                                   >> 1386  * Return: if names will need casefolding
                                                   >> 1387  */
                                                   >> 1388 static bool needs_casefold(const struct inode *dir)
                                                   >> 1389 {
                                                   >> 1390         return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding;
                                                   >> 1391 }
                                                   >> 1392 
1785 /**                                              1393 /**
1786  * generic_ci_d_compare - generic d_compare i    1394  * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
1787  * @dentry:     dentry whose name we are chec    1395  * @dentry:     dentry whose name we are checking against
1788  * @len:        len of name of dentry            1396  * @len:        len of name of dentry
1789  * @str:        str pointer to name of dentry    1397  * @str:        str pointer to name of dentry
1790  * @name:       Name to compare against          1398  * @name:       Name to compare against
1791  *                                               1399  *
1792  * Return: 0 if names match, 1 if mismatch, o    1400  * Return: 0 if names match, 1 if mismatch, or -ERRNO
1793  */                                              1401  */
1794 static int generic_ci_d_compare(const struct     1402 static int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
1795                                 const char *s    1403                                 const char *str, const struct qstr *name)
1796 {                                                1404 {
1797         const struct dentry *parent;          !! 1405         const struct dentry *parent = READ_ONCE(dentry->d_parent);
1798         const struct inode *dir;              !! 1406         const struct inode *dir = READ_ONCE(parent->d_inode);
                                                   >> 1407         const struct super_block *sb = dentry->d_sb;
                                                   >> 1408         const struct unicode_map *um = sb->s_encoding;
                                                   >> 1409         struct qstr qstr = QSTR_INIT(str, len);
1799         char strbuf[DNAME_INLINE_LEN];           1410         char strbuf[DNAME_INLINE_LEN];
1800         struct qstr qstr;                     !! 1411         int ret;
1801                                               << 
1802         /*                                    << 
1803          * Attempt a case-sensitive match fir << 
1804          * should cover most lookups, includi << 
1805          * applications that expect a case-se << 
1806          *                                    << 
1807          * This comparison is safe under RCU  << 
1808          * guarantees the consistency between << 
1809          * __d_lookup_rcu_op_compare() for de << 
1810          */                                   << 
1811         if (len == name->len && !memcmp(str,  << 
1812                 return 0;                     << 
1813                                               << 
1814         parent = READ_ONCE(dentry->d_parent); << 
1815         dir = READ_ONCE(parent->d_inode);     << 
1816         if (!dir || !IS_CASEFOLDED(dir))      << 
1817                 return 1;                     << 
1818                                                  1412 
                                                   >> 1413         if (!dir || !needs_casefold(dir))
                                                   >> 1414                 goto fallback;
1819         /*                                       1415         /*
1820          * If the dentry name is stored in-li    1416          * If the dentry name is stored in-line, then it may be concurrently
1821          * modified by a rename.  If this hap    1417          * modified by a rename.  If this happens, the VFS will eventually retry
1822          * the lookup, so it doesn't matter w    1418          * the lookup, so it doesn't matter what ->d_compare() returns.
1823          * However, it's unsafe to call utf8_    1419          * However, it's unsafe to call utf8_strncasecmp() with an unstable
1824          * string.  Therefore, we have to cop    1420          * string.  Therefore, we have to copy the name into a temporary buffer.
1825          */                                      1421          */
1826         if (len <= DNAME_INLINE_LEN - 1) {       1422         if (len <= DNAME_INLINE_LEN - 1) {
1827                 memcpy(strbuf, str, len);        1423                 memcpy(strbuf, str, len);
1828                 strbuf[len] = 0;                 1424                 strbuf[len] = 0;
1829                 str = strbuf;                 !! 1425                 qstr.name = strbuf;
1830                 /* prevent compiler from opti    1426                 /* prevent compiler from optimizing out the temporary buffer */
1831                 barrier();                       1427                 barrier();
1832         }                                        1428         }
1833         qstr.len = len;                       !! 1429         ret = utf8_strncasecmp(um, name, &qstr);
1834         qstr.name = str;                      !! 1430         if (ret >= 0)
                                                   >> 1431                 return ret;
1835                                                  1432 
1836         return utf8_strncasecmp(dentry->d_sb- !! 1433         if (sb_has_strict_encoding(sb))
                                                   >> 1434                 return -EINVAL;
                                                   >> 1435 fallback:
                                                   >> 1436         if (len != name->len)
                                                   >> 1437                 return 1;
                                                   >> 1438         return !!memcmp(str, name->name, len);
1837 }                                                1439 }
1838                                                  1440 
1839 /**                                              1441 /**
1840  * generic_ci_d_hash - generic d_hash impleme    1442  * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
1841  * @dentry:     dentry of the parent director    1443  * @dentry:     dentry of the parent directory
1842  * @str:        qstr of name whose hash we sh    1444  * @str:        qstr of name whose hash we should fill in
1843  *                                               1445  *
1844  * Return: 0 if hash was successful or unchan    1446  * Return: 0 if hash was successful or unchanged, and -EINVAL on error
1845  */                                              1447  */
1846 static int generic_ci_d_hash(const struct den    1448 static int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
1847 {                                                1449 {
1848         const struct inode *dir = READ_ONCE(d    1450         const struct inode *dir = READ_ONCE(dentry->d_inode);
1849         struct super_block *sb = dentry->d_sb    1451         struct super_block *sb = dentry->d_sb;
1850         const struct unicode_map *um = sb->s_    1452         const struct unicode_map *um = sb->s_encoding;
1851         int ret;                              !! 1453         int ret = 0;
1852                                                  1454 
1853         if (!dir || !IS_CASEFOLDED(dir))      !! 1455         if (!dir || !needs_casefold(dir))
1854                 return 0;                        1456                 return 0;
1855                                                  1457 
1856         ret = utf8_casefold_hash(um, dentry,     1458         ret = utf8_casefold_hash(um, dentry, str);
1857         if (ret < 0 && sb_has_strict_encoding    1459         if (ret < 0 && sb_has_strict_encoding(sb))
1858                 return -EINVAL;                  1460                 return -EINVAL;
1859         return 0;                                1461         return 0;
1860 }                                                1462 }
1861                                                  1463 
1862 static const struct dentry_operations generic    1464 static const struct dentry_operations generic_ci_dentry_ops = {
1863         .d_hash = generic_ci_d_hash,             1465         .d_hash = generic_ci_d_hash,
1864         .d_compare = generic_ci_d_compare,       1466         .d_compare = generic_ci_d_compare,
1865 #ifdef CONFIG_FS_ENCRYPTION                   << 
1866         .d_revalidate = fscrypt_d_revalidate, << 
1867 #endif                                        << 
1868 };                                               1467 };
1869                                               << 
1870 /**                                           << 
1871  * generic_ci_match() - Match a name (case-in << 
1872  * This is a filesystem helper for comparison << 
1873  * generic_ci_d_compare should be used in VFS << 
1874  *                                            << 
1875  * @parent: Inode of the parent of the dirent << 
1876  * @name: name under lookup.                  << 
1877  * @folded_name: Optional pre-folded name und << 
1878  * @de_name: Dirent name.                     << 
1879  * @de_name_len: dirent name length.          << 
1880  *                                            << 
1881  * Test whether a case-insensitive directory  << 
1882  * being searched.  If @folded_name is provid << 
1883  * recalculating the casefold of @name.       << 
1884  *                                            << 
1885  * Return: > 0 if the directory entry matches << 
1886  * < 0 on error.                              << 
1887  */                                           << 
1888 int generic_ci_match(const struct inode *pare << 
1889                      const struct qstr *name, << 
1890                      const struct qstr *folde << 
1891                      const u8 *de_name, u32 d << 
1892 {                                             << 
1893         const struct super_block *sb = parent << 
1894         const struct unicode_map *um = sb->s_ << 
1895         struct fscrypt_str decrypted_name = F << 
1896         struct qstr dirent = QSTR_INIT(de_nam << 
1897         int res = 0;                          << 
1898                                               << 
1899         if (IS_ENCRYPTED(parent)) {           << 
1900                 const struct fscrypt_str encr << 
1901                         FSTR_INIT((u8 *) de_n << 
1902                                               << 
1903                 if (WARN_ON_ONCE(!fscrypt_has << 
1904                         return -EINVAL;       << 
1905                                               << 
1906                 decrypted_name.name = kmalloc << 
1907                 if (!decrypted_name.name)     << 
1908                         return -ENOMEM;       << 
1909                 res = fscrypt_fname_disk_to_u << 
1910                                               << 
1911                 if (res < 0) {                << 
1912                         kfree(decrypted_name. << 
1913                         return res;           << 
1914                 }                             << 
1915                 dirent.name = decrypted_name. << 
1916                 dirent.len = decrypted_name.l << 
1917         }                                     << 
1918                                               << 
1919         /*                                    << 
1920          * Attempt a case-sensitive match fir << 
1921          * should cover most lookups, includi << 
1922          * applications that expect a case-se << 
1923          */                                   << 
1924                                               << 
1925         if (dirent.len == name->len &&        << 
1926             !memcmp(name->name, dirent.name,  << 
1927                 goto out;                     << 
1928                                               << 
1929         if (folded_name->name)                << 
1930                 res = utf8_strncasecmp_folded << 
1931         else                                  << 
1932                 res = utf8_strncasecmp(um, na << 
1933                                               << 
1934 out:                                          << 
1935         kfree(decrypted_name.name);           << 
1936         if (res < 0 && sb_has_strict_encoding << 
1937                 pr_err_ratelimited("Directory << 
1938                 return 0;                     << 
1939         }                                     << 
1940         return !res;                          << 
1941 }                                             << 
1942 EXPORT_SYMBOL(generic_ci_match);              << 
1943 #endif                                           1468 #endif
1944                                                  1469 
1945 #ifdef CONFIG_FS_ENCRYPTION                      1470 #ifdef CONFIG_FS_ENCRYPTION
1946 static const struct dentry_operations generic    1471 static const struct dentry_operations generic_encrypted_dentry_ops = {
1947         .d_revalidate = fscrypt_d_revalidate,    1472         .d_revalidate = fscrypt_d_revalidate,
1948 };                                               1473 };
1949 #endif                                           1474 #endif
1950                                                  1475 
                                                   >> 1476 #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE)
                                                   >> 1477 static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
                                                   >> 1478         .d_hash = generic_ci_d_hash,
                                                   >> 1479         .d_compare = generic_ci_d_compare,
                                                   >> 1480         .d_revalidate = fscrypt_d_revalidate,
                                                   >> 1481 };
                                                   >> 1482 #endif
                                                   >> 1483 
1951 /**                                              1484 /**
1952  * generic_set_sb_d_ops - helper for choosing !! 1485  * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
1953  * filesystem-wide dentry operations for the  !! 1486  * @dentry:     dentry to set ops on
1954  * @sb: superblock to be configured           !! 1487  *
1955  *                                            !! 1488  * Casefolded directories need d_hash and d_compare set, so that the dentries
1956  * Filesystems supporting casefolding and/or  !! 1489  * contained in them are handled case-insensitively.  Note that these operations
1957  * helper at mount-time to configure sb->s_d_ !! 1490  * are needed on the parent directory rather than on the dentries in it, and
1958  * operations required for the enabled featur !! 1491  * while the casefolding flag can be toggled on and off on an empty directory,
1959  * called after these have been configured, b !! 1492  * dentry_operations can't be changed later.  As a result, if the filesystem has
1960  * is created.                                !! 1493  * casefolding support enabled at all, we have to give all dentries the
                                                   >> 1494  * casefolding operations even if their inode doesn't have the casefolding flag
                                                   >> 1495  * currently (and thus the casefolding ops would be no-ops for now).
                                                   >> 1496  *
                                                   >> 1497  * Encryption works differently in that the only dentry operation it needs is
                                                   >> 1498  * d_revalidate, which it only needs on dentries that have the no-key name flag.
                                                   >> 1499  * The no-key flag can't be set "later", so we don't have to worry about that.
                                                   >> 1500  *
                                                   >> 1501  * Finally, to maximize compatibility with overlayfs (which isn't compatible
                                                   >> 1502  * with certain dentry operations) and to avoid taking an unnecessary
                                                   >> 1503  * performance hit, we use custom dentry_operations for each possible
                                                   >> 1504  * combination rather than always installing all operations.
1961  */                                              1505  */
1962 void generic_set_sb_d_ops(struct super_block  !! 1506 void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
1963 {                                                1507 {
                                                   >> 1508 #ifdef CONFIG_FS_ENCRYPTION
                                                   >> 1509         bool needs_encrypt_ops = dentry->d_flags & DCACHE_NOKEY_NAME;
                                                   >> 1510 #endif
1964 #if IS_ENABLED(CONFIG_UNICODE)                   1511 #if IS_ENABLED(CONFIG_UNICODE)
1965         if (sb->s_encoding) {                 !! 1512         bool needs_ci_ops = dentry->d_sb->s_encoding;
1966                 sb->s_d_op = &generic_ci_dent !! 1513 #endif
                                                   >> 1514 #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE)
                                                   >> 1515         if (needs_encrypt_ops && needs_ci_ops) {
                                                   >> 1516                 d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
1967                 return;                          1517                 return;
1968         }                                        1518         }
1969 #endif                                           1519 #endif
1970 #ifdef CONFIG_FS_ENCRYPTION                      1520 #ifdef CONFIG_FS_ENCRYPTION
1971         if (sb->s_cop) {                      !! 1521         if (needs_encrypt_ops) {
1972                 sb->s_d_op = &generic_encrypt !! 1522                 d_set_d_op(dentry, &generic_encrypted_dentry_ops);
1973                 return;                          1523                 return;
1974         }                                        1524         }
1975 #endif                                           1525 #endif
1976 }                                             !! 1526 #if IS_ENABLED(CONFIG_UNICODE)
1977 EXPORT_SYMBOL(generic_set_sb_d_ops);          !! 1527         if (needs_ci_ops) {
1978                                               !! 1528                 d_set_d_op(dentry, &generic_ci_dentry_ops);
1979 /**                                           << 
1980  * inode_maybe_inc_iversion - increments i_ve << 
1981  * @inode: inode with the i_version that shou << 
1982  * @force: increment the counter even if it's << 
1983  *                                            << 
1984  * Every time the inode is modified, the i_ve << 
1985  * changed by any observer.                   << 
1986  *                                            << 
1987  * If "force" is set or the QUERIED flag is s << 
1988  * the value, and clear the queried flag.     << 
1989  *                                            << 
1990  * In the common case where neither is set, t << 
1991  * updating i_version.                        << 
1992  *                                            << 
1993  * If this function returns false, and no oth << 
1994  * can avoid logging the metadata.            << 
1995  */                                           << 
1996 bool inode_maybe_inc_iversion(struct inode *i << 
1997 {                                             << 
1998         u64 cur, new;                         << 
1999                                               << 
2000         /*                                    << 
2001          * The i_version field is not strictl << 
2002          * information, but the legacy inode_ << 
2003          * to serialize increments.           << 
2004          *                                    << 
2005          * We add a full memory barrier to en << 
2006          * with other state is preserved (eit << 
2007          * or explicitly from smp_mb if we do << 
2008          * the former).                       << 
2009          *                                    << 
2010          * These barriers pair with inode_que << 
2011          */                                   << 
2012         cur = inode_peek_iversion_raw(inode); << 
2013         if (!force && !(cur & I_VERSION_QUERI << 
2014                 smp_mb();                     << 
2015                 cur = inode_peek_iversion_raw << 
2016         }                                     << 
2017                                               << 
2018         do {                                  << 
2019                 /* If flag is clear then we n << 
2020                 if (!force && !(cur & I_VERSI << 
2021                         return false;         << 
2022                                               << 
2023                 /* Since lowest bit is flag,  << 
2024                 new = (cur & ~I_VERSION_QUERI << 
2025         } while (!atomic64_try_cmpxchg(&inode << 
2026         return true;                          << 
2027 }                                             << 
2028 EXPORT_SYMBOL(inode_maybe_inc_iversion);      << 
2029                                               << 
2030 /**                                           << 
2031  * inode_query_iversion - read i_version for  << 
2032  * @inode: inode from which i_version should  << 
2033  *                                            << 
2034  * Read the inode i_version counter. This sho << 
2035  * to store the returned i_version for later  << 
2036  * that a later query of the i_version will r << 
2037  * anything has changed.                      << 
2038  *                                            << 
2039  * In this implementation, we fetch the curre << 
2040  * then try to swap it into place with a cmpx << 
2041  * that fails, we try again with the newly fe << 
2042  */                                           << 
2043 u64 inode_query_iversion(struct inode *inode) << 
2044 {                                             << 
2045         u64 cur, new;                         << 
2046         bool fenced = false;                  << 
2047                                               << 
2048         /*                                    << 
2049          * Memory barriers (implicit in cmpxc << 
2050          * inode_maybe_inc_iversion(), see th << 
2051          */                                   << 
2052         cur = inode_peek_iversion_raw(inode); << 
2053         do {                                  << 
2054                 /* If flag is already set, th << 
2055                 if (cur & I_VERSION_QUERIED)  << 
2056                         if (!fenced)          << 
2057                                 smp_mb();     << 
2058                         break;                << 
2059                 }                             << 
2060                                               << 
2061                 fenced = true;                << 
2062                 new = cur | I_VERSION_QUERIED << 
2063         } while (!atomic64_try_cmpxchg(&inode << 
2064         return cur >> I_VERSION_QUERIED_SHIFT << 
2065 }                                             << 
2066 EXPORT_SYMBOL(inode_query_iversion);          << 
2067                                               << 
2068 ssize_t direct_write_fallback(struct kiocb *i << 
2069                 ssize_t direct_written, ssize << 
2070 {                                             << 
2071         struct address_space *mapping = iocb- << 
2072         loff_t pos = iocb->ki_pos - buffered_ << 
2073         loff_t end = iocb->ki_pos - 1;        << 
2074         int err;                              << 
2075                                               << 
2076         /*                                    << 
2077          * If the buffered write fallback ret << 
2078          * the number of bytes which were wri << 
2079          * code if that was zero.             << 
2080          *                                    << 
2081          * Note that this differs from normal << 
2082          * return -EFOO even if some bytes we << 
2083          */                                   << 
2084         if (unlikely(buffered_written < 0)) { << 
2085                 if (direct_written)           << 
2086                         return direct_written << 
2087                 return buffered_written;      << 
2088         }                                     << 
2089                                               << 
2090         /*                                    << 
2091          * We need to ensure that the page ca << 
2092          * invalidated to preserve the expect << 
2093          */                                   << 
2094         err = filemap_write_and_wait_range(ma << 
2095         if (err < 0) {                        << 
2096                 /*                            << 
2097                  * We don't know how much we  << 
2098                  * bytes which were direct-wr << 
2099                  */                           << 
2100                 iocb->ki_pos -= buffered_writ << 
2101                 if (direct_written)           << 
2102                         return direct_written << 
2103                 return err;                   << 
2104         }                                     << 
2105         invalidate_mapping_pages(mapping, pos << 
2106         return direct_written + buffered_writ << 
2107 }                                             << 
2108 EXPORT_SYMBOL_GPL(direct_write_fallback);     << 
2109                                               << 
2110 /**                                           << 
2111  * simple_inode_init_ts - initialize the time << 
2112  * @inode: inode to be initialized            << 
2113  *                                            << 
2114  * When a new inode is created, most filesyst << 
2115  * current time. Add a helper to do this.     << 
2116  */                                           << 
2117 struct timespec64 simple_inode_init_ts(struct << 
2118 {                                             << 
2119         struct timespec64 ts = inode_set_ctim << 
2120                                               << 
2121         inode_set_atime_to_ts(inode, ts);     << 
2122         inode_set_mtime_to_ts(inode, ts);     << 
2123         return ts;                            << 
2124 }                                             << 
2125 EXPORT_SYMBOL(simple_inode_init_ts);          << 
2126                                               << 
2127 static inline struct dentry *get_stashed_dent << 
2128 {                                             << 
2129         struct dentry *dentry;                << 
2130                                               << 
2131         guard(rcu)();                         << 
2132         dentry = rcu_dereference(*stashed);   << 
2133         if (!dentry)                          << 
2134                 return NULL;                  << 
2135         if (!lockref_get_not_dead(&dentry->d_ << 
2136                 return NULL;                  << 
2137         return dentry;                        << 
2138 }                                             << 
2139                                               << 
2140 static struct dentry *prepare_anon_dentry(str << 
2141                                           str << 
2142                                           voi << 
2143 {                                             << 
2144         struct dentry *dentry;                << 
2145         struct inode *inode;                  << 
2146         const struct stashed_operations *sops << 
2147         int ret;                              << 
2148                                               << 
2149         inode = new_inode_pseudo(sb);         << 
2150         if (!inode) {                         << 
2151                 sops->put_data(data);         << 
2152                 return ERR_PTR(-ENOMEM);      << 
2153         }                                     << 
2154                                               << 
2155         inode->i_flags |= S_IMMUTABLE;        << 
2156         inode->i_mode = S_IFREG;              << 
2157         simple_inode_init_ts(inode);          << 
2158                                               << 
2159         ret = sops->init_inode(inode, data);  << 
2160         if (ret < 0) {                        << 
2161                 iput(inode);                  << 
2162                 return ERR_PTR(ret);          << 
2163         }                                     << 
2164                                               << 
2165         /* Notice when this is changed. */    << 
2166         WARN_ON_ONCE(!S_ISREG(inode->i_mode)) << 
2167         WARN_ON_ONCE(!IS_IMMUTABLE(inode));   << 
2168                                               << 
2169         dentry = d_alloc_anon(sb);            << 
2170         if (!dentry) {                        << 
2171                 iput(inode);                  << 
2172                 return ERR_PTR(-ENOMEM);      << 
2173         }                                     << 
2174                                               << 
2175         /* Store address of location where de << 
2176         dentry->d_fsdata = stashed;           << 
2177                                               << 
2178         /* @data is now owned by the fs */    << 
2179         d_instantiate(dentry, inode);         << 
2180         return dentry;                        << 
2181 }                                             << 
2182                                               << 
2183 static struct dentry *stash_dentry(struct den << 
2184                                    struct den << 
2185 {                                             << 
2186         guard(rcu)();                         << 
2187         for (;;) {                            << 
2188                 struct dentry *old;           << 
2189                                               << 
2190                 /* Assume any old dentry was  << 
2191                 old = cmpxchg(stashed, NULL,  << 
2192                 if (likely(!old))             << 
2193                         return dentry;        << 
2194                                               << 
2195                 /* Check if somebody else ins << 
2196                 if (lockref_get_not_dead(&old << 
2197                         return old;           << 
2198                                               << 
2199                 /* There's an old dead dentry << 
2200                 if (likely(try_cmpxchg(stashe << 
2201                         return dentry;        << 
2202         }                                     << 
2203 }                                             << 
2204                                               << 
2205 /**                                           << 
2206  * path_from_stashed - create path from stash << 
2207  * @stashed:    where to retrieve or stash de << 
2208  * @mnt:        mnt of the filesystems to use << 
2209  * @data:       data to store in inode->i_pri << 
2210  * @path:       path to create                << 
2211  *                                            << 
2212  * The function tries to retrieve a stashed d << 
2213  * is still valid then it will be reused. If  << 
2214  * will allocate a new dentry and inode. It w << 
2215  * can reuse an existing dentry in case one h << 
2216  * update @stashed with the newly added dentr << 
2217  *                                            << 
2218  * Special-purpose helper for nsfs and pidfs. << 
2219  *                                            << 
2220  * Return: On success zero and on failure a n << 
2221  */                                           << 
2222 int path_from_stashed(struct dentry **stashed << 
2223                       struct path *path)      << 
2224 {                                             << 
2225         struct dentry *dentry;                << 
2226         const struct stashed_operations *sops << 
2227                                               << 
2228         /* See if dentry can be reused. */    << 
2229         path->dentry = get_stashed_dentry(sta << 
2230         if (path->dentry) {                   << 
2231                 sops->put_data(data);         << 
2232                 goto out_path;                << 
2233         }                                     << 
2234                                               << 
2235         /* Allocate a new dentry. */          << 
2236         dentry = prepare_anon_dentry(stashed, << 
2237         if (IS_ERR(dentry))                   << 
2238                 return PTR_ERR(dentry);       << 
2239                                               << 
2240         /* Added a new dentry. @data is now o << 
2241         path->dentry = stash_dentry(stashed,  << 
2242         if (path->dentry != dentry)           << 
2243                 dput(dentry);                 << 
2244                                               << 
2245 out_path:                                     << 
2246         WARN_ON_ONCE(path->dentry->d_fsdata ! << 
2247         WARN_ON_ONCE(d_inode(path->dentry)->i << 
2248         path->mnt = mntget(mnt);              << 
2249         return 0;                             << 
2250 }                                             << 
2251                                               << 
2252 void stashed_dentry_prune(struct dentry *dent << 
2253 {                                             << 
2254         struct dentry **stashed = dentry->d_f << 
2255         struct inode *inode = d_inode(dentry) << 
2256                                               << 
2257         if (WARN_ON_ONCE(!stashed))           << 
2258                 return;                       << 
2259                                               << 
2260         if (!inode)                           << 
2261                 return;                          1529                 return;
2262                                               !! 1530         }
2263         /*                                    !! 1531 #endif
2264          * Only replace our own @dentry as so << 
2265          * already cleared out @dentry and st << 
2266          * dentry in there.                   << 
2267          */                                   << 
2268         cmpxchg(stashed, dentry, NULL);       << 
2269 }                                                1532 }
                                                   >> 1533 EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
2270                                                  1534 

~ [ 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