LCOV - code coverage report
Current view: top level - fs - libfs.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 73 546 13.4 %
Date: 2023-07-19 18:55:55 Functions: 8 65 12.3 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  *      fs/libfs.c
       4             :  *      Library for filesystems writers.
       5             :  */
       6             : 
       7             : #include <linux/blkdev.h>
       8             : #include <linux/export.h>
       9             : #include <linux/pagemap.h>
      10             : #include <linux/slab.h>
      11             : #include <linux/cred.h>
      12             : #include <linux/mount.h>
      13             : #include <linux/vfs.h>
      14             : #include <linux/quotaops.h>
      15             : #include <linux/mutex.h>
      16             : #include <linux/namei.h>
      17             : #include <linux/exportfs.h>
      18             : #include <linux/iversion.h>
      19             : #include <linux/writeback.h>
      20             : #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             : 
      27             : #include <linux/uaccess.h>
      28             : 
      29             : #include "internal.h"
      30             : 
      31           0 : int simple_getattr(struct mnt_idmap *idmap, const struct path *path,
      32             :                    struct kstat *stat, u32 request_mask,
      33             :                    unsigned int query_flags)
      34             : {
      35           0 :         struct inode *inode = d_inode(path->dentry);
      36           0 :         generic_fillattr(&nop_mnt_idmap, inode, stat);
      37           0 :         stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9);
      38           0 :         return 0;
      39             : }
      40             : EXPORT_SYMBOL(simple_getattr);
      41             : 
      42           0 : int simple_statfs(struct dentry *dentry, struct kstatfs *buf)
      43             : {
      44           0 :         buf->f_type = dentry->d_sb->s_magic;
      45           0 :         buf->f_bsize = PAGE_SIZE;
      46           0 :         buf->f_namelen = NAME_MAX;
      47           0 :         return 0;
      48             : }
      49             : EXPORT_SYMBOL(simple_statfs);
      50             : 
      51             : /*
      52             :  * Retaining negative dentries for an in-memory filesystem just wastes
      53             :  * memory and lookup time: arrange for them to be deleted immediately.
      54             :  */
      55           0 : int always_delete_dentry(const struct dentry *dentry)
      56             : {
      57           0 :         return 1;
      58             : }
      59             : EXPORT_SYMBOL(always_delete_dentry);
      60             : 
      61             : const struct dentry_operations simple_dentry_operations = {
      62             :         .d_delete = always_delete_dentry,
      63             : };
      64             : EXPORT_SYMBOL(simple_dentry_operations);
      65             : 
      66             : /*
      67             :  * Lookup the data. This is trivial - if the dentry didn't already
      68             :  * exist, we know it is negative.  Set d_op to delete negative dentries.
      69             :  */
      70           3 : struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
      71             : {
      72           3 :         if (dentry->d_name.len > NAME_MAX)
      73             :                 return ERR_PTR(-ENAMETOOLONG);
      74           3 :         if (!dentry->d_sb->s_d_op)
      75           3 :                 d_set_d_op(dentry, &simple_dentry_operations);
      76           3 :         d_add(dentry, NULL);
      77           3 :         return NULL;
      78             : }
      79             : EXPORT_SYMBOL(simple_lookup);
      80             : 
      81           0 : int dcache_dir_open(struct inode *inode, struct file *file)
      82             : {
      83           0 :         file->private_data = d_alloc_cursor(file->f_path.dentry);
      84             : 
      85           0 :         return file->private_data ? 0 : -ENOMEM;
      86             : }
      87             : EXPORT_SYMBOL(dcache_dir_open);
      88             : 
      89           0 : int dcache_dir_close(struct inode *inode, struct file *file)
      90             : {
      91           0 :         dput(file->private_data);
      92           0 :         return 0;
      93             : }
      94             : EXPORT_SYMBOL(dcache_dir_close);
      95             : 
      96             : /* parent is locked at least shared */
      97             : /*
      98             :  * Returns an element of siblings' list.
      99             :  * We are looking for <count>th positive after <p>; if
     100             :  * found, dentry is grabbed and returned to caller.
     101             :  * If no such element exists, NULL is returned.
     102             :  */
     103           0 : static struct dentry *scan_positives(struct dentry *cursor,
     104             :                                         struct list_head *p,
     105             :                                         loff_t count,
     106             :                                         struct dentry *last)
     107             : {
     108           0 :         struct dentry *dentry = cursor->d_parent, *found = NULL;
     109             : 
     110           0 :         spin_lock(&dentry->d_lock);
     111           0 :         while ((p = p->next) != &dentry->d_subdirs) {
     112           0 :                 struct dentry *d = list_entry(p, struct dentry, d_child);
     113             :                 // we must at least skip cursors, to avoid livelocks
     114           0 :                 if (d->d_flags & DCACHE_DENTRY_CURSOR)
     115           0 :                         continue;
     116           0 :                 if (simple_positive(d) && !--count) {
     117           0 :                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
     118           0 :                         if (simple_positive(d))
     119             :                                 found = dget_dlock(d);
     120           0 :                         spin_unlock(&d->d_lock);
     121           0 :                         if (likely(found))
     122             :                                 break;
     123             :                         count = 1;
     124             :                 }
     125           0 :                 if (need_resched()) {
     126           0 :                         list_move(&cursor->d_child, p);
     127           0 :                         p = &cursor->d_child;
     128           0 :                         spin_unlock(&dentry->d_lock);
     129           0 :                         cond_resched();
     130           0 :                         spin_lock(&dentry->d_lock);
     131             :                 }
     132             :         }
     133           0 :         spin_unlock(&dentry->d_lock);
     134           0 :         dput(last);
     135           0 :         return found;
     136             : }
     137             : 
     138           0 : loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
     139             : {
     140           0 :         struct dentry *dentry = file->f_path.dentry;
     141           0 :         switch (whence) {
     142             :                 case 1:
     143           0 :                         offset += file->f_pos;
     144             :                         fallthrough;
     145             :                 case 0:
     146           0 :                         if (offset >= 0)
     147             :                                 break;
     148             :                         fallthrough;
     149             :                 default:
     150             :                         return -EINVAL;
     151             :         }
     152           0 :         if (offset != file->f_pos) {
     153           0 :                 struct dentry *cursor = file->private_data;
     154           0 :                 struct dentry *to = NULL;
     155             : 
     156           0 :                 inode_lock_shared(dentry->d_inode);
     157             : 
     158           0 :                 if (offset > 2)
     159           0 :                         to = scan_positives(cursor, &dentry->d_subdirs,
     160             :                                             offset - 2, NULL);
     161           0 :                 spin_lock(&dentry->d_lock);
     162           0 :                 if (to)
     163           0 :                         list_move(&cursor->d_child, &to->d_child);
     164             :                 else
     165           0 :                         list_del_init(&cursor->d_child);
     166           0 :                 spin_unlock(&dentry->d_lock);
     167           0 :                 dput(to);
     168             : 
     169           0 :                 file->f_pos = offset;
     170             : 
     171           0 :                 inode_unlock_shared(dentry->d_inode);
     172             :         }
     173             :         return offset;
     174             : }
     175             : EXPORT_SYMBOL(dcache_dir_lseek);
     176             : 
     177             : /*
     178             :  * Directory is locked and all positive dentries in it are safe, since
     179             :  * for ramfs-type trees they can't go away without unlink() or rmdir(),
     180             :  * both impossible due to the lock on directory.
     181             :  */
     182             : 
     183           0 : int dcache_readdir(struct file *file, struct dir_context *ctx)
     184             : {
     185           0 :         struct dentry *dentry = file->f_path.dentry;
     186           0 :         struct dentry *cursor = file->private_data;
     187           0 :         struct list_head *anchor = &dentry->d_subdirs;
     188           0 :         struct dentry *next = NULL;
     189             :         struct list_head *p;
     190             : 
     191           0 :         if (!dir_emit_dots(file, ctx))
     192             :                 return 0;
     193             : 
     194           0 :         if (ctx->pos == 2)
     195             :                 p = anchor;
     196           0 :         else if (!list_empty(&cursor->d_child))
     197             :                 p = &cursor->d_child;
     198             :         else
     199             :                 return 0;
     200             : 
     201           0 :         while ((next = scan_positives(cursor, p, 1, next)) != NULL) {
     202           0 :                 if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
     203           0 :                               d_inode(next)->i_ino,
     204           0 :                               fs_umode_to_dtype(d_inode(next)->i_mode)))
     205             :                         break;
     206           0 :                 ctx->pos++;
     207           0 :                 p = &next->d_child;
     208             :         }
     209           0 :         spin_lock(&dentry->d_lock);
     210           0 :         if (next)
     211           0 :                 list_move_tail(&cursor->d_child, &next->d_child);
     212             :         else
     213           0 :                 list_del_init(&cursor->d_child);
     214           0 :         spin_unlock(&dentry->d_lock);
     215           0 :         dput(next);
     216             : 
     217           0 :         return 0;
     218             : }
     219             : EXPORT_SYMBOL(dcache_readdir);
     220             : 
     221           0 : ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
     222             : {
     223           0 :         return -EISDIR;
     224             : }
     225             : EXPORT_SYMBOL(generic_read_dir);
     226             : 
     227             : const struct file_operations simple_dir_operations = {
     228             :         .open           = dcache_dir_open,
     229             :         .release        = dcache_dir_close,
     230             :         .llseek         = dcache_dir_lseek,
     231             :         .read           = generic_read_dir,
     232             :         .iterate_shared = dcache_readdir,
     233             :         .fsync          = noop_fsync,
     234             : };
     235             : EXPORT_SYMBOL(simple_dir_operations);
     236             : 
     237             : const struct inode_operations simple_dir_inode_operations = {
     238             :         .lookup         = simple_lookup,
     239             : };
     240             : EXPORT_SYMBOL(simple_dir_inode_operations);
     241             : 
     242           0 : static struct dentry *find_next_child(struct dentry *parent, struct dentry *prev)
     243             : {
     244           0 :         struct dentry *child = NULL;
     245           0 :         struct list_head *p = prev ? &prev->d_child : &parent->d_subdirs;
     246             : 
     247           0 :         spin_lock(&parent->d_lock);
     248           0 :         while ((p = p->next) != &parent->d_subdirs) {
     249           0 :                 struct dentry *d = container_of(p, struct dentry, d_child);
     250           0 :                 if (simple_positive(d)) {
     251           0 :                         spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED);
     252           0 :                         if (simple_positive(d))
     253             :                                 child = dget_dlock(d);
     254           0 :                         spin_unlock(&d->d_lock);
     255           0 :                         if (likely(child))
     256             :                                 break;
     257             :                 }
     258             :         }
     259           0 :         spin_unlock(&parent->d_lock);
     260           0 :         dput(prev);
     261           0 :         return child;
     262             : }
     263             : 
     264           0 : void simple_recursive_removal(struct dentry *dentry,
     265             :                               void (*callback)(struct dentry *))
     266             : {
     267             :         struct dentry *this = dget(dentry);
     268           0 :         while (true) {
     269           0 :                 struct dentry *victim = NULL, *child;
     270           0 :                 struct inode *inode = this->d_inode;
     271             : 
     272           0 :                 inode_lock(inode);
     273           0 :                 if (d_is_dir(this))
     274           0 :                         inode->i_flags |= S_DEAD;
     275           0 :                 while ((child = find_next_child(this, victim)) == NULL) {
     276             :                         // kill and ascend
     277             :                         // update metadata while it's still locked
     278           0 :                         inode->i_ctime = current_time(inode);
     279           0 :                         clear_nlink(inode);
     280           0 :                         inode_unlock(inode);
     281           0 :                         victim = this;
     282           0 :                         this = this->d_parent;
     283           0 :                         inode = this->d_inode;
     284           0 :                         inode_lock(inode);
     285           0 :                         if (simple_positive(victim)) {
     286           0 :                                 d_invalidate(victim);   // avoid lost mounts
     287           0 :                                 if (d_is_dir(victim))
     288           0 :                                         fsnotify_rmdir(inode, victim);
     289             :                                 else
     290           0 :                                         fsnotify_unlink(inode, victim);
     291           0 :                                 if (callback)
     292           0 :                                         callback(victim);
     293           0 :                                 dput(victim);           // unpin it
     294             :                         }
     295           0 :                         if (victim == dentry) {
     296           0 :                                 inode->i_ctime = inode->i_mtime =
     297             :                                         current_time(inode);
     298           0 :                                 if (d_is_dir(dentry))
     299           0 :                                         drop_nlink(inode);
     300           0 :                                 inode_unlock(inode);
     301           0 :                                 dput(dentry);
     302           0 :                                 return;
     303             :                         }
     304             :                 }
     305           0 :                 inode_unlock(inode);
     306           0 :                 this = child;
     307             :         }
     308             : }
     309             : EXPORT_SYMBOL(simple_recursive_removal);
     310             : 
     311             : static const struct super_operations simple_super_operations = {
     312             :         .statfs         = simple_statfs,
     313             : };
     314             : 
     315          29 : static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc)
     316             : {
     317          29 :         struct pseudo_fs_context *ctx = fc->fs_private;
     318             :         struct inode *root;
     319             : 
     320          29 :         s->s_maxbytes = MAX_LFS_FILESIZE;
     321          29 :         s->s_blocksize = PAGE_SIZE;
     322          29 :         s->s_blocksize_bits = PAGE_SHIFT;
     323          29 :         s->s_magic = ctx->magic;
     324          29 :         s->s_op = ctx->ops ?: &simple_super_operations;
     325          29 :         s->s_xattr = ctx->xattr;
     326          29 :         s->s_time_gran = 1;
     327          29 :         root = new_inode(s);
     328          29 :         if (!root)
     329             :                 return -ENOMEM;
     330             : 
     331             :         /*
     332             :          * since this is the first inode, make it number 1. New inodes created
     333             :          * after this must take care not to collide with it (by passing
     334             :          * max_reserved of 1 to iunique).
     335             :          */
     336          29 :         root->i_ino = 1;
     337          29 :         root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
     338          29 :         root->i_atime = root->i_mtime = root->i_ctime = current_time(root);
     339          29 :         s->s_root = d_make_root(root);
     340          29 :         if (!s->s_root)
     341             :                 return -ENOMEM;
     342          29 :         s->s_d_op = ctx->dops;
     343          29 :         return 0;
     344             : }
     345             : 
     346          29 : static int pseudo_fs_get_tree(struct fs_context *fc)
     347             : {
     348          29 :         return get_tree_nodev(fc, pseudo_fs_fill_super);
     349             : }
     350             : 
     351          29 : static void pseudo_fs_free(struct fs_context *fc)
     352             : {
     353          29 :         kfree(fc->fs_private);
     354          29 : }
     355             : 
     356             : static const struct fs_context_operations pseudo_fs_context_ops = {
     357             :         .free           = pseudo_fs_free,
     358             :         .get_tree       = pseudo_fs_get_tree,
     359             : };
     360             : 
     361             : /*
     362             :  * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that
     363             :  * will never be mountable)
     364             :  */
     365          29 : struct pseudo_fs_context *init_pseudo(struct fs_context *fc,
     366             :                                         unsigned long magic)
     367             : {
     368             :         struct pseudo_fs_context *ctx;
     369             : 
     370          29 :         ctx = kzalloc(sizeof(struct pseudo_fs_context), GFP_KERNEL);
     371          29 :         if (likely(ctx)) {
     372          29 :                 ctx->magic = magic;
     373          29 :                 fc->fs_private = ctx;
     374          29 :                 fc->ops = &pseudo_fs_context_ops;
     375          29 :                 fc->sb_flags |= SB_NOUSER;
     376          29 :                 fc->global = true;
     377             :         }
     378          29 :         return ctx;
     379             : }
     380             : EXPORT_SYMBOL(init_pseudo);
     381             : 
     382           0 : int simple_open(struct inode *inode, struct file *file)
     383             : {
     384           0 :         if (inode->i_private)
     385           0 :                 file->private_data = inode->i_private;
     386           0 :         return 0;
     387             : }
     388             : EXPORT_SYMBOL(simple_open);
     389             : 
     390           0 : int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
     391             : {
     392           0 :         struct inode *inode = d_inode(old_dentry);
     393             : 
     394           0 :         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
     395           0 :         inc_nlink(inode);
     396           0 :         ihold(inode);
     397           0 :         dget(dentry);
     398           0 :         d_instantiate(dentry, inode);
     399           0 :         return 0;
     400             : }
     401             : EXPORT_SYMBOL(simple_link);
     402             : 
     403           0 : int simple_empty(struct dentry *dentry)
     404             : {
     405             :         struct dentry *child;
     406           0 :         int ret = 0;
     407             : 
     408           0 :         spin_lock(&dentry->d_lock);
     409           0 :         list_for_each_entry(child, &dentry->d_subdirs, d_child) {
     410           0 :                 spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED);
     411           0 :                 if (simple_positive(child)) {
     412           0 :                         spin_unlock(&child->d_lock);
     413             :                         goto out;
     414             :                 }
     415           0 :                 spin_unlock(&child->d_lock);
     416             :         }
     417             :         ret = 1;
     418             : out:
     419           0 :         spin_unlock(&dentry->d_lock);
     420           0 :         return ret;
     421             : }
     422             : EXPORT_SYMBOL(simple_empty);
     423             : 
     424           0 : int simple_unlink(struct inode *dir, struct dentry *dentry)
     425             : {
     426           0 :         struct inode *inode = d_inode(dentry);
     427             : 
     428           0 :         inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
     429           0 :         drop_nlink(inode);
     430           0 :         dput(dentry);
     431           0 :         return 0;
     432             : }
     433             : EXPORT_SYMBOL(simple_unlink);
     434             : 
     435           0 : int simple_rmdir(struct inode *dir, struct dentry *dentry)
     436             : {
     437           0 :         if (!simple_empty(dentry))
     438             :                 return -ENOTEMPTY;
     439             : 
     440           0 :         drop_nlink(d_inode(dentry));
     441           0 :         simple_unlink(dir, dentry);
     442           0 :         drop_nlink(dir);
     443           0 :         return 0;
     444             : }
     445             : EXPORT_SYMBOL(simple_rmdir);
     446             : 
     447           0 : int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry,
     448             :                            struct inode *new_dir, struct dentry *new_dentry)
     449             : {
     450           0 :         bool old_is_dir = d_is_dir(old_dentry);
     451           0 :         bool new_is_dir = d_is_dir(new_dentry);
     452             : 
     453           0 :         if (old_dir != new_dir && old_is_dir != new_is_dir) {
     454           0 :                 if (old_is_dir) {
     455           0 :                         drop_nlink(old_dir);
     456           0 :                         inc_nlink(new_dir);
     457             :                 } else {
     458           0 :                         drop_nlink(new_dir);
     459           0 :                         inc_nlink(old_dir);
     460             :                 }
     461             :         }
     462           0 :         old_dir->i_ctime = old_dir->i_mtime =
     463           0 :         new_dir->i_ctime = new_dir->i_mtime =
     464           0 :         d_inode(old_dentry)->i_ctime =
     465           0 :         d_inode(new_dentry)->i_ctime = current_time(old_dir);
     466             : 
     467           0 :         return 0;
     468             : }
     469             : EXPORT_SYMBOL_GPL(simple_rename_exchange);
     470             : 
     471           0 : int simple_rename(struct mnt_idmap *idmap, struct inode *old_dir,
     472             :                   struct dentry *old_dentry, struct inode *new_dir,
     473             :                   struct dentry *new_dentry, unsigned int flags)
     474             : {
     475           0 :         struct inode *inode = d_inode(old_dentry);
     476           0 :         int they_are_dirs = d_is_dir(old_dentry);
     477             : 
     478           0 :         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE))
     479             :                 return -EINVAL;
     480             : 
     481           0 :         if (flags & RENAME_EXCHANGE)
     482           0 :                 return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry);
     483             : 
     484           0 :         if (!simple_empty(new_dentry))
     485             :                 return -ENOTEMPTY;
     486             : 
     487           0 :         if (d_really_is_positive(new_dentry)) {
     488           0 :                 simple_unlink(new_dir, new_dentry);
     489           0 :                 if (they_are_dirs) {
     490           0 :                         drop_nlink(d_inode(new_dentry));
     491           0 :                         drop_nlink(old_dir);
     492             :                 }
     493           0 :         } else if (they_are_dirs) {
     494           0 :                 drop_nlink(old_dir);
     495           0 :                 inc_nlink(new_dir);
     496             :         }
     497             : 
     498           0 :         old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime =
     499           0 :                 new_dir->i_mtime = inode->i_ctime = current_time(old_dir);
     500             : 
     501           0 :         return 0;
     502             : }
     503             : EXPORT_SYMBOL(simple_rename);
     504             : 
     505             : /**
     506             :  * simple_setattr - setattr for simple filesystem
     507             :  * @idmap: idmap of the target mount
     508             :  * @dentry: dentry
     509             :  * @iattr: iattr structure
     510             :  *
     511             :  * Returns 0 on success, -error on failure.
     512             :  *
     513             :  * simple_setattr is a simple ->setattr implementation without a proper
     514             :  * implementation of size changes.
     515             :  *
     516             :  * It can either be used for in-memory filesystems or special files
     517             :  * on simple regular filesystems.  Anything that needs to change on-disk
     518             :  * or wire state on size changes needs its own setattr method.
     519             :  */
     520           0 : int simple_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
     521             :                    struct iattr *iattr)
     522             : {
     523           0 :         struct inode *inode = d_inode(dentry);
     524             :         int error;
     525             : 
     526           0 :         error = setattr_prepare(idmap, dentry, iattr);
     527           0 :         if (error)
     528             :                 return error;
     529             : 
     530           0 :         if (iattr->ia_valid & ATTR_SIZE)
     531           0 :                 truncate_setsize(inode, iattr->ia_size);
     532           0 :         setattr_copy(idmap, inode, iattr);
     533           0 :         mark_inode_dirty(inode);
     534           0 :         return 0;
     535             : }
     536             : EXPORT_SYMBOL(simple_setattr);
     537             : 
     538           0 : static int simple_read_folio(struct file *file, struct folio *folio)
     539             : {
     540           0 :         folio_zero_range(folio, 0, folio_size(folio));
     541           0 :         flush_dcache_folio(folio);
     542           0 :         folio_mark_uptodate(folio);
     543           0 :         folio_unlock(folio);
     544           0 :         return 0;
     545             : }
     546             : 
     547           0 : int simple_write_begin(struct file *file, struct address_space *mapping,
     548             :                         loff_t pos, unsigned len,
     549             :                         struct page **pagep, void **fsdata)
     550             : {
     551             :         struct page *page;
     552             :         pgoff_t index;
     553             : 
     554           0 :         index = pos >> PAGE_SHIFT;
     555             : 
     556           0 :         page = grab_cache_page_write_begin(mapping, index);
     557           0 :         if (!page)
     558             :                 return -ENOMEM;
     559             : 
     560           0 :         *pagep = page;
     561             : 
     562           0 :         if (!PageUptodate(page) && (len != PAGE_SIZE)) {
     563           0 :                 unsigned from = pos & (PAGE_SIZE - 1);
     564             : 
     565           0 :                 zero_user_segments(page, 0, from, from + len, PAGE_SIZE);
     566             :         }
     567             :         return 0;
     568             : }
     569             : EXPORT_SYMBOL(simple_write_begin);
     570             : 
     571             : /**
     572             :  * simple_write_end - .write_end helper for non-block-device FSes
     573             :  * @file: See .write_end of address_space_operations
     574             :  * @mapping:            "
     575             :  * @pos:                "
     576             :  * @len:                "
     577             :  * @copied:             "
     578             :  * @page:               "
     579             :  * @fsdata:             "
     580             :  *
     581             :  * simple_write_end does the minimum needed for updating a page after writing is
     582             :  * done. It has the same API signature as the .write_end of
     583             :  * address_space_operations vector. So it can just be set onto .write_end for
     584             :  * FSes that don't need any other processing. i_mutex is assumed to be held.
     585             :  * Block based filesystems should use generic_write_end().
     586             :  * NOTE: Even though i_size might get updated by this function, mark_inode_dirty
     587             :  * is not called, so a filesystem that actually does store data in .write_inode
     588             :  * should extend on what's done here with a call to mark_inode_dirty() in the
     589             :  * case that i_size has changed.
     590             :  *
     591             :  * Use *ONLY* with simple_read_folio()
     592             :  */
     593           0 : static int simple_write_end(struct file *file, struct address_space *mapping,
     594             :                         loff_t pos, unsigned len, unsigned copied,
     595             :                         struct page *page, void *fsdata)
     596             : {
     597           0 :         struct inode *inode = page->mapping->host;
     598           0 :         loff_t last_pos = pos + copied;
     599             : 
     600             :         /* zero the stale part of the page if we did a short copy */
     601           0 :         if (!PageUptodate(page)) {
     602           0 :                 if (copied < len) {
     603           0 :                         unsigned from = pos & (PAGE_SIZE - 1);
     604             : 
     605           0 :                         zero_user(page, from + copied, len - copied);
     606             :                 }
     607             :                 SetPageUptodate(page);
     608             :         }
     609             :         /*
     610             :          * No need to use i_size_read() here, the i_size
     611             :          * cannot change under us because we hold the i_mutex.
     612             :          */
     613           0 :         if (last_pos > inode->i_size)
     614           0 :                 i_size_write(inode, last_pos);
     615             : 
     616           0 :         set_page_dirty(page);
     617           0 :         unlock_page(page);
     618           0 :         put_page(page);
     619             : 
     620           0 :         return copied;
     621             : }
     622             : 
     623             : /*
     624             :  * Provides ramfs-style behavior: data in the pagecache, but no writeback.
     625             :  */
     626             : const struct address_space_operations ram_aops = {
     627             :         .read_folio     = simple_read_folio,
     628             :         .write_begin    = simple_write_begin,
     629             :         .write_end      = simple_write_end,
     630             :         .dirty_folio    = noop_dirty_folio,
     631             : };
     632             : EXPORT_SYMBOL(ram_aops);
     633             : 
     634             : /*
     635             :  * the inodes created here are not hashed. If you use iunique to generate
     636             :  * unique inode values later for this filesystem, then you must take care
     637             :  * to pass it an appropriate max_reserved value to avoid collisions.
     638             :  */
     639           0 : int simple_fill_super(struct super_block *s, unsigned long magic,
     640             :                       const struct tree_descr *files)
     641             : {
     642             :         struct inode *inode;
     643             :         struct dentry *root;
     644             :         struct dentry *dentry;
     645             :         int i;
     646             : 
     647           0 :         s->s_blocksize = PAGE_SIZE;
     648           0 :         s->s_blocksize_bits = PAGE_SHIFT;
     649           0 :         s->s_magic = magic;
     650           0 :         s->s_op = &simple_super_operations;
     651           0 :         s->s_time_gran = 1;
     652             : 
     653           0 :         inode = new_inode(s);
     654           0 :         if (!inode)
     655             :                 return -ENOMEM;
     656             :         /*
     657             :          * because the root inode is 1, the files array must not contain an
     658             :          * entry at index 1
     659             :          */
     660           0 :         inode->i_ino = 1;
     661           0 :         inode->i_mode = S_IFDIR | 0755;
     662           0 :         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
     663           0 :         inode->i_op = &simple_dir_inode_operations;
     664           0 :         inode->i_fop = &simple_dir_operations;
     665           0 :         set_nlink(inode, 2);
     666           0 :         root = d_make_root(inode);
     667           0 :         if (!root)
     668             :                 return -ENOMEM;
     669           0 :         for (i = 0; !files->name || files->name[0]; i++, files++) {
     670           0 :                 if (!files->name)
     671           0 :                         continue;
     672             : 
     673             :                 /* warn if it tries to conflict with the root inode */
     674           0 :                 if (unlikely(i == 1))
     675           0 :                         printk(KERN_WARNING "%s: %s passed in a files array"
     676             :                                 "with an index of 1!\n", __func__,
     677             :                                 s->s_type->name);
     678             : 
     679           0 :                 dentry = d_alloc_name(root, files->name);
     680           0 :                 if (!dentry)
     681             :                         goto out;
     682           0 :                 inode = new_inode(s);
     683           0 :                 if (!inode) {
     684           0 :                         dput(dentry);
     685           0 :                         goto out;
     686             :                 }
     687           0 :                 inode->i_mode = S_IFREG | files->mode;
     688           0 :                 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
     689           0 :                 inode->i_fop = files->ops;
     690           0 :                 inode->i_ino = i;
     691           0 :                 d_add(dentry, inode);
     692             :         }
     693           0 :         s->s_root = root;
     694           0 :         return 0;
     695             : out:
     696           0 :         d_genocide(root);
     697           0 :         shrink_dcache_parent(root);
     698           0 :         dput(root);
     699           0 :         return -ENOMEM;
     700             : }
     701             : EXPORT_SYMBOL(simple_fill_super);
     702             : 
     703             : static DEFINE_SPINLOCK(pin_fs_lock);
     704             : 
     705          23 : int simple_pin_fs(struct file_system_type *type, struct vfsmount **mount, int *count)
     706             : {
     707          23 :         struct vfsmount *mnt = NULL;
     708          23 :         spin_lock(&pin_fs_lock);
     709          23 :         if (unlikely(!*mount)) {
     710          23 :                 spin_unlock(&pin_fs_lock);
     711          23 :                 mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, NULL);
     712          23 :                 if (IS_ERR(mnt))
     713           0 :                         return PTR_ERR(mnt);
     714          23 :                 spin_lock(&pin_fs_lock);
     715          23 :                 if (!*mount)
     716          23 :                         *mount = mnt;
     717             :         }
     718          23 :         mntget(*mount);
     719          23 :         ++*count;
     720          23 :         spin_unlock(&pin_fs_lock);
     721          23 :         mntput(mnt);
     722          23 :         return 0;
     723             : }
     724             : EXPORT_SYMBOL(simple_pin_fs);
     725             : 
     726          22 : void simple_release_fs(struct vfsmount **mount, int *count)
     727             : {
     728             :         struct vfsmount *mnt;
     729          22 :         spin_lock(&pin_fs_lock);
     730          22 :         mnt = *mount;
     731          22 :         if (!--*count)
     732          22 :                 *mount = NULL;
     733          22 :         spin_unlock(&pin_fs_lock);
     734          22 :         mntput(mnt);
     735          22 : }
     736             : EXPORT_SYMBOL(simple_release_fs);
     737             : 
     738             : /**
     739             :  * simple_read_from_buffer - copy data from the buffer to user space
     740             :  * @to: the user space buffer to read to
     741             :  * @count: the maximum number of bytes to read
     742             :  * @ppos: the current position in the buffer
     743             :  * @from: the buffer to read from
     744             :  * @available: the size of the buffer
     745             :  *
     746             :  * The simple_read_from_buffer() function reads up to @count bytes from the
     747             :  * buffer @from at offset @ppos into the user space address starting at @to.
     748             :  *
     749             :  * On success, the number of bytes read is returned and the offset @ppos is
     750             :  * advanced by this number, or negative value is returned on error.
     751             :  **/
     752           0 : ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos,
     753             :                                 const void *from, size_t available)
     754             : {
     755           0 :         loff_t pos = *ppos;
     756             :         size_t ret;
     757             : 
     758           0 :         if (pos < 0)
     759             :                 return -EINVAL;
     760           0 :         if (pos >= available || !count)
     761             :                 return 0;
     762           0 :         if (count > available - pos)
     763           0 :                 count = available - pos;
     764           0 :         ret = copy_to_user(to, from + pos, count);
     765           0 :         if (ret == count)
     766             :                 return -EFAULT;
     767           0 :         count -= ret;
     768           0 :         *ppos = pos + count;
     769           0 :         return count;
     770             : }
     771             : EXPORT_SYMBOL(simple_read_from_buffer);
     772             : 
     773             : /**
     774             :  * simple_write_to_buffer - copy data from user space to the buffer
     775             :  * @to: the buffer to write to
     776             :  * @available: the size of the buffer
     777             :  * @ppos: the current position in the buffer
     778             :  * @from: the user space buffer to read from
     779             :  * @count: the maximum number of bytes to read
     780             :  *
     781             :  * The simple_write_to_buffer() function reads up to @count bytes from the user
     782             :  * space address starting at @from into the buffer @to at offset @ppos.
     783             :  *
     784             :  * On success, the number of bytes written is returned and the offset @ppos is
     785             :  * advanced by this number, or negative value is returned on error.
     786             :  **/
     787           0 : ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
     788             :                 const void __user *from, size_t count)
     789             : {
     790           0 :         loff_t pos = *ppos;
     791             :         size_t res;
     792             : 
     793           0 :         if (pos < 0)
     794             :                 return -EINVAL;
     795           0 :         if (pos >= available || !count)
     796             :                 return 0;
     797           0 :         if (count > available - pos)
     798           0 :                 count = available - pos;
     799           0 :         res = copy_from_user(to + pos, from, count);
     800           0 :         if (res == count)
     801             :                 return -EFAULT;
     802           0 :         count -= res;
     803           0 :         *ppos = pos + count;
     804           0 :         return count;
     805             : }
     806             : EXPORT_SYMBOL(simple_write_to_buffer);
     807             : 
     808             : /**
     809             :  * memory_read_from_buffer - copy data from the buffer
     810             :  * @to: the kernel space buffer to read to
     811             :  * @count: the maximum number of bytes to read
     812             :  * @ppos: the current position in the buffer
     813             :  * @from: the buffer to read from
     814             :  * @available: the size of the buffer
     815             :  *
     816             :  * The memory_read_from_buffer() function reads up to @count bytes from the
     817             :  * buffer @from at offset @ppos into the kernel space address starting at @to.
     818             :  *
     819             :  * On success, the number of bytes read is returned and the offset @ppos is
     820             :  * advanced by this number, or negative value is returned on error.
     821             :  **/
     822           0 : ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
     823             :                                 const void *from, size_t available)
     824             : {
     825           0 :         loff_t pos = *ppos;
     826             : 
     827           0 :         if (pos < 0)
     828             :                 return -EINVAL;
     829           0 :         if (pos >= available)
     830             :                 return 0;
     831           0 :         if (count > available - pos)
     832           0 :                 count = available - pos;
     833           0 :         memcpy(to, from + pos, count);
     834           0 :         *ppos = pos + count;
     835             : 
     836           0 :         return count;
     837             : }
     838             : EXPORT_SYMBOL(memory_read_from_buffer);
     839             : 
     840             : /*
     841             :  * Transaction based IO.
     842             :  * The file expects a single write which triggers the transaction, and then
     843             :  * possibly a read which collects the result - which is stored in a
     844             :  * file-local buffer.
     845             :  */
     846             : 
     847           0 : void simple_transaction_set(struct file *file, size_t n)
     848             : {
     849           0 :         struct simple_transaction_argresp *ar = file->private_data;
     850             : 
     851           0 :         BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
     852             : 
     853             :         /*
     854             :          * The barrier ensures that ar->size will really remain zero until
     855             :          * ar->data is ready for reading.
     856             :          */
     857           0 :         smp_mb();
     858           0 :         ar->size = n;
     859           0 : }
     860             : EXPORT_SYMBOL(simple_transaction_set);
     861             : 
     862           0 : char *simple_transaction_get(struct file *file, const char __user *buf, size_t size)
     863             : {
     864             :         struct simple_transaction_argresp *ar;
     865             :         static DEFINE_SPINLOCK(simple_transaction_lock);
     866             : 
     867           0 :         if (size > SIMPLE_TRANSACTION_LIMIT - 1)
     868             :                 return ERR_PTR(-EFBIG);
     869             : 
     870           0 :         ar = (struct simple_transaction_argresp *)get_zeroed_page(GFP_KERNEL);
     871           0 :         if (!ar)
     872             :                 return ERR_PTR(-ENOMEM);
     873             : 
     874           0 :         spin_lock(&simple_transaction_lock);
     875             : 
     876             :         /* only one write allowed per open */
     877           0 :         if (file->private_data) {
     878           0 :                 spin_unlock(&simple_transaction_lock);
     879           0 :                 free_page((unsigned long)ar);
     880           0 :                 return ERR_PTR(-EBUSY);
     881             :         }
     882             : 
     883           0 :         file->private_data = ar;
     884             : 
     885           0 :         spin_unlock(&simple_transaction_lock);
     886             : 
     887           0 :         if (copy_from_user(ar->data, buf, size))
     888             :                 return ERR_PTR(-EFAULT);
     889             : 
     890           0 :         return ar->data;
     891             : }
     892             : EXPORT_SYMBOL(simple_transaction_get);
     893             : 
     894           0 : ssize_t simple_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos)
     895             : {
     896           0 :         struct simple_transaction_argresp *ar = file->private_data;
     897             : 
     898           0 :         if (!ar)
     899             :                 return 0;
     900           0 :         return simple_read_from_buffer(buf, size, pos, ar->data, ar->size);
     901             : }
     902             : EXPORT_SYMBOL(simple_transaction_read);
     903             : 
     904           0 : int simple_transaction_release(struct inode *inode, struct file *file)
     905             : {
     906           0 :         free_page((unsigned long)file->private_data);
     907           0 :         return 0;
     908             : }
     909             : EXPORT_SYMBOL(simple_transaction_release);
     910             : 
     911             : /* Simple attribute files */
     912             : 
     913             : struct simple_attr {
     914             :         int (*get)(void *, u64 *);
     915             :         int (*set)(void *, u64);
     916             :         char get_buf[24];       /* enough to store a u64 and "\n\0" */
     917             :         char set_buf[24];
     918             :         void *data;
     919             :         const char *fmt;        /* format for read operation */
     920             :         struct mutex mutex;     /* protects access to these buffers */
     921             : };
     922             : 
     923             : /* simple_attr_open is called by an actual attribute open file operation
     924             :  * to set the attribute specific access operations. */
     925           0 : int simple_attr_open(struct inode *inode, struct file *file,
     926             :                      int (*get)(void *, u64 *), int (*set)(void *, u64),
     927             :                      const char *fmt)
     928             : {
     929             :         struct simple_attr *attr;
     930             : 
     931           0 :         attr = kzalloc(sizeof(*attr), GFP_KERNEL);
     932           0 :         if (!attr)
     933             :                 return -ENOMEM;
     934             : 
     935           0 :         attr->get = get;
     936           0 :         attr->set = set;
     937           0 :         attr->data = inode->i_private;
     938           0 :         attr->fmt = fmt;
     939           0 :         mutex_init(&attr->mutex);
     940             : 
     941           0 :         file->private_data = attr;
     942             : 
     943           0 :         return nonseekable_open(inode, file);
     944             : }
     945             : EXPORT_SYMBOL_GPL(simple_attr_open);
     946             : 
     947           0 : int simple_attr_release(struct inode *inode, struct file *file)
     948             : {
     949           0 :         kfree(file->private_data);
     950           0 :         return 0;
     951             : }
     952             : EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only?  This?  Really? */
     953             : 
     954             : /* read from the buffer that is filled with the get function */
     955           0 : ssize_t simple_attr_read(struct file *file, char __user *buf,
     956             :                          size_t len, loff_t *ppos)
     957             : {
     958             :         struct simple_attr *attr;
     959             :         size_t size;
     960             :         ssize_t ret;
     961             : 
     962           0 :         attr = file->private_data;
     963             : 
     964           0 :         if (!attr->get)
     965             :                 return -EACCES;
     966             : 
     967           0 :         ret = mutex_lock_interruptible(&attr->mutex);
     968           0 :         if (ret)
     969             :                 return ret;
     970             : 
     971           0 :         if (*ppos && attr->get_buf[0]) {
     972             :                 /* continued read */
     973           0 :                 size = strlen(attr->get_buf);
     974             :         } else {
     975             :                 /* first read */
     976             :                 u64 val;
     977           0 :                 ret = attr->get(attr->data, &val);
     978           0 :                 if (ret)
     979             :                         goto out;
     980             : 
     981           0 :                 size = scnprintf(attr->get_buf, sizeof(attr->get_buf),
     982             :                                  attr->fmt, (unsigned long long)val);
     983             :         }
     984             : 
     985           0 :         ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size);
     986             : out:
     987           0 :         mutex_unlock(&attr->mutex);
     988           0 :         return ret;
     989             : }
     990             : EXPORT_SYMBOL_GPL(simple_attr_read);
     991             : 
     992             : /* interpret the buffer as a number to call the set function with */
     993           0 : static ssize_t simple_attr_write_xsigned(struct file *file, const char __user *buf,
     994             :                           size_t len, loff_t *ppos, bool is_signed)
     995             : {
     996             :         struct simple_attr *attr;
     997             :         unsigned long long val;
     998             :         size_t size;
     999             :         ssize_t ret;
    1000             : 
    1001           0 :         attr = file->private_data;
    1002           0 :         if (!attr->set)
    1003             :                 return -EACCES;
    1004             : 
    1005           0 :         ret = mutex_lock_interruptible(&attr->mutex);
    1006           0 :         if (ret)
    1007             :                 return ret;
    1008             : 
    1009           0 :         ret = -EFAULT;
    1010           0 :         size = min(sizeof(attr->set_buf) - 1, len);
    1011           0 :         if (copy_from_user(attr->set_buf, buf, size))
    1012             :                 goto out;
    1013             : 
    1014           0 :         attr->set_buf[size] = '\0';
    1015           0 :         if (is_signed)
    1016           0 :                 ret = kstrtoll(attr->set_buf, 0, &val);
    1017             :         else
    1018           0 :                 ret = kstrtoull(attr->set_buf, 0, &val);
    1019           0 :         if (ret)
    1020             :                 goto out;
    1021           0 :         ret = attr->set(attr->data, val);
    1022           0 :         if (ret == 0)
    1023           0 :                 ret = len; /* on success, claim we got the whole input */
    1024             : out:
    1025           0 :         mutex_unlock(&attr->mutex);
    1026           0 :         return ret;
    1027             : }
    1028             : 
    1029           0 : ssize_t simple_attr_write(struct file *file, const char __user *buf,
    1030             :                           size_t len, loff_t *ppos)
    1031             : {
    1032           0 :         return simple_attr_write_xsigned(file, buf, len, ppos, false);
    1033             : }
    1034             : EXPORT_SYMBOL_GPL(simple_attr_write);
    1035             : 
    1036           0 : ssize_t simple_attr_write_signed(struct file *file, const char __user *buf,
    1037             :                           size_t len, loff_t *ppos)
    1038             : {
    1039           0 :         return simple_attr_write_xsigned(file, buf, len, ppos, true);
    1040             : }
    1041             : EXPORT_SYMBOL_GPL(simple_attr_write_signed);
    1042             : 
    1043             : /**
    1044             :  * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
    1045             :  * @sb:         filesystem to do the file handle conversion on
    1046             :  * @fid:        file handle to convert
    1047             :  * @fh_len:     length of the file handle in bytes
    1048             :  * @fh_type:    type of file handle
    1049             :  * @get_inode:  filesystem callback to retrieve inode
    1050             :  *
    1051             :  * This function decodes @fid as long as it has one of the well-known
    1052             :  * Linux filehandle types and calls @get_inode on it to retrieve the
    1053             :  * inode for the object specified in the file handle.
    1054             :  */
    1055           0 : struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid,
    1056             :                 int fh_len, int fh_type, struct inode *(*get_inode)
    1057             :                         (struct super_block *sb, u64 ino, u32 gen))
    1058             : {
    1059           0 :         struct inode *inode = NULL;
    1060             : 
    1061           0 :         if (fh_len < 2)
    1062             :                 return NULL;
    1063             : 
    1064           0 :         switch (fh_type) {
    1065             :         case FILEID_INO32_GEN:
    1066             :         case FILEID_INO32_GEN_PARENT:
    1067           0 :                 inode = get_inode(sb, fid->i32.ino, fid->i32.gen);
    1068           0 :                 break;
    1069             :         }
    1070             : 
    1071           0 :         return d_obtain_alias(inode);
    1072             : }
    1073             : EXPORT_SYMBOL_GPL(generic_fh_to_dentry);
    1074             : 
    1075             : /**
    1076             :  * generic_fh_to_parent - generic helper for the fh_to_parent export operation
    1077             :  * @sb:         filesystem to do the file handle conversion on
    1078             :  * @fid:        file handle to convert
    1079             :  * @fh_len:     length of the file handle in bytes
    1080             :  * @fh_type:    type of file handle
    1081             :  * @get_inode:  filesystem callback to retrieve inode
    1082             :  *
    1083             :  * This function decodes @fid as long as it has one of the well-known
    1084             :  * Linux filehandle types and calls @get_inode on it to retrieve the
    1085             :  * inode for the _parent_ object specified in the file handle if it
    1086             :  * is specified in the file handle, or NULL otherwise.
    1087             :  */
    1088           0 : struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,
    1089             :                 int fh_len, int fh_type, struct inode *(*get_inode)
    1090             :                         (struct super_block *sb, u64 ino, u32 gen))
    1091             : {
    1092           0 :         struct inode *inode = NULL;
    1093             : 
    1094           0 :         if (fh_len <= 2)
    1095             :                 return NULL;
    1096             : 
    1097           0 :         switch (fh_type) {
    1098             :         case FILEID_INO32_GEN_PARENT:
    1099           0 :                 inode = get_inode(sb, fid->i32.parent_ino,
    1100             :                                   (fh_len > 3 ? fid->i32.parent_gen : 0));
    1101           0 :                 break;
    1102             :         }
    1103             : 
    1104           0 :         return d_obtain_alias(inode);
    1105             : }
    1106             : EXPORT_SYMBOL_GPL(generic_fh_to_parent);
    1107             : 
    1108             : /**
    1109             :  * __generic_file_fsync - generic fsync implementation for simple filesystems
    1110             :  *
    1111             :  * @file:       file to synchronize
    1112             :  * @start:      start offset in bytes
    1113             :  * @end:        end offset in bytes (inclusive)
    1114             :  * @datasync:   only synchronize essential metadata if true
    1115             :  *
    1116             :  * This is a generic implementation of the fsync method for simple
    1117             :  * filesystems which track all non-inode metadata in the buffers list
    1118             :  * hanging off the address_space structure.
    1119             :  */
    1120           0 : int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
    1121             :                                  int datasync)
    1122             : {
    1123           0 :         struct inode *inode = file->f_mapping->host;
    1124             :         int err;
    1125             :         int ret;
    1126             : 
    1127           0 :         err = file_write_and_wait_range(file, start, end);
    1128           0 :         if (err)
    1129             :                 return err;
    1130             : 
    1131           0 :         inode_lock(inode);
    1132           0 :         ret = sync_mapping_buffers(inode->i_mapping);
    1133           0 :         if (!(inode->i_state & I_DIRTY_ALL))
    1134             :                 goto out;
    1135           0 :         if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
    1136             :                 goto out;
    1137             : 
    1138           0 :         err = sync_inode_metadata(inode, 1);
    1139           0 :         if (ret == 0)
    1140           0 :                 ret = err;
    1141             : 
    1142             : out:
    1143           0 :         inode_unlock(inode);
    1144             :         /* check and advance again to catch errors after syncing out buffers */
    1145           0 :         err = file_check_and_advance_wb_err(file);
    1146           0 :         if (ret == 0)
    1147           0 :                 ret = err;
    1148             :         return ret;
    1149             : }
    1150             : EXPORT_SYMBOL(__generic_file_fsync);
    1151             : 
    1152             : /**
    1153             :  * generic_file_fsync - generic fsync implementation for simple filesystems
    1154             :  *                      with flush
    1155             :  * @file:       file to synchronize
    1156             :  * @start:      start offset in bytes
    1157             :  * @end:        end offset in bytes (inclusive)
    1158             :  * @datasync:   only synchronize essential metadata if true
    1159             :  *
    1160             :  */
    1161             : 
    1162           0 : int generic_file_fsync(struct file *file, loff_t start, loff_t end,
    1163             :                        int datasync)
    1164             : {
    1165           0 :         struct inode *inode = file->f_mapping->host;
    1166             :         int err;
    1167             : 
    1168           0 :         err = __generic_file_fsync(file, start, end, datasync);
    1169           0 :         if (err)
    1170             :                 return err;
    1171           0 :         return blkdev_issue_flush(inode->i_sb->s_bdev);
    1172             : }
    1173             : EXPORT_SYMBOL(generic_file_fsync);
    1174             : 
    1175             : /**
    1176             :  * generic_check_addressable - Check addressability of file system
    1177             :  * @blocksize_bits:     log of file system block size
    1178             :  * @num_blocks:         number of blocks in file system
    1179             :  *
    1180             :  * Determine whether a file system with @num_blocks blocks (and a
    1181             :  * block size of 2**@blocksize_bits) is addressable by the sector_t
    1182             :  * and page cache of the system.  Return 0 if so and -EFBIG otherwise.
    1183             :  */
    1184           0 : int generic_check_addressable(unsigned blocksize_bits, u64 num_blocks)
    1185             : {
    1186           0 :         u64 last_fs_block = num_blocks - 1;
    1187           0 :         u64 last_fs_page =
    1188           0 :                 last_fs_block >> (PAGE_SHIFT - blocksize_bits);
    1189             : 
    1190           0 :         if (unlikely(num_blocks == 0))
    1191             :                 return 0;
    1192             : 
    1193           0 :         if ((blocksize_bits < 9) || (blocksize_bits > PAGE_SHIFT))
    1194             :                 return -EINVAL;
    1195             : 
    1196           0 :         if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) ||
    1197             :             (last_fs_page > (pgoff_t)(~0ULL))) {
    1198             :                 return -EFBIG;
    1199             :         }
    1200           0 :         return 0;
    1201             : }
    1202             : EXPORT_SYMBOL(generic_check_addressable);
    1203             : 
    1204             : /*
    1205             :  * No-op implementation of ->fsync for in-memory filesystems.
    1206             :  */
    1207           0 : int noop_fsync(struct file *file, loff_t start, loff_t end, int datasync)
    1208             : {
    1209           0 :         return 0;
    1210             : }
    1211             : EXPORT_SYMBOL(noop_fsync);
    1212             : 
    1213           0 : ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
    1214             : {
    1215             :         /*
    1216             :          * iomap based filesystems support direct I/O without need for
    1217             :          * this callback. However, it still needs to be set in
    1218             :          * inode->a_ops so that open/fcntl know that direct I/O is
    1219             :          * generally supported.
    1220             :          */
    1221           0 :         return -EINVAL;
    1222             : }
    1223             : EXPORT_SYMBOL_GPL(noop_direct_IO);
    1224             : 
    1225             : /* Because kfree isn't assignment-compatible with void(void*) ;-/ */
    1226           0 : void kfree_link(void *p)
    1227             : {
    1228           0 :         kfree(p);
    1229           0 : }
    1230             : EXPORT_SYMBOL(kfree_link);
    1231             : 
    1232          24 : struct inode *alloc_anon_inode(struct super_block *s)
    1233             : {
    1234             :         static const struct address_space_operations anon_aops = {
    1235             :                 .dirty_folio    = noop_dirty_folio,
    1236             :         };
    1237          24 :         struct inode *inode = new_inode_pseudo(s);
    1238             : 
    1239          24 :         if (!inode)
    1240             :                 return ERR_PTR(-ENOMEM);
    1241             : 
    1242          24 :         inode->i_ino = get_next_ino();
    1243          24 :         inode->i_mapping->a_ops = &anon_aops;
    1244             : 
    1245             :         /*
    1246             :          * Mark the inode dirty from the very beginning,
    1247             :          * that way it will never be moved to the dirty
    1248             :          * list because mark_inode_dirty() will think
    1249             :          * that it already _is_ on the dirty list.
    1250             :          */
    1251          24 :         inode->i_state = I_DIRTY;
    1252          24 :         inode->i_mode = S_IRUSR | S_IWUSR;
    1253          24 :         inode->i_uid = current_fsuid();
    1254          24 :         inode->i_gid = current_fsgid();
    1255          24 :         inode->i_flags |= S_PRIVATE;
    1256          24 :         inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
    1257          24 :         return inode;
    1258             : }
    1259             : EXPORT_SYMBOL(alloc_anon_inode);
    1260             : 
    1261             : /**
    1262             :  * simple_nosetlease - generic helper for prohibiting leases
    1263             :  * @filp: file pointer
    1264             :  * @arg: type of lease to obtain
    1265             :  * @flp: new lease supplied for insertion
    1266             :  * @priv: private data for lm_setup operation
    1267             :  *
    1268             :  * Generic helper for filesystems that do not wish to allow leases to be set.
    1269             :  * All arguments are ignored and it just returns -EINVAL.
    1270             :  */
    1271             : int
    1272           0 : simple_nosetlease(struct file *filp, long arg, struct file_lock **flp,
    1273             :                   void **priv)
    1274             : {
    1275           0 :         return -EINVAL;
    1276             : }
    1277             : EXPORT_SYMBOL(simple_nosetlease);
    1278             : 
    1279             : /**
    1280             :  * simple_get_link - generic helper to get the target of "fast" symlinks
    1281             :  * @dentry: not used here
    1282             :  * @inode: the symlink inode
    1283             :  * @done: not used here
    1284             :  *
    1285             :  * Generic helper for filesystems to use for symlink inodes where a pointer to
    1286             :  * the symlink target is stored in ->i_link.  NOTE: this isn't normally called,
    1287             :  * since as an optimization the path lookup code uses any non-NULL ->i_link
    1288             :  * directly, without calling ->get_link().  But ->get_link() still must be set,
    1289             :  * to mark the inode_operations as being for a symlink.
    1290             :  *
    1291             :  * Return: the symlink target
    1292             :  */
    1293           0 : const char *simple_get_link(struct dentry *dentry, struct inode *inode,
    1294             :                             struct delayed_call *done)
    1295             : {
    1296           0 :         return inode->i_link;
    1297             : }
    1298             : EXPORT_SYMBOL(simple_get_link);
    1299             : 
    1300             : const struct inode_operations simple_symlink_inode_operations = {
    1301             :         .get_link = simple_get_link,
    1302             : };
    1303             : EXPORT_SYMBOL(simple_symlink_inode_operations);
    1304             : 
    1305             : /*
    1306             :  * Operations for a permanently empty directory.
    1307             :  */
    1308           0 : static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
    1309             : {
    1310           0 :         return ERR_PTR(-ENOENT);
    1311             : }
    1312             : 
    1313           0 : static int empty_dir_getattr(struct mnt_idmap *idmap,
    1314             :                              const struct path *path, struct kstat *stat,
    1315             :                              u32 request_mask, unsigned int query_flags)
    1316             : {
    1317           0 :         struct inode *inode = d_inode(path->dentry);
    1318           0 :         generic_fillattr(&nop_mnt_idmap, inode, stat);
    1319           0 :         return 0;
    1320             : }
    1321             : 
    1322           0 : static int empty_dir_setattr(struct mnt_idmap *idmap,
    1323             :                              struct dentry *dentry, struct iattr *attr)
    1324             : {
    1325           0 :         return -EPERM;
    1326             : }
    1327             : 
    1328           0 : static ssize_t empty_dir_listxattr(struct dentry *dentry, char *list, size_t size)
    1329             : {
    1330           0 :         return -EOPNOTSUPP;
    1331             : }
    1332             : 
    1333             : static const struct inode_operations empty_dir_inode_operations = {
    1334             :         .lookup         = empty_dir_lookup,
    1335             :         .permission     = generic_permission,
    1336             :         .setattr        = empty_dir_setattr,
    1337             :         .getattr        = empty_dir_getattr,
    1338             :         .listxattr      = empty_dir_listxattr,
    1339             : };
    1340             : 
    1341           0 : static loff_t empty_dir_llseek(struct file *file, loff_t offset, int whence)
    1342             : {
    1343             :         /* An empty directory has two entries . and .. at offsets 0 and 1 */
    1344           0 :         return generic_file_llseek_size(file, offset, whence, 2, 2);
    1345             : }
    1346             : 
    1347           0 : static int empty_dir_readdir(struct file *file, struct dir_context *ctx)
    1348             : {
    1349           0 :         dir_emit_dots(file, ctx);
    1350           0 :         return 0;
    1351             : }
    1352             : 
    1353             : static const struct file_operations empty_dir_operations = {
    1354             :         .llseek         = empty_dir_llseek,
    1355             :         .read           = generic_read_dir,
    1356             :         .iterate_shared = empty_dir_readdir,
    1357             :         .fsync          = noop_fsync,
    1358             : };
    1359             : 
    1360             : 
    1361           0 : void make_empty_dir_inode(struct inode *inode)
    1362             : {
    1363           0 :         set_nlink(inode, 2);
    1364           0 :         inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO;
    1365           0 :         inode->i_uid = GLOBAL_ROOT_UID;
    1366           0 :         inode->i_gid = GLOBAL_ROOT_GID;
    1367           0 :         inode->i_rdev = 0;
    1368           0 :         inode->i_size = 0;
    1369           0 :         inode->i_blkbits = PAGE_SHIFT;
    1370           0 :         inode->i_blocks = 0;
    1371             : 
    1372           0 :         inode->i_op = &empty_dir_inode_operations;
    1373           0 :         inode->i_opflags &= ~IOP_XATTR;
    1374           0 :         inode->i_fop = &empty_dir_operations;
    1375           0 : }
    1376             : 
    1377           0 : bool is_empty_dir_inode(struct inode *inode)
    1378             : {
    1379           0 :         return (inode->i_fop == &empty_dir_operations) &&
    1380           0 :                 (inode->i_op == &empty_dir_inode_operations);
    1381             : }
    1382             : 
    1383             : #if IS_ENABLED(CONFIG_UNICODE)
    1384             : /*
    1385             :  * Determine if the name of a dentry should be casefolded.
    1386             :  *
    1387             :  * Return: if names will need casefolding
    1388             :  */
    1389             : static bool needs_casefold(const struct inode *dir)
    1390             : {
    1391             :         return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding;
    1392             : }
    1393             : 
    1394             : /**
    1395             :  * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
    1396             :  * @dentry:     dentry whose name we are checking against
    1397             :  * @len:        len of name of dentry
    1398             :  * @str:        str pointer to name of dentry
    1399             :  * @name:       Name to compare against
    1400             :  *
    1401             :  * Return: 0 if names match, 1 if mismatch, or -ERRNO
    1402             :  */
    1403             : static int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
    1404             :                                 const char *str, const struct qstr *name)
    1405             : {
    1406             :         const struct dentry *parent = READ_ONCE(dentry->d_parent);
    1407             :         const struct inode *dir = READ_ONCE(parent->d_inode);
    1408             :         const struct super_block *sb = dentry->d_sb;
    1409             :         const struct unicode_map *um = sb->s_encoding;
    1410             :         struct qstr qstr = QSTR_INIT(str, len);
    1411             :         char strbuf[DNAME_INLINE_LEN];
    1412             :         int ret;
    1413             : 
    1414             :         if (!dir || !needs_casefold(dir))
    1415             :                 goto fallback;
    1416             :         /*
    1417             :          * If the dentry name is stored in-line, then it may be concurrently
    1418             :          * modified by a rename.  If this happens, the VFS will eventually retry
    1419             :          * the lookup, so it doesn't matter what ->d_compare() returns.
    1420             :          * However, it's unsafe to call utf8_strncasecmp() with an unstable
    1421             :          * string.  Therefore, we have to copy the name into a temporary buffer.
    1422             :          */
    1423             :         if (len <= DNAME_INLINE_LEN - 1) {
    1424             :                 memcpy(strbuf, str, len);
    1425             :                 strbuf[len] = 0;
    1426             :                 qstr.name = strbuf;
    1427             :                 /* prevent compiler from optimizing out the temporary buffer */
    1428             :                 barrier();
    1429             :         }
    1430             :         ret = utf8_strncasecmp(um, name, &qstr);
    1431             :         if (ret >= 0)
    1432             :                 return ret;
    1433             : 
    1434             :         if (sb_has_strict_encoding(sb))
    1435             :                 return -EINVAL;
    1436             : fallback:
    1437             :         if (len != name->len)
    1438             :                 return 1;
    1439             :         return !!memcmp(str, name->name, len);
    1440             : }
    1441             : 
    1442             : /**
    1443             :  * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
    1444             :  * @dentry:     dentry of the parent directory
    1445             :  * @str:        qstr of name whose hash we should fill in
    1446             :  *
    1447             :  * Return: 0 if hash was successful or unchanged, and -EINVAL on error
    1448             :  */
    1449             : static int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
    1450             : {
    1451             :         const struct inode *dir = READ_ONCE(dentry->d_inode);
    1452             :         struct super_block *sb = dentry->d_sb;
    1453             :         const struct unicode_map *um = sb->s_encoding;
    1454             :         int ret = 0;
    1455             : 
    1456             :         if (!dir || !needs_casefold(dir))
    1457             :                 return 0;
    1458             : 
    1459             :         ret = utf8_casefold_hash(um, dentry, str);
    1460             :         if (ret < 0 && sb_has_strict_encoding(sb))
    1461             :                 return -EINVAL;
    1462             :         return 0;
    1463             : }
    1464             : 
    1465             : static const struct dentry_operations generic_ci_dentry_ops = {
    1466             :         .d_hash = generic_ci_d_hash,
    1467             :         .d_compare = generic_ci_d_compare,
    1468             : };
    1469             : #endif
    1470             : 
    1471             : #ifdef CONFIG_FS_ENCRYPTION
    1472             : static const struct dentry_operations generic_encrypted_dentry_ops = {
    1473             :         .d_revalidate = fscrypt_d_revalidate,
    1474             : };
    1475             : #endif
    1476             : 
    1477             : #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE)
    1478             : static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
    1479             :         .d_hash = generic_ci_d_hash,
    1480             :         .d_compare = generic_ci_d_compare,
    1481             :         .d_revalidate = fscrypt_d_revalidate,
    1482             : };
    1483             : #endif
    1484             : 
    1485             : /**
    1486             :  * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
    1487             :  * @dentry:     dentry to set ops on
    1488             :  *
    1489             :  * Casefolded directories need d_hash and d_compare set, so that the dentries
    1490             :  * contained in them are handled case-insensitively.  Note that these operations
    1491             :  * are needed on the parent directory rather than on the dentries in it, and
    1492             :  * while the casefolding flag can be toggled on and off on an empty directory,
    1493             :  * dentry_operations can't be changed later.  As a result, if the filesystem has
    1494             :  * casefolding support enabled at all, we have to give all dentries the
    1495             :  * casefolding operations even if their inode doesn't have the casefolding flag
    1496             :  * currently (and thus the casefolding ops would be no-ops for now).
    1497             :  *
    1498             :  * Encryption works differently in that the only dentry operation it needs is
    1499             :  * d_revalidate, which it only needs on dentries that have the no-key name flag.
    1500             :  * The no-key flag can't be set "later", so we don't have to worry about that.
    1501             :  *
    1502             :  * Finally, to maximize compatibility with overlayfs (which isn't compatible
    1503             :  * with certain dentry operations) and to avoid taking an unnecessary
    1504             :  * performance hit, we use custom dentry_operations for each possible
    1505             :  * combination rather than always installing all operations.
    1506             :  */
    1507           0 : void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
    1508             : {
    1509             : #ifdef CONFIG_FS_ENCRYPTION
    1510             :         bool needs_encrypt_ops = dentry->d_flags & DCACHE_NOKEY_NAME;
    1511             : #endif
    1512             : #if IS_ENABLED(CONFIG_UNICODE)
    1513             :         bool needs_ci_ops = dentry->d_sb->s_encoding;
    1514             : #endif
    1515             : #if defined(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_UNICODE)
    1516             :         if (needs_encrypt_ops && needs_ci_ops) {
    1517             :                 d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
    1518             :                 return;
    1519             :         }
    1520             : #endif
    1521             : #ifdef CONFIG_FS_ENCRYPTION
    1522             :         if (needs_encrypt_ops) {
    1523             :                 d_set_d_op(dentry, &generic_encrypted_dentry_ops);
    1524             :                 return;
    1525             :         }
    1526             : #endif
    1527             : #if IS_ENABLED(CONFIG_UNICODE)
    1528             :         if (needs_ci_ops) {
    1529             :                 d_set_d_op(dentry, &generic_ci_dentry_ops);
    1530             :                 return;
    1531             :         }
    1532             : #endif
    1533           0 : }
    1534             : EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
    1535             : 
    1536             : /**
    1537             :  * inode_maybe_inc_iversion - increments i_version
    1538             :  * @inode: inode with the i_version that should be updated
    1539             :  * @force: increment the counter even if it's not necessary?
    1540             :  *
    1541             :  * Every time the inode is modified, the i_version field must be seen to have
    1542             :  * changed by any observer.
    1543             :  *
    1544             :  * If "force" is set or the QUERIED flag is set, then ensure that we increment
    1545             :  * the value, and clear the queried flag.
    1546             :  *
    1547             :  * In the common case where neither is set, then we can return "false" without
    1548             :  * updating i_version.
    1549             :  *
    1550             :  * If this function returns false, and no other metadata has changed, then we
    1551             :  * can avoid logging the metadata.
    1552             :  */
    1553           0 : bool inode_maybe_inc_iversion(struct inode *inode, bool force)
    1554             : {
    1555             :         u64 cur, new;
    1556             : 
    1557             :         /*
    1558             :          * The i_version field is not strictly ordered with any other inode
    1559             :          * information, but the legacy inode_inc_iversion code used a spinlock
    1560             :          * to serialize increments.
    1561             :          *
    1562             :          * Here, we add full memory barriers to ensure that any de-facto
    1563             :          * ordering with other info is preserved.
    1564             :          *
    1565             :          * This barrier pairs with the barrier in inode_query_iversion()
    1566             :          */
    1567           0 :         smp_mb();
    1568           0 :         cur = inode_peek_iversion_raw(inode);
    1569             :         do {
    1570             :                 /* If flag is clear then we needn't do anything */
    1571           0 :                 if (!force && !(cur & I_VERSION_QUERIED))
    1572             :                         return false;
    1573             : 
    1574             :                 /* Since lowest bit is flag, add 2 to avoid it */
    1575           0 :                 new = (cur & ~I_VERSION_QUERIED) + I_VERSION_INCREMENT;
    1576           0 :         } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new));
    1577             :         return true;
    1578             : }
    1579             : EXPORT_SYMBOL(inode_maybe_inc_iversion);
    1580             : 
    1581             : /**
    1582             :  * inode_query_iversion - read i_version for later use
    1583             :  * @inode: inode from which i_version should be read
    1584             :  *
    1585             :  * Read the inode i_version counter. This should be used by callers that wish
    1586             :  * to store the returned i_version for later comparison. This will guarantee
    1587             :  * that a later query of the i_version will result in a different value if
    1588             :  * anything has changed.
    1589             :  *
    1590             :  * In this implementation, we fetch the current value, set the QUERIED flag and
    1591             :  * then try to swap it into place with a cmpxchg, if it wasn't already set. If
    1592             :  * that fails, we try again with the newly fetched value from the cmpxchg.
    1593             :  */
    1594           0 : u64 inode_query_iversion(struct inode *inode)
    1595             : {
    1596             :         u64 cur, new;
    1597             : 
    1598           0 :         cur = inode_peek_iversion_raw(inode);
    1599             :         do {
    1600             :                 /* If flag is already set, then no need to swap */
    1601           0 :                 if (cur & I_VERSION_QUERIED) {
    1602             :                         /*
    1603             :                          * This barrier (and the implicit barrier in the
    1604             :                          * cmpxchg below) pairs with the barrier in
    1605             :                          * inode_maybe_inc_iversion().
    1606             :                          */
    1607           0 :                         smp_mb();
    1608           0 :                         break;
    1609             :                 }
    1610             : 
    1611           0 :                 new = cur | I_VERSION_QUERIED;
    1612           0 :         } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new));
    1613           0 :         return cur >> I_VERSION_QUERIED_SHIFT;
    1614             : }
    1615             : EXPORT_SYMBOL(inode_query_iversion);

Generated by: LCOV version 1.14