~ [ 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.10.229)


  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(const struct path *path, struct kstat *stat,
 33                    struct kstat *stat, u32 req !!  31                    u32 request_mask, unsigned int query_flags)
 34                    unsigned int query_flags)   << 
 35 {                                                  32 {
 36         struct inode *inode = d_inode(path->de     33         struct inode *inode = d_inode(path->dentry);
 37         generic_fillattr(&nop_mnt_idmap, reque !!  34         generic_fillattr(inode, stat);
 38         stat->blocks = inode->i_mapping->nrpag     35         stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9);
 39         return 0;                                  36         return 0;
 40 }                                                  37 }
 41 EXPORT_SYMBOL(simple_getattr);                     38 EXPORT_SYMBOL(simple_getattr);
 42                                                    39 
 43 int simple_statfs(struct dentry *dentry, struc     40 int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
 44 {                                                  41 {
 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;       42         buf->f_type = dentry->d_sb->s_magic;
 49         buf->f_bsize = PAGE_SIZE;                  43         buf->f_bsize = PAGE_SIZE;
 50         buf->f_namelen = NAME_MAX;                 44         buf->f_namelen = NAME_MAX;
 51         return 0;                                  45         return 0;
 52 }                                                  46 }
 53 EXPORT_SYMBOL(simple_statfs);                      47 EXPORT_SYMBOL(simple_statfs);
 54                                                    48 
 55 /*                                                 49 /*
 56  * Retaining negative dentries for an in-memor     50  * Retaining negative dentries for an in-memory filesystem just wastes
 57  * memory and lookup time: arrange for them to     51  * memory and lookup time: arrange for them to be deleted immediately.
 58  */                                                52  */
 59 int always_delete_dentry(const struct dentry *     53 int always_delete_dentry(const struct dentry *dentry)
 60 {                                                  54 {
 61         return 1;                                  55         return 1;
 62 }                                                  56 }
 63 EXPORT_SYMBOL(always_delete_dentry);               57 EXPORT_SYMBOL(always_delete_dentry);
 64                                                    58 
 65 const struct dentry_operations simple_dentry_o     59 const struct dentry_operations simple_dentry_operations = {
 66         .d_delete = always_delete_dentry,          60         .d_delete = always_delete_dentry,
 67 };                                                 61 };
 68 EXPORT_SYMBOL(simple_dentry_operations);           62 EXPORT_SYMBOL(simple_dentry_operations);
 69                                                    63 
 70 /*                                                 64 /*
 71  * Lookup the data. This is trivial - if the d     65  * Lookup the data. This is trivial - if the dentry didn't already
 72  * exist, we know it is negative.  Set d_op to     66  * exist, we know it is negative.  Set d_op to delete negative dentries.
 73  */                                                67  */
 74 struct dentry *simple_lookup(struct inode *dir     68 struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
 75 {                                                  69 {
 76         if (dentry->d_name.len > NAME_MAX)         70         if (dentry->d_name.len > NAME_MAX)
 77                 return ERR_PTR(-ENAMETOOLONG);     71                 return ERR_PTR(-ENAMETOOLONG);
 78         if (!dentry->d_sb->s_d_op)                 72         if (!dentry->d_sb->s_d_op)
 79                 d_set_d_op(dentry, &simple_den     73                 d_set_d_op(dentry, &simple_dentry_operations);
 80         d_add(dentry, NULL);                       74         d_add(dentry, NULL);
 81         return NULL;                               75         return NULL;
 82 }                                                  76 }
 83 EXPORT_SYMBOL(simple_lookup);                      77 EXPORT_SYMBOL(simple_lookup);
 84                                                    78 
 85 int dcache_dir_open(struct inode *inode, struc     79 int dcache_dir_open(struct inode *inode, struct file *file)
 86 {                                                  80 {
 87         file->private_data = d_alloc_cursor(fi     81         file->private_data = d_alloc_cursor(file->f_path.dentry);
 88                                                    82 
 89         return file->private_data ? 0 : -ENOME     83         return file->private_data ? 0 : -ENOMEM;
 90 }                                                  84 }
 91 EXPORT_SYMBOL(dcache_dir_open);                    85 EXPORT_SYMBOL(dcache_dir_open);
 92                                                    86 
 93 int dcache_dir_close(struct inode *inode, stru     87 int dcache_dir_close(struct inode *inode, struct file *file)
 94 {                                                  88 {
 95         dput(file->private_data);                  89         dput(file->private_data);
 96         return 0;                                  90         return 0;
 97 }                                                  91 }
 98 EXPORT_SYMBOL(dcache_dir_close);                   92 EXPORT_SYMBOL(dcache_dir_close);
 99                                                    93 
100 /* parent is locked at least shared */             94 /* parent is locked at least shared */
101 /*                                                 95 /*
102  * Returns an element of siblings' list.           96  * Returns an element of siblings' list.
103  * We are looking for <count>th positive after     97  * We are looking for <count>th positive after <p>; if
104  * found, dentry is grabbed and returned to ca     98  * found, dentry is grabbed and returned to caller.
105  * If no such element exists, NULL is returned     99  * If no such element exists, NULL is returned.
106  */                                               100  */
107 static struct dentry *scan_positives(struct de    101 static struct dentry *scan_positives(struct dentry *cursor,
108                                         struct !! 102                                         struct list_head *p,
109                                         loff_t    103                                         loff_t count,
110                                         struct    104                                         struct dentry *last)
111 {                                                 105 {
112         struct dentry *dentry = cursor->d_pare    106         struct dentry *dentry = cursor->d_parent, *found = NULL;
113                                                   107 
114         spin_lock(&dentry->d_lock);               108         spin_lock(&dentry->d_lock);
115         while (*p) {                           !! 109         while ((p = p->next) != &dentry->d_subdirs) {
116                 struct dentry *d = hlist_entry !! 110                 struct dentry *d = list_entry(p, struct dentry, d_child);
117                 p = &d->d_sib.next;            << 
118                 // we must at least skip curso    111                 // we must at least skip cursors, to avoid livelocks
119                 if (d->d_flags & DCACHE_DENTRY    112                 if (d->d_flags & DCACHE_DENTRY_CURSOR)
120                         continue;                 113                         continue;
121                 if (simple_positive(d) && !--c    114                 if (simple_positive(d) && !--count) {
122                         spin_lock_nested(&d->d    115                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
123                         if (simple_positive(d)    116                         if (simple_positive(d))
124                                 found = dget_d    117                                 found = dget_dlock(d);
125                         spin_unlock(&d->d_lock    118                         spin_unlock(&d->d_lock);
126                         if (likely(found))        119                         if (likely(found))
127                                 break;            120                                 break;
128                         count = 1;                121                         count = 1;
129                 }                                 122                 }
130                 if (need_resched()) {             123                 if (need_resched()) {
131                         if (!hlist_unhashed(&c !! 124                         list_move(&cursor->d_child, p);
132                                 __hlist_del(&c !! 125                         p = &cursor->d_child;
133                         hlist_add_behind(&curs << 
134                         p = &cursor->d_sib.nex << 
135                         spin_unlock(&dentry->d    126                         spin_unlock(&dentry->d_lock);
136                         cond_resched();           127                         cond_resched();
137                         spin_lock(&dentry->d_l    128                         spin_lock(&dentry->d_lock);
138                 }                                 129                 }
139         }                                         130         }
140         spin_unlock(&dentry->d_lock);             131         spin_unlock(&dentry->d_lock);
141         dput(last);                               132         dput(last);
142         return found;                             133         return found;
143 }                                                 134 }
144                                                   135 
145 loff_t dcache_dir_lseek(struct file *file, lof    136 loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
146 {                                                 137 {
147         struct dentry *dentry = file->f_path.d    138         struct dentry *dentry = file->f_path.dentry;
148         switch (whence) {                         139         switch (whence) {
149                 case 1:                           140                 case 1:
150                         offset += file->f_pos;    141                         offset += file->f_pos;
151                         fallthrough;              142                         fallthrough;
152                 case 0:                           143                 case 0:
153                         if (offset >= 0)          144                         if (offset >= 0)
154                                 break;            145                                 break;
155                         fallthrough;              146                         fallthrough;
156                 default:                          147                 default:
157                         return -EINVAL;           148                         return -EINVAL;
158         }                                         149         }
159         if (offset != file->f_pos) {              150         if (offset != file->f_pos) {
160                 struct dentry *cursor = file->    151                 struct dentry *cursor = file->private_data;
161                 struct dentry *to = NULL;         152                 struct dentry *to = NULL;
162                                                   153 
163                 inode_lock_shared(dentry->d_in    154                 inode_lock_shared(dentry->d_inode);
164                                                   155 
165                 if (offset > 2)                   156                 if (offset > 2)
166                         to = scan_positives(cu !! 157                         to = scan_positives(cursor, &dentry->d_subdirs,
167                                             of    158                                             offset - 2, NULL);
168                 spin_lock(&dentry->d_lock);       159                 spin_lock(&dentry->d_lock);
169                 hlist_del_init(&cursor->d_sib) << 
170                 if (to)                           160                 if (to)
171                         hlist_add_behind(&curs !! 161                         list_move(&cursor->d_child, &to->d_child);
                                                   >> 162                 else
                                                   >> 163                         list_del_init(&cursor->d_child);
172                 spin_unlock(&dentry->d_lock);     164                 spin_unlock(&dentry->d_lock);
173                 dput(to);                         165                 dput(to);
174                                                   166 
175                 file->f_pos = offset;             167                 file->f_pos = offset;
176                                                   168 
177                 inode_unlock_shared(dentry->d_    169                 inode_unlock_shared(dentry->d_inode);
178         }                                         170         }
179         return offset;                            171         return offset;
180 }                                                 172 }
181 EXPORT_SYMBOL(dcache_dir_lseek);                  173 EXPORT_SYMBOL(dcache_dir_lseek);
182                                                   174 
                                                   >> 175 /* Relationship between i_mode and the DT_xxx types */
                                                   >> 176 static inline unsigned char dt_type(struct inode *inode)
                                                   >> 177 {
                                                   >> 178         return (inode->i_mode >> 12) & 15;
                                                   >> 179 }
                                                   >> 180 
183 /*                                                181 /*
184  * Directory is locked and all positive dentri    182  * Directory is locked and all positive dentries in it are safe, since
185  * for ramfs-type trees they can't go away wit    183  * for ramfs-type trees they can't go away without unlink() or rmdir(),
186  * both impossible due to the lock on director    184  * both impossible due to the lock on directory.
187  */                                               185  */
188                                                   186 
189 int dcache_readdir(struct file *file, struct d    187 int dcache_readdir(struct file *file, struct dir_context *ctx)
190 {                                                 188 {
191         struct dentry *dentry = file->f_path.d    189         struct dentry *dentry = file->f_path.dentry;
192         struct dentry *cursor = file->private_    190         struct dentry *cursor = file->private_data;
                                                   >> 191         struct list_head *anchor = &dentry->d_subdirs;
193         struct dentry *next = NULL;               192         struct dentry *next = NULL;
194         struct hlist_node **p;                 !! 193         struct list_head *p;
195                                                   194 
196         if (!dir_emit_dots(file, ctx))            195         if (!dir_emit_dots(file, ctx))
197                 return 0;                         196                 return 0;
198                                                   197 
199         if (ctx->pos == 2)                        198         if (ctx->pos == 2)
200                 p = &dentry->d_children.first; !! 199                 p = anchor;
                                                   >> 200         else if (!list_empty(&cursor->d_child))
                                                   >> 201                 p = &cursor->d_child;
201         else                                      202         else
202                 p = &cursor->d_sib.next;       !! 203                 return 0;
203                                                   204 
204         while ((next = scan_positives(cursor,     205         while ((next = scan_positives(cursor, p, 1, next)) != NULL) {
205                 if (!dir_emit(ctx, next->d_nam    206                 if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
206                               d_inode(next)->i !! 207                               d_inode(next)->i_ino, dt_type(d_inode(next))))
207                               fs_umode_to_dtyp << 
208                         break;                    208                         break;
209                 ctx->pos++;                       209                 ctx->pos++;
210                 p = &next->d_sib.next;         !! 210                 p = &next->d_child;
211         }                                         211         }
212         spin_lock(&dentry->d_lock);               212         spin_lock(&dentry->d_lock);
213         hlist_del_init(&cursor->d_sib);        << 
214         if (next)                                 213         if (next)
215                 hlist_add_before(&cursor->d_si !! 214                 list_move_tail(&cursor->d_child, &next->d_child);
                                                   >> 215         else
                                                   >> 216                 list_del_init(&cursor->d_child);
216         spin_unlock(&dentry->d_lock);             217         spin_unlock(&dentry->d_lock);
217         dput(next);                               218         dput(next);
218                                                   219 
219         return 0;                                 220         return 0;
220 }                                                 221 }
221 EXPORT_SYMBOL(dcache_readdir);                    222 EXPORT_SYMBOL(dcache_readdir);
222                                                   223 
223 ssize_t generic_read_dir(struct file *filp, ch    224 ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
224 {                                                 225 {
225         return -EISDIR;                           226         return -EISDIR;
226 }                                                 227 }
227 EXPORT_SYMBOL(generic_read_dir);                  228 EXPORT_SYMBOL(generic_read_dir);
228                                                   229 
229 const struct file_operations simple_dir_operat    230 const struct file_operations simple_dir_operations = {
230         .open           = dcache_dir_open,        231         .open           = dcache_dir_open,
231         .release        = dcache_dir_close,       232         .release        = dcache_dir_close,
232         .llseek         = dcache_dir_lseek,       233         .llseek         = dcache_dir_lseek,
233         .read           = generic_read_dir,       234         .read           = generic_read_dir,
234         .iterate_shared = dcache_readdir,         235         .iterate_shared = dcache_readdir,
235         .fsync          = noop_fsync,             236         .fsync          = noop_fsync,
236 };                                                237 };
237 EXPORT_SYMBOL(simple_dir_operations);             238 EXPORT_SYMBOL(simple_dir_operations);
238                                                   239 
239 const struct inode_operations simple_dir_inode    240 const struct inode_operations simple_dir_inode_operations = {
240         .lookup         = simple_lookup,          241         .lookup         = simple_lookup,
241 };                                                242 };
242 EXPORT_SYMBOL(simple_dir_inode_operations);       243 EXPORT_SYMBOL(simple_dir_inode_operations);
243                                                   244 
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    245 static struct dentry *find_next_child(struct dentry *parent, struct dentry *prev)
591 {                                                 246 {
592         struct dentry *child = NULL, *d;       !! 247         struct dentry *child = NULL;
                                                   >> 248         struct list_head *p = prev ? &prev->d_child : &parent->d_subdirs;
593                                                   249 
594         spin_lock(&parent->d_lock);               250         spin_lock(&parent->d_lock);
595         d = prev ? d_next_sibling(prev) : d_fi !! 251         while ((p = p->next) != &parent->d_subdirs) {
596         hlist_for_each_entry_from(d, d_sib) {  !! 252                 struct dentry *d = container_of(p, struct dentry, d_child);
597                 if (simple_positive(d)) {         253                 if (simple_positive(d)) {
598                         spin_lock_nested(&d->d    254                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
599                         if (simple_positive(d)    255                         if (simple_positive(d))
600                                 child = dget_d    256                                 child = dget_dlock(d);
601                         spin_unlock(&d->d_lock    257                         spin_unlock(&d->d_lock);
602                         if (likely(child))        258                         if (likely(child))
603                                 break;            259                                 break;
604                 }                                 260                 }
605         }                                         261         }
606         spin_unlock(&parent->d_lock);             262         spin_unlock(&parent->d_lock);
607         dput(prev);                               263         dput(prev);
608         return child;                             264         return child;
609 }                                                 265 }
610                                                   266 
611 void simple_recursive_removal(struct dentry *d    267 void simple_recursive_removal(struct dentry *dentry,
612                               void (*callback)    268                               void (*callback)(struct dentry *))
613 {                                                 269 {
614         struct dentry *this = dget(dentry);       270         struct dentry *this = dget(dentry);
615         while (true) {                            271         while (true) {
616                 struct dentry *victim = NULL,     272                 struct dentry *victim = NULL, *child;
617                 struct inode *inode = this->d_    273                 struct inode *inode = this->d_inode;
618                                                   274 
619                 inode_lock(inode);                275                 inode_lock(inode);
620                 if (d_is_dir(this))               276                 if (d_is_dir(this))
621                         inode->i_flags |= S_DE    277                         inode->i_flags |= S_DEAD;
622                 while ((child = find_next_chil    278                 while ((child = find_next_child(this, victim)) == NULL) {
623                         // kill and ascend        279                         // kill and ascend
624                         // update metadata whi    280                         // update metadata while it's still locked
625                         inode_set_ctime_curren !! 281                         inode->i_ctime = current_time(inode);
626                         clear_nlink(inode);       282                         clear_nlink(inode);
627                         inode_unlock(inode);      283                         inode_unlock(inode);
628                         victim = this;            284                         victim = this;
629                         this = this->d_parent;    285                         this = this->d_parent;
630                         inode = this->d_inode;    286                         inode = this->d_inode;
631                         inode_lock(inode);        287                         inode_lock(inode);
632                         if (simple_positive(vi    288                         if (simple_positive(victim)) {
633                                 d_invalidate(v    289                                 d_invalidate(victim);   // avoid lost mounts
634                                 if (d_is_dir(v    290                                 if (d_is_dir(victim))
635                                         fsnoti    291                                         fsnotify_rmdir(inode, victim);
636                                 else              292                                 else
637                                         fsnoti    293                                         fsnotify_unlink(inode, victim);
638                                 if (callback)     294                                 if (callback)
639                                         callba    295                                         callback(victim);
640                                 dput(victim);     296                                 dput(victim);           // unpin it
641                         }                         297                         }
642                         if (victim == dentry)     298                         if (victim == dentry) {
643                                 inode_set_mtim !! 299                                 inode->i_ctime = inode->i_mtime =
644                                                !! 300                                         current_time(inode);
645                                 if (d_is_dir(d    301                                 if (d_is_dir(dentry))
646                                         drop_n    302                                         drop_nlink(inode);
647                                 inode_unlock(i    303                                 inode_unlock(inode);
648                                 dput(dentry);     304                                 dput(dentry);
649                                 return;           305                                 return;
650                         }                         306                         }
651                 }                                 307                 }
652                 inode_unlock(inode);              308                 inode_unlock(inode);
653                 this = child;                     309                 this = child;
654         }                                         310         }
655 }                                                 311 }
656 EXPORT_SYMBOL(simple_recursive_removal);          312 EXPORT_SYMBOL(simple_recursive_removal);
657                                                   313 
658 static const struct super_operations simple_su    314 static const struct super_operations simple_super_operations = {
659         .statfs         = simple_statfs,          315         .statfs         = simple_statfs,
660 };                                                316 };
661                                                   317 
662 static int pseudo_fs_fill_super(struct super_b    318 static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc)
663 {                                                 319 {
664         struct pseudo_fs_context *ctx = fc->fs    320         struct pseudo_fs_context *ctx = fc->fs_private;
665         struct inode *root;                       321         struct inode *root;
666                                                   322 
667         s->s_maxbytes = MAX_LFS_FILESIZE;         323         s->s_maxbytes = MAX_LFS_FILESIZE;
668         s->s_blocksize = PAGE_SIZE;               324         s->s_blocksize = PAGE_SIZE;
669         s->s_blocksize_bits = PAGE_SHIFT;         325         s->s_blocksize_bits = PAGE_SHIFT;
670         s->s_magic = ctx->magic;                  326         s->s_magic = ctx->magic;
671         s->s_op = ctx->ops ?: &simple_super_op    327         s->s_op = ctx->ops ?: &simple_super_operations;
672         s->s_xattr = ctx->xattr;                  328         s->s_xattr = ctx->xattr;
673         s->s_time_gran = 1;                       329         s->s_time_gran = 1;
674         root = new_inode(s);                      330         root = new_inode(s);
675         if (!root)                                331         if (!root)
676                 return -ENOMEM;                   332                 return -ENOMEM;
677                                                   333 
678         /*                                        334         /*
679          * since this is the first inode, make    335          * since this is the first inode, make it number 1. New inodes created
680          * after this must take care not to co    336          * after this must take care not to collide with it (by passing
681          * max_reserved of 1 to iunique).         337          * max_reserved of 1 to iunique).
682          */                                       338          */
683         root->i_ino = 1;                          339         root->i_ino = 1;
684         root->i_mode = S_IFDIR | S_IRUSR | S_I    340         root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
685         simple_inode_init_ts(root);            !! 341         root->i_atime = root->i_mtime = root->i_ctime = current_time(root);
686         s->s_root = d_make_root(root);            342         s->s_root = d_make_root(root);
687         if (!s->s_root)                           343         if (!s->s_root)
688                 return -ENOMEM;                   344                 return -ENOMEM;
689         s->s_d_op = ctx->dops;                    345         s->s_d_op = ctx->dops;
690         return 0;                                 346         return 0;
691 }                                                 347 }
692                                                   348 
693 static int pseudo_fs_get_tree(struct fs_contex    349 static int pseudo_fs_get_tree(struct fs_context *fc)
694 {                                                 350 {
695         return get_tree_nodev(fc, pseudo_fs_fi    351         return get_tree_nodev(fc, pseudo_fs_fill_super);
696 }                                                 352 }
697                                                   353 
698 static void pseudo_fs_free(struct fs_context *    354 static void pseudo_fs_free(struct fs_context *fc)
699 {                                                 355 {
700         kfree(fc->fs_private);                    356         kfree(fc->fs_private);
701 }                                                 357 }
702                                                   358 
703 static const struct fs_context_operations pseu    359 static const struct fs_context_operations pseudo_fs_context_ops = {
704         .free           = pseudo_fs_free,         360         .free           = pseudo_fs_free,
705         .get_tree       = pseudo_fs_get_tree,     361         .get_tree       = pseudo_fs_get_tree,
706 };                                                362 };
707                                                   363 
708 /*                                                364 /*
709  * Common helper for pseudo-filesystems (sockf    365  * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that
710  * will never be mountable)                       366  * will never be mountable)
711  */                                               367  */
712 struct pseudo_fs_context *init_pseudo(struct f    368 struct pseudo_fs_context *init_pseudo(struct fs_context *fc,
713                                         unsign    369                                         unsigned long magic)
714 {                                                 370 {
715         struct pseudo_fs_context *ctx;            371         struct pseudo_fs_context *ctx;
716                                                   372 
717         ctx = kzalloc(sizeof(struct pseudo_fs_    373         ctx = kzalloc(sizeof(struct pseudo_fs_context), GFP_KERNEL);
718         if (likely(ctx)) {                        374         if (likely(ctx)) {
719                 ctx->magic = magic;               375                 ctx->magic = magic;
720                 fc->fs_private = ctx;             376                 fc->fs_private = ctx;
721                 fc->ops = &pseudo_fs_context_o    377                 fc->ops = &pseudo_fs_context_ops;
722                 fc->sb_flags |= SB_NOUSER;        378                 fc->sb_flags |= SB_NOUSER;
723                 fc->global = true;                379                 fc->global = true;
724         }                                         380         }
725         return ctx;                               381         return ctx;
726 }                                                 382 }
727 EXPORT_SYMBOL(init_pseudo);                       383 EXPORT_SYMBOL(init_pseudo);
728                                                   384 
729 int simple_open(struct inode *inode, struct fi    385 int simple_open(struct inode *inode, struct file *file)
730 {                                                 386 {
731         if (inode->i_private)                     387         if (inode->i_private)
732                 file->private_data = inode->i_    388                 file->private_data = inode->i_private;
733         return 0;                                 389         return 0;
734 }                                                 390 }
735 EXPORT_SYMBOL(simple_open);                       391 EXPORT_SYMBOL(simple_open);
736                                                   392 
737 int simple_link(struct dentry *old_dentry, str    393 int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
738 {                                                 394 {
739         struct inode *inode = d_inode(old_dent    395         struct inode *inode = d_inode(old_dentry);
740                                                   396 
741         inode_set_mtime_to_ts(dir,             !! 397         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
742                               inode_set_ctime_ << 
743         inc_nlink(inode);                         398         inc_nlink(inode);
744         ihold(inode);                             399         ihold(inode);
745         dget(dentry);                             400         dget(dentry);
746         d_instantiate(dentry, inode);             401         d_instantiate(dentry, inode);
747         return 0;                                 402         return 0;
748 }                                                 403 }
749 EXPORT_SYMBOL(simple_link);                       404 EXPORT_SYMBOL(simple_link);
750                                                   405 
751 int simple_empty(struct dentry *dentry)           406 int simple_empty(struct dentry *dentry)
752 {                                                 407 {
753         struct dentry *child;                     408         struct dentry *child;
754         int ret = 0;                              409         int ret = 0;
755                                                   410 
756         spin_lock(&dentry->d_lock);               411         spin_lock(&dentry->d_lock);
757         hlist_for_each_entry(child, &dentry->d !! 412         list_for_each_entry(child, &dentry->d_subdirs, d_child) {
758                 spin_lock_nested(&child->d_loc    413                 spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
759                 if (simple_positive(child)) {     414                 if (simple_positive(child)) {
760                         spin_unlock(&child->d_    415                         spin_unlock(&child->d_lock);
761                         goto out;                 416                         goto out;
762                 }                                 417                 }
763                 spin_unlock(&child->d_lock);      418                 spin_unlock(&child->d_lock);
764         }                                         419         }
765         ret = 1;                                  420         ret = 1;
766 out:                                              421 out:
767         spin_unlock(&dentry->d_lock);             422         spin_unlock(&dentry->d_lock);
768         return ret;                               423         return ret;
769 }                                                 424 }
770 EXPORT_SYMBOL(simple_empty);                      425 EXPORT_SYMBOL(simple_empty);
771                                                   426 
772 int simple_unlink(struct inode *dir, struct de    427 int simple_unlink(struct inode *dir, struct dentry *dentry)
773 {                                                 428 {
774         struct inode *inode = d_inode(dentry);    429         struct inode *inode = d_inode(dentry);
775                                                   430 
776         inode_set_mtime_to_ts(dir,             !! 431         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
777                               inode_set_ctime_ << 
778         drop_nlink(inode);                        432         drop_nlink(inode);
779         dput(dentry);                             433         dput(dentry);
780         return 0;                                 434         return 0;
781 }                                                 435 }
782 EXPORT_SYMBOL(simple_unlink);                     436 EXPORT_SYMBOL(simple_unlink);
783                                                   437 
784 int simple_rmdir(struct inode *dir, struct den    438 int simple_rmdir(struct inode *dir, struct dentry *dentry)
785 {                                                 439 {
786         if (!simple_empty(dentry))                440         if (!simple_empty(dentry))
787                 return -ENOTEMPTY;                441                 return -ENOTEMPTY;
788                                                   442 
789         drop_nlink(d_inode(dentry));              443         drop_nlink(d_inode(dentry));
790         simple_unlink(dir, dentry);               444         simple_unlink(dir, dentry);
791         drop_nlink(dir);                          445         drop_nlink(dir);
792         return 0;                                 446         return 0;
793 }                                                 447 }
794 EXPORT_SYMBOL(simple_rmdir);                      448 EXPORT_SYMBOL(simple_rmdir);
795                                                   449 
796 /**                                            !! 450 int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
797  * simple_rename_timestamp - update the variou !! 451                   struct inode *new_dir, struct dentry *new_dentry,
798  * @old_dir: old parent directory              !! 452                   unsigned int flags)
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 << 
823                            struct inode *new_d << 
824 {                                              << 
825         bool old_is_dir = d_is_dir(old_dentry) << 
826         bool new_is_dir = d_is_dir(new_dentry) << 
827                                                << 
828         if (old_dir != new_dir && old_is_dir ! << 
829                 if (old_is_dir) {              << 
830                         drop_nlink(old_dir);   << 
831                         inc_nlink(new_dir);    << 
832                 } else {                       << 
833                         drop_nlink(new_dir);   << 
834                         inc_nlink(old_dir);    << 
835                 }                              << 
836         }                                      << 
837         simple_rename_timestamp(old_dir, old_d << 
838         return 0;                              << 
839 }                                              << 
840 EXPORT_SYMBOL_GPL(simple_rename_exchange);     << 
841                                                << 
842 int simple_rename(struct mnt_idmap *idmap, str << 
843                   struct dentry *old_dentry, s << 
844                   struct dentry *new_dentry, u << 
845 {                                                 453 {
                                                   >> 454         struct inode *inode = d_inode(old_dentry);
846         int they_are_dirs = d_is_dir(old_dentr    455         int they_are_dirs = d_is_dir(old_dentry);
847                                                   456 
848         if (flags & ~(RENAME_NOREPLACE | RENAM !! 457         if (flags & ~RENAME_NOREPLACE)
849                 return -EINVAL;                   458                 return -EINVAL;
850                                                   459 
851         if (flags & RENAME_EXCHANGE)           << 
852                 return simple_rename_exchange( << 
853                                                << 
854         if (!simple_empty(new_dentry))            460         if (!simple_empty(new_dentry))
855                 return -ENOTEMPTY;                461                 return -ENOTEMPTY;
856                                                   462 
857         if (d_really_is_positive(new_dentry))     463         if (d_really_is_positive(new_dentry)) {
858                 simple_unlink(new_dir, new_den    464                 simple_unlink(new_dir, new_dentry);
859                 if (they_are_dirs) {              465                 if (they_are_dirs) {
860                         drop_nlink(d_inode(new    466                         drop_nlink(d_inode(new_dentry));
861                         drop_nlink(old_dir);      467                         drop_nlink(old_dir);
862                 }                                 468                 }
863         } else if (they_are_dirs) {               469         } else if (they_are_dirs) {
864                 drop_nlink(old_dir);              470                 drop_nlink(old_dir);
865                 inc_nlink(new_dir);               471                 inc_nlink(new_dir);
866         }                                         472         }
867                                                   473 
868         simple_rename_timestamp(old_dir, old_d !! 474         old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime =
                                                   >> 475                 new_dir->i_mtime = inode->i_ctime = current_time(old_dir);
                                                   >> 476 
869         return 0;                                 477         return 0;
870 }                                                 478 }
871 EXPORT_SYMBOL(simple_rename);                     479 EXPORT_SYMBOL(simple_rename);
872                                                   480 
873 /**                                               481 /**
874  * simple_setattr - setattr for simple filesys    482  * simple_setattr - setattr for simple filesystem
875  * @idmap: idmap of the target mount           << 
876  * @dentry: dentry                                483  * @dentry: dentry
877  * @iattr: iattr structure                        484  * @iattr: iattr structure
878  *                                                485  *
879  * Returns 0 on success, -error on failure.       486  * Returns 0 on success, -error on failure.
880  *                                                487  *
881  * simple_setattr is a simple ->setattr implem    488  * simple_setattr is a simple ->setattr implementation without a proper
882  * implementation of size changes.                489  * implementation of size changes.
883  *                                                490  *
884  * It can either be used for in-memory filesys    491  * It can either be used for in-memory filesystems or special files
885  * on simple regular filesystems.  Anything th    492  * on simple regular filesystems.  Anything that needs to change on-disk
886  * or wire state on size changes needs its own    493  * or wire state on size changes needs its own setattr method.
887  */                                               494  */
888 int simple_setattr(struct mnt_idmap *idmap, st !! 495 int simple_setattr(struct dentry *dentry, struct iattr *iattr)
889                    struct iattr *iattr)        << 
890 {                                                 496 {
891         struct inode *inode = d_inode(dentry);    497         struct inode *inode = d_inode(dentry);
892         int error;                                498         int error;
893                                                   499 
894         error = setattr_prepare(idmap, dentry, !! 500         error = setattr_prepare(dentry, iattr);
895         if (error)                                501         if (error)
896                 return error;                     502                 return error;
897                                                   503 
898         if (iattr->ia_valid & ATTR_SIZE)          504         if (iattr->ia_valid & ATTR_SIZE)
899                 truncate_setsize(inode, iattr-    505                 truncate_setsize(inode, iattr->ia_size);
900         setattr_copy(idmap, inode, iattr);     !! 506         setattr_copy(inode, iattr);
901         mark_inode_dirty(inode);                  507         mark_inode_dirty(inode);
902         return 0;                                 508         return 0;
903 }                                                 509 }
904 EXPORT_SYMBOL(simple_setattr);                    510 EXPORT_SYMBOL(simple_setattr);
905                                                   511 
906 static int simple_read_folio(struct file *file !! 512 int simple_readpage(struct file *file, struct page *page)
907 {                                                 513 {
908         folio_zero_range(folio, 0, folio_size( !! 514         clear_highpage(page);
909         flush_dcache_folio(folio);             !! 515         flush_dcache_page(page);
910         folio_mark_uptodate(folio);            !! 516         SetPageUptodate(page);
911         folio_unlock(folio);                   !! 517         unlock_page(page);
912         return 0;                                 518         return 0;
913 }                                                 519 }
                                                   >> 520 EXPORT_SYMBOL(simple_readpage);
914                                                   521 
915 int simple_write_begin(struct file *file, stru    522 int simple_write_begin(struct file *file, struct address_space *mapping,
916                         loff_t pos, unsigned l !! 523                         loff_t pos, unsigned len, unsigned flags,
917                         struct folio **foliop, !! 524                         struct page **pagep, void **fsdata)
918 {                                                 525 {
919         struct folio *folio;                   !! 526         struct page *page;
                                                   >> 527         pgoff_t index;
920                                                   528 
921         folio = __filemap_get_folio(mapping, p !! 529         index = pos >> PAGE_SHIFT;
922                         mapping_gfp_mask(mappi << 
923         if (IS_ERR(folio))                     << 
924                 return PTR_ERR(folio);         << 
925                                                   530 
926         *foliop = folio;                       !! 531         page = grab_cache_page_write_begin(mapping, index, flags);
                                                   >> 532         if (!page)
                                                   >> 533                 return -ENOMEM;
                                                   >> 534 
                                                   >> 535         *pagep = page;
927                                                   536 
928         if (!folio_test_uptodate(folio) && (le !! 537         if (!PageUptodate(page) && (len != PAGE_SIZE)) {
929                 size_t from = offset_in_folio( !! 538                 unsigned from = pos & (PAGE_SIZE - 1);
930                                                   539 
931                 folio_zero_segments(folio, 0,  !! 540                 zero_user_segments(page, 0, from, from + len, PAGE_SIZE);
932                                 from + len, fo << 
933         }                                         541         }
934         return 0;                                 542         return 0;
935 }                                                 543 }
936 EXPORT_SYMBOL(simple_write_begin);                544 EXPORT_SYMBOL(simple_write_begin);
937                                                   545 
938 /**                                               546 /**
939  * simple_write_end - .write_end helper for no    547  * simple_write_end - .write_end helper for non-block-device FSes
940  * @file: See .write_end of address_space_oper    548  * @file: See .write_end of address_space_operations
941  * @mapping:            "                         549  * @mapping:            "
942  * @pos:                "                         550  * @pos:                "
943  * @len:                "                         551  * @len:                "
944  * @copied:             "                         552  * @copied:             "
945  * @folio:              "                      !! 553  * @page:               "
946  * @fsdata:             "                         554  * @fsdata:             "
947  *                                                555  *
948  * simple_write_end does the minimum needed fo !! 556  * simple_write_end does the minimum needed for updating a page after writing is
949  * writing is done. It has the same API signat !! 557  * done. It has the same API signature as the .write_end of
950  * address_space_operations vector. So it can     558  * address_space_operations vector. So it can just be set onto .write_end for
951  * FSes that don't need any other processing.     559  * FSes that don't need any other processing. i_mutex is assumed to be held.
952  * Block based filesystems should use generic_    560  * Block based filesystems should use generic_write_end().
953  * NOTE: Even though i_size might get updated     561  * NOTE: Even though i_size might get updated by this function, mark_inode_dirty
954  * is not called, so a filesystem that actuall    562  * 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    563  * should extend on what's done here with a call to mark_inode_dirty() in the
956  * case that i_size has changed.                  564  * case that i_size has changed.
957  *                                                565  *
958  * Use *ONLY* with simple_read_folio()         !! 566  * Use *ONLY* with simple_readpage()
959  */                                               567  */
960 static int simple_write_end(struct file *file, !! 568 int simple_write_end(struct file *file, struct address_space *mapping,
961                         loff_t pos, unsigned l    569                         loff_t pos, unsigned len, unsigned copied,
962                         struct folio *folio, v !! 570                         struct page *page, void *fsdata)
963 {                                                 571 {
964         struct inode *inode = folio->mapping-> !! 572         struct inode *inode = page->mapping->host;
965         loff_t last_pos = pos + copied;           573         loff_t last_pos = pos + copied;
966                                                   574 
967         /* zero the stale part of the folio if !! 575         /* zero the stale part of the page if we did a short copy */
968         if (!folio_test_uptodate(folio)) {     !! 576         if (!PageUptodate(page)) {
969                 if (copied < len) {               577                 if (copied < len) {
970                         size_t from = offset_i !! 578                         unsigned from = pos & (PAGE_SIZE - 1);
971                                                   579 
972                         folio_zero_range(folio !! 580                         zero_user(page, from + copied, len - copied);
973                 }                                 581                 }
974                 folio_mark_uptodate(folio);    !! 582                 SetPageUptodate(page);
975         }                                         583         }
976         /*                                        584         /*
977          * No need to use i_size_read() here,     585          * No need to use i_size_read() here, the i_size
978          * cannot change under us because we h    586          * cannot change under us because we hold the i_mutex.
979          */                                       587          */
980         if (last_pos > inode->i_size)             588         if (last_pos > inode->i_size)
981                 i_size_write(inode, last_pos);    589                 i_size_write(inode, last_pos);
982                                                   590 
983         folio_mark_dirty(folio);               !! 591         set_page_dirty(page);
984         folio_unlock(folio);                   !! 592         unlock_page(page);
985         folio_put(folio);                      !! 593         put_page(page);
986                                                   594 
987         return copied;                            595         return copied;
988 }                                                 596 }
989                                                !! 597 EXPORT_SYMBOL(simple_write_end);
990 /*                                             << 
991  * Provides ramfs-style behavior: data in the  << 
992  */                                            << 
993 const struct address_space_operations ram_aops << 
994         .read_folio     = simple_read_folio,   << 
995         .write_begin    = simple_write_begin,  << 
996         .write_end      = simple_write_end,    << 
997         .dirty_folio    = noop_dirty_folio,    << 
998 };                                             << 
999 EXPORT_SYMBOL(ram_aops);                       << 
1000                                                  598 
1001 /*                                               599 /*
1002  * the inodes created here are not hashed. If    600  * the inodes created here are not hashed. If you use iunique to generate
1003  * unique inode values later for this filesys    601  * unique inode values later for this filesystem, then you must take care
1004  * to pass it an appropriate max_reserved val    602  * to pass it an appropriate max_reserved value to avoid collisions.
1005  */                                              603  */
1006 int simple_fill_super(struct super_block *s,     604 int simple_fill_super(struct super_block *s, unsigned long magic,
1007                       const struct tree_descr    605                       const struct tree_descr *files)
1008 {                                                606 {
1009         struct inode *inode;                     607         struct inode *inode;
                                                   >> 608         struct dentry *root;
1010         struct dentry *dentry;                   609         struct dentry *dentry;
1011         int i;                                   610         int i;
1012                                                  611 
1013         s->s_blocksize = PAGE_SIZE;              612         s->s_blocksize = PAGE_SIZE;
1014         s->s_blocksize_bits = PAGE_SHIFT;        613         s->s_blocksize_bits = PAGE_SHIFT;
1015         s->s_magic = magic;                      614         s->s_magic = magic;
1016         s->s_op = &simple_super_operations;      615         s->s_op = &simple_super_operations;
1017         s->s_time_gran = 1;                      616         s->s_time_gran = 1;
1018                                                  617 
1019         inode = new_inode(s);                    618         inode = new_inode(s);
1020         if (!inode)                              619         if (!inode)
1021                 return -ENOMEM;                  620                 return -ENOMEM;
1022         /*                                       621         /*
1023          * because the root inode is 1, the f    622          * because the root inode is 1, the files array must not contain an
1024          * entry at index 1                      623          * entry at index 1
1025          */                                      624          */
1026         inode->i_ino = 1;                        625         inode->i_ino = 1;
1027         inode->i_mode = S_IFDIR | 0755;          626         inode->i_mode = S_IFDIR | 0755;
1028         simple_inode_init_ts(inode);          !! 627         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1029         inode->i_op = &simple_dir_inode_opera    628         inode->i_op = &simple_dir_inode_operations;
1030         inode->i_fop = &simple_dir_operations    629         inode->i_fop = &simple_dir_operations;
1031         set_nlink(inode, 2);                     630         set_nlink(inode, 2);
1032         s->s_root = d_make_root(inode);       !! 631         root = d_make_root(inode);
1033         if (!s->s_root)                       !! 632         if (!root)
1034                 return -ENOMEM;                  633                 return -ENOMEM;
1035         for (i = 0; !files->name || files->na    634         for (i = 0; !files->name || files->name[0]; i++, files++) {
1036                 if (!files->name)                635                 if (!files->name)
1037                         continue;                636                         continue;
1038                                                  637 
1039                 /* warn if it tries to confli    638                 /* warn if it tries to conflict with the root inode */
1040                 if (unlikely(i == 1))            639                 if (unlikely(i == 1))
1041                         printk(KERN_WARNING "    640                         printk(KERN_WARNING "%s: %s passed in a files array"
1042                                 "with an inde    641                                 "with an index of 1!\n", __func__,
1043                                 s->s_type->na    642                                 s->s_type->name);
1044                                                  643 
1045                 dentry = d_alloc_name(s->s_ro !! 644                 dentry = d_alloc_name(root, files->name);
1046                 if (!dentry)                     645                 if (!dentry)
1047                         return -ENOMEM;       !! 646                         goto out;
1048                 inode = new_inode(s);            647                 inode = new_inode(s);
1049                 if (!inode) {                    648                 if (!inode) {
1050                         dput(dentry);            649                         dput(dentry);
1051                         return -ENOMEM;       !! 650                         goto out;
1052                 }                                651                 }
1053                 inode->i_mode = S_IFREG | fil    652                 inode->i_mode = S_IFREG | files->mode;
1054                 simple_inode_init_ts(inode);  !! 653                 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1055                 inode->i_fop = files->ops;       654                 inode->i_fop = files->ops;
1056                 inode->i_ino = i;                655                 inode->i_ino = i;
1057                 d_add(dentry, inode);            656                 d_add(dentry, inode);
1058         }                                        657         }
                                                   >> 658         s->s_root = root;
1059         return 0;                                659         return 0;
                                                   >> 660 out:
                                                   >> 661         d_genocide(root);
                                                   >> 662         shrink_dcache_parent(root);
                                                   >> 663         dput(root);
                                                   >> 664         return -ENOMEM;
1060 }                                                665 }
1061 EXPORT_SYMBOL(simple_fill_super);                666 EXPORT_SYMBOL(simple_fill_super);
1062                                                  667 
1063 static DEFINE_SPINLOCK(pin_fs_lock);             668 static DEFINE_SPINLOCK(pin_fs_lock);
1064                                                  669 
1065 int simple_pin_fs(struct file_system_type *ty    670 int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *count)
1066 {                                                671 {
1067         struct vfsmount *mnt = NULL;             672         struct vfsmount *mnt = NULL;
1068         spin_lock(&pin_fs_lock);                 673         spin_lock(&pin_fs_lock);
1069         if (unlikely(!*mount)) {                 674         if (unlikely(!*mount)) {
1070                 spin_unlock(&pin_fs_lock);       675                 spin_unlock(&pin_fs_lock);
1071                 mnt = vfs_kern_mount(type, SB    676                 mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, NULL);
1072                 if (IS_ERR(mnt))                 677                 if (IS_ERR(mnt))
1073                         return PTR_ERR(mnt);     678                         return PTR_ERR(mnt);
1074                 spin_lock(&pin_fs_lock);         679                 spin_lock(&pin_fs_lock);
1075                 if (!*mount)                     680                 if (!*mount)
1076                         *mount = mnt;            681                         *mount = mnt;
1077         }                                        682         }
1078         mntget(*mount);                          683         mntget(*mount);
1079         ++*count;                                684         ++*count;
1080         spin_unlock(&pin_fs_lock);               685         spin_unlock(&pin_fs_lock);
1081         mntput(mnt);                             686         mntput(mnt);
1082         return 0;                                687         return 0;
1083 }                                                688 }
1084 EXPORT_SYMBOL(simple_pin_fs);                    689 EXPORT_SYMBOL(simple_pin_fs);
1085                                                  690 
1086 void simple_release_fs(struct vfsmount **moun    691 void simple_release_fs(struct vfsmount **mount, int *count)
1087 {                                                692 {
1088         struct vfsmount *mnt;                    693         struct vfsmount *mnt;
1089         spin_lock(&pin_fs_lock);                 694         spin_lock(&pin_fs_lock);
1090         mnt = *mount;                            695         mnt = *mount;
1091         if (!--*count)                           696         if (!--*count)
1092                 *mount = NULL;                   697                 *mount = NULL;
1093         spin_unlock(&pin_fs_lock);               698         spin_unlock(&pin_fs_lock);
1094         mntput(mnt);                             699         mntput(mnt);
1095 }                                                700 }
1096 EXPORT_SYMBOL(simple_release_fs);                701 EXPORT_SYMBOL(simple_release_fs);
1097                                                  702 
1098 /**                                              703 /**
1099  * simple_read_from_buffer - copy data from t    704  * simple_read_from_buffer - copy data from the buffer to user space
1100  * @to: the user space buffer to read to         705  * @to: the user space buffer to read to
1101  * @count: the maximum number of bytes to rea    706  * @count: the maximum number of bytes to read
1102  * @ppos: the current position in the buffer     707  * @ppos: the current position in the buffer
1103  * @from: the buffer to read from                708  * @from: the buffer to read from
1104  * @available: the size of the buffer            709  * @available: the size of the buffer
1105  *                                               710  *
1106  * The simple_read_from_buffer() function rea    711  * The simple_read_from_buffer() function reads up to @count bytes from the
1107  * buffer @from at offset @ppos into the user    712  * buffer @from at offset @ppos into the user space address starting at @to.
1108  *                                               713  *
1109  * On success, the number of bytes read is re    714  * On success, the number of bytes read is returned and the offset @ppos is
1110  * advanced by this number, or negative value    715  * advanced by this number, or negative value is returned on error.
1111  **/                                             716  **/
1112 ssize_t simple_read_from_buffer(void __user *    717 ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
1113                                 const void *f    718                                 const void *from, size_t available)
1114 {                                                719 {
1115         loff_t pos = *ppos;                      720         loff_t pos = *ppos;
1116         size_t ret;                              721         size_t ret;
1117                                                  722 
1118         if (pos < 0)                             723         if (pos < 0)
1119                 return -EINVAL;                  724                 return -EINVAL;
1120         if (pos >= available || !count)          725         if (pos >= available || !count)
1121                 return 0;                        726                 return 0;
1122         if (count > available - pos)             727         if (count > available - pos)
1123                 count = available - pos;         728                 count = available - pos;
1124         ret = copy_to_user(to, from + pos, co    729         ret = copy_to_user(to, from + pos, count);
1125         if (ret == count)                        730         if (ret == count)
1126                 return -EFAULT;                  731                 return -EFAULT;
1127         count -= ret;                            732         count -= ret;
1128         *ppos = pos + count;                     733         *ppos = pos + count;
1129         return count;                            734         return count;
1130 }                                                735 }
1131 EXPORT_SYMBOL(simple_read_from_buffer);          736 EXPORT_SYMBOL(simple_read_from_buffer);
1132                                                  737 
1133 /**                                              738 /**
1134  * simple_write_to_buffer - copy data from us    739  * simple_write_to_buffer - copy data from user space to the buffer
1135  * @to: the buffer to write to                   740  * @to: the buffer to write to
1136  * @available: the size of the buffer            741  * @available: the size of the buffer
1137  * @ppos: the current position in the buffer     742  * @ppos: the current position in the buffer
1138  * @from: the user space buffer to read from     743  * @from: the user space buffer to read from
1139  * @count: the maximum number of bytes to rea    744  * @count: the maximum number of bytes to read
1140  *                                               745  *
1141  * The simple_write_to_buffer() function read    746  * The simple_write_to_buffer() function reads up to @count bytes from the user
1142  * space address starting at @from into the b    747  * space address starting at @from into the buffer @to at offset @ppos.
1143  *                                               748  *
1144  * On success, the number of bytes written is    749  * On success, the number of bytes written is returned and the offset @ppos is
1145  * advanced by this number, or negative value    750  * advanced by this number, or negative value is returned on error.
1146  **/                                             751  **/
1147 ssize_t simple_write_to_buffer(void *to, size    752 ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
1148                 const void __user *from, size    753                 const void __user *from, size_t count)
1149 {                                                754 {
1150         loff_t pos = *ppos;                      755         loff_t pos = *ppos;
1151         size_t res;                              756         size_t res;
1152                                                  757 
1153         if (pos < 0)                             758         if (pos < 0)
1154                 return -EINVAL;                  759                 return -EINVAL;
1155         if (pos >= available || !count)          760         if (pos >= available || !count)
1156                 return 0;                        761                 return 0;
1157         if (count > available - pos)             762         if (count > available - pos)
1158                 count = available - pos;         763                 count = available - pos;
1159         res = copy_from_user(to + pos, from,     764         res = copy_from_user(to + pos, from, count);
1160         if (res == count)                        765         if (res == count)
1161                 return -EFAULT;                  766                 return -EFAULT;
1162         count -= res;                            767         count -= res;
1163         *ppos = pos + count;                     768         *ppos = pos + count;
1164         return count;                            769         return count;
1165 }                                                770 }
1166 EXPORT_SYMBOL(simple_write_to_buffer);           771 EXPORT_SYMBOL(simple_write_to_buffer);
1167                                                  772 
1168 /**                                              773 /**
1169  * memory_read_from_buffer - copy data from t    774  * memory_read_from_buffer - copy data from the buffer
1170  * @to: the kernel space buffer to read to       775  * @to: the kernel space buffer to read to
1171  * @count: the maximum number of bytes to rea    776  * @count: the maximum number of bytes to read
1172  * @ppos: the current position in the buffer     777  * @ppos: the current position in the buffer
1173  * @from: the buffer to read from                778  * @from: the buffer to read from
1174  * @available: the size of the buffer            779  * @available: the size of the buffer
1175  *                                               780  *
1176  * The memory_read_from_buffer() function rea    781  * The memory_read_from_buffer() function reads up to @count bytes from the
1177  * buffer @from at offset @ppos into the kern    782  * buffer @from at offset @ppos into the kernel space address starting at @to.
1178  *                                               783  *
1179  * On success, the number of bytes read is re    784  * On success, the number of bytes read is returned and the offset @ppos is
1180  * advanced by this number, or negative value    785  * advanced by this number, or negative value is returned on error.
1181  **/                                             786  **/
1182 ssize_t memory_read_from_buffer(void *to, siz    787 ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
1183                                 const void *f    788                                 const void *from, size_t available)
1184 {                                                789 {
1185         loff_t pos = *ppos;                      790         loff_t pos = *ppos;
1186                                                  791 
1187         if (pos < 0)                             792         if (pos < 0)
1188                 return -EINVAL;                  793                 return -EINVAL;
1189         if (pos >= available)                    794         if (pos >= available)
1190                 return 0;                        795                 return 0;
1191         if (count > available - pos)             796         if (count > available - pos)
1192                 count = available - pos;         797                 count = available - pos;
1193         memcpy(to, from + pos, count);           798         memcpy(to, from + pos, count);
1194         *ppos = pos + count;                     799         *ppos = pos + count;
1195                                                  800 
1196         return count;                            801         return count;
1197 }                                                802 }
1198 EXPORT_SYMBOL(memory_read_from_buffer);          803 EXPORT_SYMBOL(memory_read_from_buffer);
1199                                                  804 
1200 /*                                               805 /*
1201  * Transaction based IO.                         806  * Transaction based IO.
1202  * The file expects a single write which trig    807  * The file expects a single write which triggers the transaction, and then
1203  * possibly a read which collects the result     808  * possibly a read which collects the result - which is stored in a
1204  * file-local buffer.                            809  * file-local buffer.
1205  */                                              810  */
1206                                                  811 
1207 void simple_transaction_set(struct file *file    812 void simple_transaction_set(struct file *file, size_t n)
1208 {                                                813 {
1209         struct simple_transaction_argresp *ar    814         struct simple_transaction_argresp *ar = file->private_data;
1210                                                  815 
1211         BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);    816         BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
1212                                                  817 
1213         /*                                       818         /*
1214          * The barrier ensures that ar->size     819          * The barrier ensures that ar->size will really remain zero until
1215          * ar->data is ready for reading.        820          * ar->data is ready for reading.
1216          */                                      821          */
1217         smp_mb();                                822         smp_mb();
1218         ar->size = n;                            823         ar->size = n;
1219 }                                                824 }
1220 EXPORT_SYMBOL(simple_transaction_set);           825 EXPORT_SYMBOL(simple_transaction_set);
1221                                                  826 
1222 char *simple_transaction_get(struct file *fil    827 char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
1223 {                                                828 {
1224         struct simple_transaction_argresp *ar    829         struct simple_transaction_argresp *ar;
1225         static DEFINE_SPINLOCK(simple_transac    830         static DEFINE_SPINLOCK(simple_transaction_lock);
1226                                                  831 
1227         if (size > SIMPLE_TRANSACTION_LIMIT -    832         if (size > SIMPLE_TRANSACTION_LIMIT - 1)
1228                 return ERR_PTR(-EFBIG);          833                 return ERR_PTR(-EFBIG);
1229                                                  834 
1230         ar = (struct simple_transaction_argre    835         ar = (struct simple_transaction_argresp *)get_zeroed_page(GFP_KERNEL);
1231         if (!ar)                                 836         if (!ar)
1232                 return ERR_PTR(-ENOMEM);         837                 return ERR_PTR(-ENOMEM);
1233                                                  838 
1234         spin_lock(&simple_transaction_lock);     839         spin_lock(&simple_transaction_lock);
1235                                                  840 
1236         /* only one write allowed per open */    841         /* only one write allowed per open */
1237         if (file->private_data) {                842         if (file->private_data) {
1238                 spin_unlock(&simple_transacti    843                 spin_unlock(&simple_transaction_lock);
1239                 free_page((unsigned long)ar);    844                 free_page((unsigned long)ar);
1240                 return ERR_PTR(-EBUSY);          845                 return ERR_PTR(-EBUSY);
1241         }                                        846         }
1242                                                  847 
1243         file->private_data = ar;                 848         file->private_data = ar;
1244                                                  849 
1245         spin_unlock(&simple_transaction_lock)    850         spin_unlock(&simple_transaction_lock);
1246                                                  851 
1247         if (copy_from_user(ar->data, buf, siz    852         if (copy_from_user(ar->data, buf, size))
1248                 return ERR_PTR(-EFAULT);         853                 return ERR_PTR(-EFAULT);
1249                                                  854 
1250         return ar->data;                         855         return ar->data;
1251 }                                                856 }
1252 EXPORT_SYMBOL(simple_transaction_get);           857 EXPORT_SYMBOL(simple_transaction_get);
1253                                                  858 
1254 ssize_t simple_transaction_read(struct file *    859 ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
1255 {                                                860 {
1256         struct simple_transaction_argresp *ar    861         struct simple_transaction_argresp *ar = file->private_data;
1257                                                  862 
1258         if (!ar)                                 863         if (!ar)
1259                 return 0;                        864                 return 0;
1260         return simple_read_from_buffer(buf, s    865         return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
1261 }                                                866 }
1262 EXPORT_SYMBOL(simple_transaction_read);          867 EXPORT_SYMBOL(simple_transaction_read);
1263                                                  868 
1264 int simple_transaction_release(struct inode *    869 int simple_transaction_release(struct inode *inode, struct file *file)
1265 {                                                870 {
1266         free_page((unsigned long)file->privat    871         free_page((unsigned long)file->private_data);
1267         return 0;                                872         return 0;
1268 }                                                873 }
1269 EXPORT_SYMBOL(simple_transaction_release);       874 EXPORT_SYMBOL(simple_transaction_release);
1270                                                  875 
1271 /* Simple attribute files */                     876 /* Simple attribute files */
1272                                                  877 
1273 struct simple_attr {                             878 struct simple_attr {
1274         int (*get)(void *, u64 *);               879         int (*get)(void *, u64 *);
1275         int (*set)(void *, u64);                 880         int (*set)(void *, u64);
1276         char get_buf[24];       /* enough to     881         char get_buf[24];       /* enough to store a u64 and "\n\0" */
1277         char set_buf[24];                        882         char set_buf[24];
1278         void *data;                              883         void *data;
1279         const char *fmt;        /* format for    884         const char *fmt;        /* format for read operation */
1280         struct mutex mutex;     /* protects a    885         struct mutex mutex;     /* protects access to these buffers */
1281 };                                               886 };
1282                                                  887 
1283 /* simple_attr_open is called by an actual at    888 /* simple_attr_open is called by an actual attribute open file operation
1284  * to set the attribute specific access opera    889  * to set the attribute specific access operations. */
1285 int simple_attr_open(struct inode *inode, str    890 int simple_attr_open(struct inode *inode, struct file *file,
1286                      int (*get)(void *, u64 *    891                      int (*get)(void *, u64 *), int (*set)(void *, u64),
1287                      const char *fmt)            892                      const char *fmt)
1288 {                                                893 {
1289         struct simple_attr *attr;                894         struct simple_attr *attr;
1290                                                  895 
1291         attr = kzalloc(sizeof(*attr), GFP_KER    896         attr = kzalloc(sizeof(*attr), GFP_KERNEL);
1292         if (!attr)                               897         if (!attr)
1293                 return -ENOMEM;                  898                 return -ENOMEM;
1294                                                  899 
1295         attr->get = get;                         900         attr->get = get;
1296         attr->set = set;                         901         attr->set = set;
1297         attr->data = inode->i_private;           902         attr->data = inode->i_private;
1298         attr->fmt = fmt;                         903         attr->fmt = fmt;
1299         mutex_init(&attr->mutex);                904         mutex_init(&attr->mutex);
1300                                                  905 
1301         file->private_data = attr;               906         file->private_data = attr;
1302                                                  907 
1303         return nonseekable_open(inode, file);    908         return nonseekable_open(inode, file);
1304 }                                                909 }
1305 EXPORT_SYMBOL_GPL(simple_attr_open);             910 EXPORT_SYMBOL_GPL(simple_attr_open);
1306                                                  911 
1307 int simple_attr_release(struct inode *inode,     912 int simple_attr_release(struct inode *inode, struct file *file)
1308 {                                                913 {
1309         kfree(file->private_data);               914         kfree(file->private_data);
1310         return 0;                                915         return 0;
1311 }                                                916 }
1312 EXPORT_SYMBOL_GPL(simple_attr_release); /* GP    917 EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only?  This?  Really? */
1313                                                  918 
1314 /* read from the buffer that is filled with t    919 /* read from the buffer that is filled with the get function */
1315 ssize_t simple_attr_read(struct file *file, c    920 ssize_t simple_attr_read(struct file *file, char __user *buf,
1316                          size_t len, loff_t *    921                          size_t len, loff_t *ppos)
1317 {                                                922 {
1318         struct simple_attr *attr;                923         struct simple_attr *attr;
1319         size_t size;                             924         size_t size;
1320         ssize_t ret;                             925         ssize_t ret;
1321                                                  926 
1322         attr = file->private_data;               927         attr = file->private_data;
1323                                                  928 
1324         if (!attr->get)                          929         if (!attr->get)
1325                 return -EACCES;                  930                 return -EACCES;
1326                                                  931 
1327         ret = mutex_lock_interruptible(&attr-    932         ret = mutex_lock_interruptible(&attr->mutex);
1328         if (ret)                                 933         if (ret)
1329                 return ret;                      934                 return ret;
1330                                                  935 
1331         if (*ppos && attr->get_buf[0]) {         936         if (*ppos && attr->get_buf[0]) {
1332                 /* continued read */             937                 /* continued read */
1333                 size = strlen(attr->get_buf);    938                 size = strlen(attr->get_buf);
1334         } else {                                 939         } else {
1335                 /* first read */                 940                 /* first read */
1336                 u64 val;                         941                 u64 val;
1337                 ret = attr->get(attr->data, &    942                 ret = attr->get(attr->data, &val);
1338                 if (ret)                         943                 if (ret)
1339                         goto out;                944                         goto out;
1340                                                  945 
1341                 size = scnprintf(attr->get_bu    946                 size = scnprintf(attr->get_buf, sizeof(attr->get_buf),
1342                                  attr->fmt, (    947                                  attr->fmt, (unsigned long long)val);
1343         }                                        948         }
1344                                                  949 
1345         ret = simple_read_from_buffer(buf, le    950         ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size);
1346 out:                                             951 out:
1347         mutex_unlock(&attr->mutex);              952         mutex_unlock(&attr->mutex);
1348         return ret;                              953         return ret;
1349 }                                                954 }
1350 EXPORT_SYMBOL_GPL(simple_attr_read);             955 EXPORT_SYMBOL_GPL(simple_attr_read);
1351                                                  956 
1352 /* interpret the buffer as a number to call t    957 /* interpret the buffer as a number to call the set function with */
1353 static ssize_t simple_attr_write_xsigned(stru    958 static ssize_t simple_attr_write_xsigned(struct file *file, const char __user *buf,
1354                           size_t len, loff_t     959                           size_t len, loff_t *ppos, bool is_signed)
1355 {                                                960 {
1356         struct simple_attr *attr;                961         struct simple_attr *attr;
1357         unsigned long long val;                  962         unsigned long long val;
1358         size_t size;                             963         size_t size;
1359         ssize_t ret;                             964         ssize_t ret;
1360                                                  965 
1361         attr = file->private_data;               966         attr = file->private_data;
1362         if (!attr->set)                          967         if (!attr->set)
1363                 return -EACCES;                  968                 return -EACCES;
1364                                                  969 
1365         ret = mutex_lock_interruptible(&attr-    970         ret = mutex_lock_interruptible(&attr->mutex);
1366         if (ret)                                 971         if (ret)
1367                 return ret;                      972                 return ret;
1368                                                  973 
1369         ret = -EFAULT;                           974         ret = -EFAULT;
1370         size = min(sizeof(attr->set_buf) - 1,    975         size = min(sizeof(attr->set_buf) - 1, len);
1371         if (copy_from_user(attr->set_buf, buf    976         if (copy_from_user(attr->set_buf, buf, size))
1372                 goto out;                        977                 goto out;
1373                                                  978 
1374         attr->set_buf[size] = '\0';              979         attr->set_buf[size] = '\0';
1375         if (is_signed)                           980         if (is_signed)
1376                 ret = kstrtoll(attr->set_buf,    981                 ret = kstrtoll(attr->set_buf, 0, &val);
1377         else                                     982         else
1378                 ret = kstrtoull(attr->set_buf    983                 ret = kstrtoull(attr->set_buf, 0, &val);
1379         if (ret)                                 984         if (ret)
1380                 goto out;                        985                 goto out;
1381         ret = attr->set(attr->data, val);        986         ret = attr->set(attr->data, val);
1382         if (ret == 0)                            987         if (ret == 0)
1383                 ret = len; /* on success, cla    988                 ret = len; /* on success, claim we got the whole input */
1384 out:                                             989 out:
1385         mutex_unlock(&attr->mutex);              990         mutex_unlock(&attr->mutex);
1386         return ret;                              991         return ret;
1387 }                                                992 }
1388                                                  993 
1389 ssize_t simple_attr_write(struct file *file,     994 ssize_t simple_attr_write(struct file *file, const char __user *buf,
1390                           size_t len, loff_t     995                           size_t len, loff_t *ppos)
1391 {                                                996 {
1392         return simple_attr_write_xsigned(file    997         return simple_attr_write_xsigned(file, buf, len, ppos, false);
1393 }                                                998 }
1394 EXPORT_SYMBOL_GPL(simple_attr_write);            999 EXPORT_SYMBOL_GPL(simple_attr_write);
1395                                                  1000 
1396 ssize_t simple_attr_write_signed(struct file     1001 ssize_t simple_attr_write_signed(struct file *file, const char __user *buf,
1397                           size_t len, loff_t     1002                           size_t len, loff_t *ppos)
1398 {                                                1003 {
1399         return simple_attr_write_xsigned(file    1004         return simple_attr_write_xsigned(file, buf, len, ppos, true);
1400 }                                                1005 }
1401 EXPORT_SYMBOL_GPL(simple_attr_write_signed);     1006 EXPORT_SYMBOL_GPL(simple_attr_write_signed);
1402                                                  1007 
1403 /**                                              1008 /**
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 /**                                           << 
1445  * generic_fh_to_dentry - generic helper for     1009  * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
1446  * @sb:         filesystem to do the file han    1010  * @sb:         filesystem to do the file handle conversion on
1447  * @fid:        file handle to convert           1011  * @fid:        file handle to convert
1448  * @fh_len:     length of the file handle in     1012  * @fh_len:     length of the file handle in bytes
1449  * @fh_type:    type of file handle              1013  * @fh_type:    type of file handle
1450  * @get_inode:  filesystem callback to retrie    1014  * @get_inode:  filesystem callback to retrieve inode
1451  *                                               1015  *
1452  * This function decodes @fid as long as it h    1016  * This function decodes @fid as long as it has one of the well-known
1453  * Linux filehandle types and calls @get_inod    1017  * Linux filehandle types and calls @get_inode on it to retrieve the
1454  * inode for the object specified in the file    1018  * inode for the object specified in the file handle.
1455  */                                              1019  */
1456 struct dentry *generic_fh_to_dentry(struct su    1020 struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid,
1457                 int fh_len, int fh_type, stru    1021                 int fh_len, int fh_type, struct inode *(*get_inode)
1458                         (struct super_block *    1022                         (struct super_block *sb, u64 ino, u32 gen))
1459 {                                                1023 {
1460         struct inode *inode = NULL;              1024         struct inode *inode = NULL;
1461                                                  1025 
1462         if (fh_len < 2)                          1026         if (fh_len < 2)
1463                 return NULL;                     1027                 return NULL;
1464                                                  1028 
1465         switch (fh_type) {                       1029         switch (fh_type) {
1466         case FILEID_INO32_GEN:                   1030         case FILEID_INO32_GEN:
1467         case FILEID_INO32_GEN_PARENT:            1031         case FILEID_INO32_GEN_PARENT:
1468                 inode = get_inode(sb, fid->i3    1032                 inode = get_inode(sb, fid->i32.ino, fid->i32.gen);
1469                 break;                           1033                 break;
1470         }                                        1034         }
1471                                                  1035 
1472         return d_obtain_alias(inode);            1036         return d_obtain_alias(inode);
1473 }                                                1037 }
1474 EXPORT_SYMBOL_GPL(generic_fh_to_dentry);         1038 EXPORT_SYMBOL_GPL(generic_fh_to_dentry);
1475                                                  1039 
1476 /**                                              1040 /**
1477  * generic_fh_to_parent - generic helper for     1041  * generic_fh_to_parent - generic helper for the fh_to_parent export operation
1478  * @sb:         filesystem to do the file han    1042  * @sb:         filesystem to do the file handle conversion on
1479  * @fid:        file handle to convert           1043  * @fid:        file handle to convert
1480  * @fh_len:     length of the file handle in     1044  * @fh_len:     length of the file handle in bytes
1481  * @fh_type:    type of file handle              1045  * @fh_type:    type of file handle
1482  * @get_inode:  filesystem callback to retrie    1046  * @get_inode:  filesystem callback to retrieve inode
1483  *                                               1047  *
1484  * This function decodes @fid as long as it h    1048  * This function decodes @fid as long as it has one of the well-known
1485  * Linux filehandle types and calls @get_inod    1049  * Linux filehandle types and calls @get_inode on it to retrieve the
1486  * inode for the _parent_ object specified in    1050  * inode for the _parent_ object specified in the file handle if it
1487  * is specified in the file handle, or NULL o    1051  * is specified in the file handle, or NULL otherwise.
1488  */                                              1052  */
1489 struct dentry *generic_fh_to_parent(struct su    1053 struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,
1490                 int fh_len, int fh_type, stru    1054                 int fh_len, int fh_type, struct inode *(*get_inode)
1491                         (struct super_block *    1055                         (struct super_block *sb, u64 ino, u32 gen))
1492 {                                                1056 {
1493         struct inode *inode = NULL;              1057         struct inode *inode = NULL;
1494                                                  1058 
1495         if (fh_len <= 2)                         1059         if (fh_len <= 2)
1496                 return NULL;                     1060                 return NULL;
1497                                                  1061 
1498         switch (fh_type) {                       1062         switch (fh_type) {
1499         case FILEID_INO32_GEN_PARENT:            1063         case FILEID_INO32_GEN_PARENT:
1500                 inode = get_inode(sb, fid->i3    1064                 inode = get_inode(sb, fid->i32.parent_ino,
1501                                   (fh_len > 3    1065                                   (fh_len > 3 ? fid->i32.parent_gen : 0));
1502                 break;                           1066                 break;
1503         }                                        1067         }
1504                                                  1068 
1505         return d_obtain_alias(inode);            1069         return d_obtain_alias(inode);
1506 }                                                1070 }
1507 EXPORT_SYMBOL_GPL(generic_fh_to_parent);         1071 EXPORT_SYMBOL_GPL(generic_fh_to_parent);
1508                                                  1072 
1509 /**                                              1073 /**
1510  * __generic_file_fsync - generic fsync imple    1074  * __generic_file_fsync - generic fsync implementation for simple filesystems
1511  *                                               1075  *
1512  * @file:       file to synchronize              1076  * @file:       file to synchronize
1513  * @start:      start offset in bytes            1077  * @start:      start offset in bytes
1514  * @end:        end offset in bytes (inclusiv    1078  * @end:        end offset in bytes (inclusive)
1515  * @datasync:   only synchronize essential me    1079  * @datasync:   only synchronize essential metadata if true
1516  *                                               1080  *
1517  * This is a generic implementation of the fs    1081  * This is a generic implementation of the fsync method for simple
1518  * filesystems which track all non-inode meta    1082  * filesystems which track all non-inode metadata in the buffers list
1519  * hanging off the address_space structure.      1083  * hanging off the address_space structure.
1520  */                                              1084  */
1521 int __generic_file_fsync(struct file *file, l    1085 int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
1522                                  int datasync    1086                                  int datasync)
1523 {                                                1087 {
1524         struct inode *inode = file->f_mapping    1088         struct inode *inode = file->f_mapping->host;
1525         int err;                                 1089         int err;
1526         int ret;                                 1090         int ret;
1527                                                  1091 
1528         err = file_write_and_wait_range(file,    1092         err = file_write_and_wait_range(file, start, end);
1529         if (err)                                 1093         if (err)
1530                 return err;                      1094                 return err;
1531                                                  1095 
1532         inode_lock(inode);                       1096         inode_lock(inode);
1533         ret = sync_mapping_buffers(inode->i_m    1097         ret = sync_mapping_buffers(inode->i_mapping);
1534         if (!(inode->i_state & I_DIRTY_ALL))     1098         if (!(inode->i_state & I_DIRTY_ALL))
1535                 goto out;                        1099                 goto out;
1536         if (datasync && !(inode->i_state & I_    1100         if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
1537                 goto out;                        1101                 goto out;
1538                                                  1102 
1539         err = sync_inode_metadata(inode, 1);     1103         err = sync_inode_metadata(inode, 1);
1540         if (ret == 0)                            1104         if (ret == 0)
1541                 ret = err;                       1105                 ret = err;
1542                                                  1106 
1543 out:                                             1107 out:
1544         inode_unlock(inode);                     1108         inode_unlock(inode);
1545         /* check and advance again to catch e    1109         /* check and advance again to catch errors after syncing out buffers */
1546         err = file_check_and_advance_wb_err(f    1110         err = file_check_and_advance_wb_err(file);
1547         if (ret == 0)                            1111         if (ret == 0)
1548                 ret = err;                       1112                 ret = err;
1549         return ret;                              1113         return ret;
1550 }                                                1114 }
1551 EXPORT_SYMBOL(__generic_file_fsync);             1115 EXPORT_SYMBOL(__generic_file_fsync);
1552                                                  1116 
1553 /**                                              1117 /**
1554  * generic_file_fsync - generic fsync impleme    1118  * generic_file_fsync - generic fsync implementation for simple filesystems
1555  *                      with flush               1119  *                      with flush
1556  * @file:       file to synchronize              1120  * @file:       file to synchronize
1557  * @start:      start offset in bytes            1121  * @start:      start offset in bytes
1558  * @end:        end offset in bytes (inclusiv    1122  * @end:        end offset in bytes (inclusive)
1559  * @datasync:   only synchronize essential me    1123  * @datasync:   only synchronize essential metadata if true
1560  *                                               1124  *
1561  */                                              1125  */
1562                                                  1126 
1563 int generic_file_fsync(struct file *file, lof    1127 int generic_file_fsync(struct file *file, loff_t start, loff_t end,
1564                        int datasync)             1128                        int datasync)
1565 {                                                1129 {
1566         struct inode *inode = file->f_mapping    1130         struct inode *inode = file->f_mapping->host;
1567         int err;                                 1131         int err;
1568                                                  1132 
1569         err = __generic_file_fsync(file, star    1133         err = __generic_file_fsync(file, start, end, datasync);
1570         if (err)                                 1134         if (err)
1571                 return err;                      1135                 return err;
1572         return blkdev_issue_flush(inode->i_sb !! 1136         return blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL);
1573 }                                                1137 }
1574 EXPORT_SYMBOL(generic_file_fsync);               1138 EXPORT_SYMBOL(generic_file_fsync);
1575                                                  1139 
1576 /**                                              1140 /**
1577  * generic_check_addressable - Check addressa    1141  * generic_check_addressable - Check addressability of file system
1578  * @blocksize_bits:     log of file system bl    1142  * @blocksize_bits:     log of file system block size
1579  * @num_blocks:         number of blocks in f    1143  * @num_blocks:         number of blocks in file system
1580  *                                               1144  *
1581  * Determine whether a file system with @num_    1145  * Determine whether a file system with @num_blocks blocks (and a
1582  * block size of 2**@blocksize_bits) is addre    1146  * block size of 2**@blocksize_bits) is addressable by the sector_t
1583  * and page cache of the system.  Return 0 if    1147  * and page cache of the system.  Return 0 if so and -EFBIG otherwise.
1584  */                                              1148  */
1585 int generic_check_addressable(unsigned blocks    1149 int generic_check_addressable(unsigned blocksize_bits, u64 num_blocks)
1586 {                                                1150 {
1587         u64 last_fs_block = num_blocks - 1;      1151         u64 last_fs_block = num_blocks - 1;
1588         u64 last_fs_page =                       1152         u64 last_fs_page =
1589                 last_fs_block >> (PAGE_SHIFT     1153                 last_fs_block >> (PAGE_SHIFT - blocksize_bits);
1590                                                  1154 
1591         if (unlikely(num_blocks == 0))           1155         if (unlikely(num_blocks == 0))
1592                 return 0;                        1156                 return 0;
1593                                                  1157 
1594         if ((blocksize_bits < 9) || (blocksiz    1158         if ((blocksize_bits < 9) || (blocksize_bits > PAGE_SHIFT))
1595                 return -EINVAL;                  1159                 return -EINVAL;
1596                                                  1160 
1597         if ((last_fs_block > (sector_t)(~0ULL    1161         if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) ||
1598             (last_fs_page > (pgoff_t)(~0ULL))    1162             (last_fs_page > (pgoff_t)(~0ULL))) {
1599                 return -EFBIG;                   1163                 return -EFBIG;
1600         }                                        1164         }
1601         return 0;                                1165         return 0;
1602 }                                                1166 }
1603 EXPORT_SYMBOL(generic_check_addressable);        1167 EXPORT_SYMBOL(generic_check_addressable);
1604                                                  1168 
1605 /*                                               1169 /*
1606  * No-op implementation of ->fsync for in-mem    1170  * No-op implementation of ->fsync for in-memory filesystems.
1607  */                                              1171  */
1608 int noop_fsync(struct file *file, loff_t star    1172 int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync)
1609 {                                                1173 {
1610         return 0;                                1174         return 0;
1611 }                                                1175 }
1612 EXPORT_SYMBOL(noop_fsync);                       1176 EXPORT_SYMBOL(noop_fsync);
1613                                                  1177 
                                                   >> 1178 int noop_set_page_dirty(struct page *page)
                                                   >> 1179 {
                                                   >> 1180         /*
                                                   >> 1181          * Unlike __set_page_dirty_no_writeback that handles dirty page
                                                   >> 1182          * tracking in the page object, dax does all dirty tracking in
                                                   >> 1183          * the inode address_space in response to mkwrite faults. In the
                                                   >> 1184          * dax case we only need to worry about potentially dirty CPU
                                                   >> 1185          * caches, not dirty page cache pages to write back.
                                                   >> 1186          *
                                                   >> 1187          * This callback is defined to prevent fallback to
                                                   >> 1188          * __set_page_dirty_buffers() in set_page_dirty().
                                                   >> 1189          */
                                                   >> 1190         return 0;
                                                   >> 1191 }
                                                   >> 1192 EXPORT_SYMBOL_GPL(noop_set_page_dirty);
                                                   >> 1193 
                                                   >> 1194 void noop_invalidatepage(struct page *page, unsigned int offset,
                                                   >> 1195                 unsigned int length)
                                                   >> 1196 {
                                                   >> 1197         /*
                                                   >> 1198          * There is no page cache to invalidate in the dax case, however
                                                   >> 1199          * we need this callback defined to prevent falling back to
                                                   >> 1200          * block_invalidatepage() in do_invalidatepage().
                                                   >> 1201          */
                                                   >> 1202 }
                                                   >> 1203 EXPORT_SYMBOL_GPL(noop_invalidatepage);
                                                   >> 1204 
1614 ssize_t noop_direct_IO(struct kiocb *iocb, st    1205 ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
1615 {                                                1206 {
1616         /*                                       1207         /*
1617          * iomap based filesystems support di    1208          * iomap based filesystems support direct I/O without need for
1618          * this callback. However, it still n    1209          * this callback. However, it still needs to be set in
1619          * inode->a_ops so that open/fcntl kn    1210          * inode->a_ops so that open/fcntl know that direct I/O is
1620          * generally supported.                  1211          * generally supported.
1621          */                                      1212          */
1622         return -EINVAL;                          1213         return -EINVAL;
1623 }                                                1214 }
1624 EXPORT_SYMBOL_GPL(noop_direct_IO);               1215 EXPORT_SYMBOL_GPL(noop_direct_IO);
1625                                                  1216 
1626 /* Because kfree isn't assignment-compatible     1217 /* Because kfree isn't assignment-compatible with void(void*) ;-/ */
1627 void kfree_link(void *p)                         1218 void kfree_link(void *p)
1628 {                                                1219 {
1629         kfree(p);                                1220         kfree(p);
1630 }                                                1221 }
1631 EXPORT_SYMBOL(kfree_link);                       1222 EXPORT_SYMBOL(kfree_link);
1632                                                  1223 
                                                   >> 1224 /*
                                                   >> 1225  * nop .set_page_dirty method so that people can use .page_mkwrite on
                                                   >> 1226  * anon inodes.
                                                   >> 1227  */
                                                   >> 1228 static int anon_set_page_dirty(struct page *page)
                                                   >> 1229 {
                                                   >> 1230         return 0;
                                                   >> 1231 };
                                                   >> 1232 
                                                   >> 1233 /*
                                                   >> 1234  * A single inode exists for all anon_inode files. Contrary to pipes,
                                                   >> 1235  * anon_inode inodes have no associated per-instance data, so we need
                                                   >> 1236  * only allocate one of them.
                                                   >> 1237  */
1633 struct inode *alloc_anon_inode(struct super_b    1238 struct inode *alloc_anon_inode(struct super_block *s)
1634 {                                                1239 {
1635         static const struct address_space_ope    1240         static const struct address_space_operations anon_aops = {
1636                 .dirty_folio    = noop_dirty_ !! 1241                 .set_page_dirty = anon_set_page_dirty,
1637         };                                       1242         };
1638         struct inode *inode = new_inode_pseud    1243         struct inode *inode = new_inode_pseudo(s);
1639                                                  1244 
1640         if (!inode)                              1245         if (!inode)
1641                 return ERR_PTR(-ENOMEM);         1246                 return ERR_PTR(-ENOMEM);
1642                                                  1247 
1643         inode->i_ino = get_next_ino();           1248         inode->i_ino = get_next_ino();
1644         inode->i_mapping->a_ops = &anon_aops;    1249         inode->i_mapping->a_ops = &anon_aops;
1645                                                  1250 
1646         /*                                       1251         /*
1647          * Mark the inode dirty from the very    1252          * Mark the inode dirty from the very beginning,
1648          * that way it will never be moved to    1253          * that way it will never be moved to the dirty
1649          * list because mark_inode_dirty() wi    1254          * list because mark_inode_dirty() will think
1650          * that it already _is_ on the dirty     1255          * that it already _is_ on the dirty list.
1651          */                                      1256          */
1652         inode->i_state = I_DIRTY;                1257         inode->i_state = I_DIRTY;
1653         inode->i_mode = S_IRUSR | S_IWUSR;       1258         inode->i_mode = S_IRUSR | S_IWUSR;
1654         inode->i_uid = current_fsuid();          1259         inode->i_uid = current_fsuid();
1655         inode->i_gid = current_fsgid();          1260         inode->i_gid = current_fsgid();
1656         inode->i_flags |= S_PRIVATE;             1261         inode->i_flags |= S_PRIVATE;
1657         simple_inode_init_ts(inode);          !! 1262         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
1658         return inode;                            1263         return inode;
1659 }                                                1264 }
1660 EXPORT_SYMBOL(alloc_anon_inode);                 1265 EXPORT_SYMBOL(alloc_anon_inode);
1661                                                  1266 
1662 /**                                              1267 /**
1663  * simple_nosetlease - generic helper for pro    1268  * simple_nosetlease - generic helper for prohibiting leases
1664  * @filp: file pointer                           1269  * @filp: file pointer
1665  * @arg: type of lease to obtain                 1270  * @arg: type of lease to obtain
1666  * @flp: new lease supplied for insertion        1271  * @flp: new lease supplied for insertion
1667  * @priv: private data for lm_setup operation    1272  * @priv: private data for lm_setup operation
1668  *                                               1273  *
1669  * Generic helper for filesystems that do not    1274  * Generic helper for filesystems that do not wish to allow leases to be set.
1670  * All arguments are ignored and it just retu    1275  * All arguments are ignored and it just returns -EINVAL.
1671  */                                              1276  */
1672 int                                              1277 int
1673 simple_nosetlease(struct file *filp, int arg, !! 1278 simple_nosetlease(struct file *filp, long arg, struct file_lock **flp,
1674                   void **priv)                   1279                   void **priv)
1675 {                                                1280 {
1676         return -EINVAL;                          1281         return -EINVAL;
1677 }                                                1282 }
1678 EXPORT_SYMBOL(simple_nosetlease);                1283 EXPORT_SYMBOL(simple_nosetlease);
1679                                                  1284 
1680 /**                                              1285 /**
1681  * simple_get_link - generic helper to get th    1286  * simple_get_link - generic helper to get the target of "fast" symlinks
1682  * @dentry: not used here                        1287  * @dentry: not used here
1683  * @inode: the symlink inode                     1288  * @inode: the symlink inode
1684  * @done: not used here                          1289  * @done: not used here
1685  *                                               1290  *
1686  * Generic helper for filesystems to use for     1291  * Generic helper for filesystems to use for symlink inodes where a pointer to
1687  * the symlink target is stored in ->i_link.     1292  * the symlink target is stored in ->i_link.  NOTE: this isn't normally called,
1688  * since as an optimization the path lookup c    1293  * since as an optimization the path lookup code uses any non-NULL ->i_link
1689  * directly, without calling ->get_link().  B    1294  * directly, without calling ->get_link().  But ->get_link() still must be set,
1690  * to mark the inode_operations as being for     1295  * to mark the inode_operations as being for a symlink.
1691  *                                               1296  *
1692  * Return: the symlink target                    1297  * Return: the symlink target
1693  */                                              1298  */
1694 const char *simple_get_link(struct dentry *de    1299 const char *simple_get_link(struct dentry *dentry, struct inode *inode,
1695                             struct delayed_ca    1300                             struct delayed_call *done)
1696 {                                                1301 {
1697         return inode->i_link;                    1302         return inode->i_link;
1698 }                                                1303 }
1699 EXPORT_SYMBOL(simple_get_link);                  1304 EXPORT_SYMBOL(simple_get_link);
1700                                                  1305 
1701 const struct inode_operations simple_symlink_    1306 const struct inode_operations simple_symlink_inode_operations = {
1702         .get_link = simple_get_link,             1307         .get_link = simple_get_link,
1703 };                                               1308 };
1704 EXPORT_SYMBOL(simple_symlink_inode_operations    1309 EXPORT_SYMBOL(simple_symlink_inode_operations);
1705                                                  1310 
1706 /*                                               1311 /*
1707  * Operations for a permanently empty directo    1312  * Operations for a permanently empty directory.
1708  */                                              1313  */
1709 static struct dentry *empty_dir_lookup(struct    1314 static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
1710 {                                                1315 {
1711         return ERR_PTR(-ENOENT);                 1316         return ERR_PTR(-ENOENT);
1712 }                                                1317 }
1713                                                  1318 
1714 static int empty_dir_getattr(struct mnt_idmap !! 1319 static int empty_dir_getattr(const struct path *path, struct kstat *stat,
1715                              const struct pat << 
1716                              u32 request_mask    1320                              u32 request_mask, unsigned int query_flags)
1717 {                                                1321 {
1718         struct inode *inode = d_inode(path->d    1322         struct inode *inode = d_inode(path->dentry);
1719         generic_fillattr(&nop_mnt_idmap, requ !! 1323         generic_fillattr(inode, stat);
1720         return 0;                                1324         return 0;
1721 }                                                1325 }
1722                                                  1326 
1723 static int empty_dir_setattr(struct mnt_idmap !! 1327 static int empty_dir_setattr(struct dentry *dentry, struct iattr *attr)
1724                              struct dentry *d << 
1725 {                                                1328 {
1726         return -EPERM;                           1329         return -EPERM;
1727 }                                                1330 }
1728                                                  1331 
1729 static ssize_t empty_dir_listxattr(struct den    1332 static ssize_t empty_dir_listxattr(struct dentry *dentry, char *list, size_t size)
1730 {                                                1333 {
1731         return -EOPNOTSUPP;                      1334         return -EOPNOTSUPP;
1732 }                                                1335 }
1733                                                  1336 
1734 static const struct inode_operations empty_di    1337 static const struct inode_operations empty_dir_inode_operations = {
1735         .lookup         = empty_dir_lookup,      1338         .lookup         = empty_dir_lookup,
1736         .permission     = generic_permission,    1339         .permission     = generic_permission,
1737         .setattr        = empty_dir_setattr,     1340         .setattr        = empty_dir_setattr,
1738         .getattr        = empty_dir_getattr,     1341         .getattr        = empty_dir_getattr,
1739         .listxattr      = empty_dir_listxattr    1342         .listxattr      = empty_dir_listxattr,
1740 };                                               1343 };
1741                                                  1344 
1742 static loff_t empty_dir_llseek(struct file *f    1345 static loff_t empty_dir_llseek(struct file *file, loff_t offset, int whence)
1743 {                                                1346 {
1744         /* An empty directory has two entries    1347         /* An empty directory has two entries . and .. at offsets 0 and 1 */
1745         return generic_file_llseek_size(file,    1348         return generic_file_llseek_size(file, offset, whence, 2, 2);
1746 }                                                1349 }
1747                                                  1350 
1748 static int empty_dir_readdir(struct file *fil    1351 static int empty_dir_readdir(struct file *file, struct dir_context *ctx)
1749 {                                                1352 {
1750         dir_emit_dots(file, ctx);                1353         dir_emit_dots(file, ctx);
1751         return 0;                                1354         return 0;
1752 }                                                1355 }
1753                                                  1356 
1754 static const struct file_operations empty_dir    1357 static const struct file_operations empty_dir_operations = {
1755         .llseek         = empty_dir_llseek,      1358         .llseek         = empty_dir_llseek,
1756         .read           = generic_read_dir,      1359         .read           = generic_read_dir,
1757         .iterate_shared = empty_dir_readdir,     1360         .iterate_shared = empty_dir_readdir,
1758         .fsync          = noop_fsync,            1361         .fsync          = noop_fsync,
1759 };                                               1362 };
1760                                                  1363 
1761                                                  1364 
1762 void make_empty_dir_inode(struct inode *inode    1365 void make_empty_dir_inode(struct inode *inode)
1763 {                                                1366 {
1764         set_nlink(inode, 2);                     1367         set_nlink(inode, 2);
1765         inode->i_mode = S_IFDIR | S_IRUGO | S    1368         inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO;
1766         inode->i_uid = GLOBAL_ROOT_UID;          1369         inode->i_uid = GLOBAL_ROOT_UID;
1767         inode->i_gid = GLOBAL_ROOT_GID;          1370         inode->i_gid = GLOBAL_ROOT_GID;
1768         inode->i_rdev = 0;                       1371         inode->i_rdev = 0;
1769         inode->i_size = 0;                       1372         inode->i_size = 0;
1770         inode->i_blkbits = PAGE_SHIFT;           1373         inode->i_blkbits = PAGE_SHIFT;
1771         inode->i_blocks = 0;                     1374         inode->i_blocks = 0;
1772                                                  1375 
1773         inode->i_op = &empty_dir_inode_operat    1376         inode->i_op = &empty_dir_inode_operations;
1774         inode->i_opflags &= ~IOP_XATTR;          1377         inode->i_opflags &= ~IOP_XATTR;
1775         inode->i_fop = &empty_dir_operations;    1378         inode->i_fop = &empty_dir_operations;
1776 }                                                1379 }
1777                                                  1380 
1778 bool is_empty_dir_inode(struct inode *inode)     1381 bool is_empty_dir_inode(struct inode *inode)
1779 {                                                1382 {
1780         return (inode->i_fop == &empty_dir_op    1383         return (inode->i_fop == &empty_dir_operations) &&
1781                 (inode->i_op == &empty_dir_in    1384                 (inode->i_op == &empty_dir_inode_operations);
1782 }                                                1385 }
1783                                                  1386 
1784 #if IS_ENABLED(CONFIG_UNICODE)                !! 1387 #ifdef CONFIG_UNICODE
                                                   >> 1388 /*
                                                   >> 1389  * Determine if the name of a dentry should be casefolded.
                                                   >> 1390  *
                                                   >> 1391  * Return: if names will need casefolding
                                                   >> 1392  */
                                                   >> 1393 static bool needs_casefold(const struct inode *dir)
                                                   >> 1394 {
                                                   >> 1395         return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding;
                                                   >> 1396 }
                                                   >> 1397 
1785 /**                                              1398 /**
1786  * generic_ci_d_compare - generic d_compare i    1399  * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
1787  * @dentry:     dentry whose name we are chec    1400  * @dentry:     dentry whose name we are checking against
1788  * @len:        len of name of dentry            1401  * @len:        len of name of dentry
1789  * @str:        str pointer to name of dentry    1402  * @str:        str pointer to name of dentry
1790  * @name:       Name to compare against          1403  * @name:       Name to compare against
1791  *                                               1404  *
1792  * Return: 0 if names match, 1 if mismatch, o    1405  * Return: 0 if names match, 1 if mismatch, or -ERRNO
1793  */                                              1406  */
1794 static int generic_ci_d_compare(const struct  !! 1407 int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
1795                                 const char *s !! 1408                           const char *str, const struct qstr *name)
1796 {                                                1409 {
1797         const struct dentry *parent;          !! 1410         const struct dentry *parent = READ_ONCE(dentry->d_parent);
1798         const struct inode *dir;              !! 1411         const struct inode *dir = READ_ONCE(parent->d_inode);
                                                   >> 1412         const struct super_block *sb = dentry->d_sb;
                                                   >> 1413         const struct unicode_map *um = sb->s_encoding;
                                                   >> 1414         struct qstr qstr = QSTR_INIT(str, len);
1799         char strbuf[DNAME_INLINE_LEN];           1415         char strbuf[DNAME_INLINE_LEN];
1800         struct qstr qstr;                     !! 1416         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                                                  1417 
                                                   >> 1418         if (!dir || !needs_casefold(dir))
                                                   >> 1419                 goto fallback;
1819         /*                                       1420         /*
1820          * If the dentry name is stored in-li    1421          * If the dentry name is stored in-line, then it may be concurrently
1821          * modified by a rename.  If this hap    1422          * modified by a rename.  If this happens, the VFS will eventually retry
1822          * the lookup, so it doesn't matter w    1423          * the lookup, so it doesn't matter what ->d_compare() returns.
1823          * However, it's unsafe to call utf8_    1424          * However, it's unsafe to call utf8_strncasecmp() with an unstable
1824          * string.  Therefore, we have to cop    1425          * string.  Therefore, we have to copy the name into a temporary buffer.
1825          */                                      1426          */
1826         if (len <= DNAME_INLINE_LEN - 1) {       1427         if (len <= DNAME_INLINE_LEN - 1) {
1827                 memcpy(strbuf, str, len);        1428                 memcpy(strbuf, str, len);
1828                 strbuf[len] = 0;                 1429                 strbuf[len] = 0;
1829                 str = strbuf;                 !! 1430                 qstr.name = strbuf;
1830                 /* prevent compiler from opti    1431                 /* prevent compiler from optimizing out the temporary buffer */
1831                 barrier();                       1432                 barrier();
1832         }                                        1433         }
1833         qstr.len = len;                       !! 1434         ret = utf8_strncasecmp(um, name, &qstr);
1834         qstr.name = str;                      !! 1435         if (ret >= 0)
                                                   >> 1436                 return ret;
1835                                                  1437 
1836         return utf8_strncasecmp(dentry->d_sb- !! 1438         if (sb_has_strict_encoding(sb))
                                                   >> 1439                 return -EINVAL;
                                                   >> 1440 fallback:
                                                   >> 1441         if (len != name->len)
                                                   >> 1442                 return 1;
                                                   >> 1443         return !!memcmp(str, name->name, len);
1837 }                                                1444 }
                                                   >> 1445 EXPORT_SYMBOL(generic_ci_d_compare);
1838                                                  1446 
1839 /**                                              1447 /**
1840  * generic_ci_d_hash - generic d_hash impleme    1448  * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
1841  * @dentry:     dentry of the parent director    1449  * @dentry:     dentry of the parent directory
1842  * @str:        qstr of name whose hash we sh    1450  * @str:        qstr of name whose hash we should fill in
1843  *                                               1451  *
1844  * Return: 0 if hash was successful or unchan    1452  * Return: 0 if hash was successful or unchanged, and -EINVAL on error
1845  */                                              1453  */
1846 static int generic_ci_d_hash(const struct den !! 1454 int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
1847 {                                                1455 {
1848         const struct inode *dir = READ_ONCE(d    1456         const struct inode *dir = READ_ONCE(dentry->d_inode);
1849         struct super_block *sb = dentry->d_sb    1457         struct super_block *sb = dentry->d_sb;
1850         const struct unicode_map *um = sb->s_    1458         const struct unicode_map *um = sb->s_encoding;
1851         int ret;                              !! 1459         int ret = 0;
1852                                                  1460 
1853         if (!dir || !IS_CASEFOLDED(dir))      !! 1461         if (!dir || !needs_casefold(dir))
1854                 return 0;                        1462                 return 0;
1855                                                  1463 
1856         ret = utf8_casefold_hash(um, dentry,     1464         ret = utf8_casefold_hash(um, dentry, str);
1857         if (ret < 0 && sb_has_strict_encoding    1465         if (ret < 0 && sb_has_strict_encoding(sb))
1858                 return -EINVAL;                  1466                 return -EINVAL;
1859         return 0;                                1467         return 0;
1860 }                                                1468 }
1861                                               !! 1469 EXPORT_SYMBOL(generic_ci_d_hash);
1862 static const struct dentry_operations generic << 
1863         .d_hash = generic_ci_d_hash,          << 
1864         .d_compare = generic_ci_d_compare,    << 
1865 #ifdef CONFIG_FS_ENCRYPTION                   << 
1866         .d_revalidate = fscrypt_d_revalidate, << 
1867 #endif                                        << 
1868 };                                            << 
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                                        << 
1944                                               << 
1945 #ifdef CONFIG_FS_ENCRYPTION                   << 
1946 static const struct dentry_operations generic << 
1947         .d_revalidate = fscrypt_d_revalidate, << 
1948 };                                            << 
1949 #endif                                        << 
1950                                               << 
1951 /**                                           << 
1952  * generic_set_sb_d_ops - helper for choosing << 
1953  * filesystem-wide dentry operations for the  << 
1954  * @sb: superblock to be configured           << 
1955  *                                            << 
1956  * Filesystems supporting casefolding and/or  << 
1957  * helper at mount-time to configure sb->s_d_ << 
1958  * operations required for the enabled featur << 
1959  * called after these have been configured, b << 
1960  * is created.                                << 
1961  */                                           << 
1962 void generic_set_sb_d_ops(struct super_block  << 
1963 {                                             << 
1964 #if IS_ENABLED(CONFIG_UNICODE)                << 
1965         if (sb->s_encoding) {                 << 
1966                 sb->s_d_op = &generic_ci_dent << 
1967                 return;                       << 
1968         }                                     << 
1969 #endif                                           1470 #endif
1970 #ifdef CONFIG_FS_ENCRYPTION                   << 
1971         if (sb->s_cop) {                      << 
1972                 sb->s_d_op = &generic_encrypt << 
1973                 return;                       << 
1974         }                                     << 
1975 #endif                                        << 
1976 }                                             << 
1977 EXPORT_SYMBOL(generic_set_sb_d_ops);          << 
1978                                               << 
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;                       << 
2262                                               << 
2263         /*                                    << 
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 }                                             << 
2270                                                  1471 

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