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


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

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