Lines Matching +full:buffered +full:- +full:positive
1 // SPDX-License-Identifier: GPL-2.0-only
36 struct inode *inode = d_inode(path->dentry); in simple_getattr()
38 stat->blocks = inode->i_mapping->nrpages << (PAGE_SHIFT - 9); in simple_getattr()
45 u64 id = huge_encode_dev(dentry->d_sb->s_dev); in simple_statfs()
47 buf->f_fsid = u64_to_fsid(id); in simple_statfs()
48 buf->f_type = dentry->d_sb->s_magic; in simple_statfs()
49 buf->f_bsize = PAGE_SIZE; in simple_statfs()
50 buf->f_namelen = NAME_MAX; in simple_statfs()
56 * Retaining negative dentries for an in-memory filesystem just wastes
66 * Lookup the data. This is trivial - if the dentry didn't already
71 if (dentry->d_name.len > NAME_MAX) in simple_lookup()
72 return ERR_PTR(-ENAMETOOLONG); in simple_lookup()
73 if (!dentry->d_op && !(dentry->d_flags & DCACHE_DONTCACHE)) { in simple_lookup()
74 spin_lock(&dentry->d_lock); in simple_lookup()
75 dentry->d_flags |= DCACHE_DONTCACHE; in simple_lookup()
76 spin_unlock(&dentry->d_lock); in simple_lookup()
88 file->private_data = d_alloc_cursor(file->f_path.dentry); in dcache_dir_open()
90 return file->private_data ? 0 : -ENOMEM; in dcache_dir_open()
96 dput(file->private_data); in dcache_dir_close()
104 * We are looking for <count>th positive after <p>; if
113 struct dentry *dentry = cursor->d_parent, *found = NULL; in scan_positives()
115 spin_lock(&dentry->d_lock); in scan_positives()
118 p = &d->d_sib.next; in scan_positives()
120 if (d->d_flags & DCACHE_DENTRY_CURSOR) in scan_positives()
122 if (simple_positive(d) && !--count) { in scan_positives()
123 spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); in scan_positives()
126 spin_unlock(&d->d_lock); in scan_positives()
132 if (!hlist_unhashed(&cursor->d_sib)) in scan_positives()
133 __hlist_del(&cursor->d_sib); in scan_positives()
134 hlist_add_behind(&cursor->d_sib, &d->d_sib); in scan_positives()
135 p = &cursor->d_sib.next; in scan_positives()
136 spin_unlock(&dentry->d_lock); in scan_positives()
138 spin_lock(&dentry->d_lock); in scan_positives()
141 spin_unlock(&dentry->d_lock); in scan_positives()
148 struct dentry *dentry = file->f_path.dentry; in dcache_dir_lseek()
151 offset += file->f_pos; in dcache_dir_lseek()
158 return -EINVAL; in dcache_dir_lseek()
160 if (offset != file->f_pos) { in dcache_dir_lseek()
161 struct dentry *cursor = file->private_data; in dcache_dir_lseek()
164 inode_lock_shared(dentry->d_inode); in dcache_dir_lseek()
167 to = scan_positives(cursor, &dentry->d_children.first, in dcache_dir_lseek()
168 offset - 2, NULL); in dcache_dir_lseek()
169 spin_lock(&dentry->d_lock); in dcache_dir_lseek()
170 hlist_del_init(&cursor->d_sib); in dcache_dir_lseek()
172 hlist_add_behind(&cursor->d_sib, &to->d_sib); in dcache_dir_lseek()
173 spin_unlock(&dentry->d_lock); in dcache_dir_lseek()
176 file->f_pos = offset; in dcache_dir_lseek()
178 inode_unlock_shared(dentry->d_inode); in dcache_dir_lseek()
185 * Directory is locked and all positive dentries in it are safe, since
186 * for ramfs-type trees they can't go away without unlink() or rmdir(),
192 struct dentry *dentry = file->f_path.dentry; in dcache_readdir()
193 struct dentry *cursor = file->private_data; in dcache_readdir()
200 if (ctx->pos == 2) in dcache_readdir()
201 p = &dentry->d_children.first; in dcache_readdir()
203 p = &cursor->d_sib.next; in dcache_readdir()
206 if (!dir_emit(ctx, next->d_name.name, next->d_name.len, in dcache_readdir()
207 d_inode(next)->i_ino, in dcache_readdir()
208 fs_umode_to_dtype(d_inode(next)->i_mode))) in dcache_readdir()
210 ctx->pos++; in dcache_readdir()
211 p = &next->d_sib.next; in dcache_readdir()
213 spin_lock(&dentry->d_lock); in dcache_readdir()
214 hlist_del_init(&cursor->d_sib); in dcache_readdir()
216 hlist_add_before(&cursor->d_sib, &next->d_sib); in dcache_readdir()
217 spin_unlock(&dentry->d_lock); in dcache_readdir()
226 return -EISDIR; in generic_read_dir()
254 DIR_OFFSET_MAX = DIR_OFFSET_EOD - 1,
259 dentry->d_fsdata = (void *)offset; in offset_set()
264 return (long)dentry->d_fsdata; in dentry2offset()
270 * simple_offset_init - initialize an offset_ctx
276 mt_init_flags(&octx->mt, MT_FLAGS_ALLOC_RANGE); in simple_offset_init()
277 lockdep_set_class(&octx->mt.ma_lock, &simple_offset_lock_class); in simple_offset_init()
278 octx->next_offset = DIR_OFFSET_MIN; in simple_offset_init()
282 * simple_offset_add - Add an entry to a directory's offset map
295 return -EBUSY; in simple_offset_add()
297 ret = mtree_alloc_cyclic(&octx->mt, &offset, dentry, DIR_OFFSET_MIN, in simple_offset_add()
298 DIR_OFFSET_MAX, &octx->next_offset, in simple_offset_add()
301 return ret == -EBUSY ? -ENOSPC : ret; in simple_offset_add()
312 ret = mtree_store(&octx->mt, offset, dentry, GFP_KERNEL); in simple_offset_replace()
320 * simple_offset_remove - Remove an entry to a directory's offset map
333 mtree_erase(&octx->mt, offset); in simple_offset_remove()
338 * simple_offset_rename - handle directory offsets for rename
354 struct offset_ctx *old_ctx = old_dir->i_op->get_offset_ctx(old_dir); in simple_offset_rename()
355 struct offset_ctx *new_ctx = new_dir->i_op->get_offset_ctx(new_dir); in simple_offset_rename()
368 * simple_offset_rename_exchange - exchange rename with directory offsets
385 struct offset_ctx *old_ctx = old_dir->i_op->get_offset_ctx(old_dir); in simple_offset_rename_exchange()
386 struct offset_ctx *new_ctx = new_dir->i_op->get_offset_ctx(new_dir); in simple_offset_rename_exchange()
419 * simple_offset_destroy - Release offset map
427 mtree_destroy(&octx->mt); in simple_offset_destroy()
431 * offset_dir_llseek - Advance the read position of a directory descriptor
445 offset += file->f_pos; in offset_dir_llseek()
452 return -EINVAL; in offset_dir_llseek()
464 spin_lock(&parent->d_lock); in find_positive_dentry()
472 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); in find_positive_dentry()
475 spin_unlock(&dentry->d_lock); in find_positive_dentry()
479 spin_unlock(&parent->d_lock); in find_positive_dentry()
487 struct offset_ctx *octx = inode->i_op->get_offset_ctx(inode); in offset_dir_lookup()
490 MA_STATE(mas, &octx->mt, offset, offset); in offset_dir_lookup()
507 return dir_emit(ctx, dentry->d_name.name, dentry->d_name.len, in offset_dir_emit()
508 inode->i_ino, fs_umode_to_dtype(inode->i_mode)); in offset_dir_emit()
513 struct dentry *dir = file->f_path.dentry; in offset_iterate_dir()
516 dentry = offset_dir_lookup(dir, ctx->pos); in offset_iterate_dir()
522 ctx->pos = dentry2offset(dentry); in offset_iterate_dir()
537 ctx->pos = DIR_OFFSET_EOD; in offset_iterate_dir()
541 * offset_readdir - Emit entries starting at offset @ctx->pos
548 * On entry, @ctx->pos contains an offset that represents the first entry
552 * until the ctx->actor indicates there is no more space in the caller's
555 * On return, @ctx->pos contains an offset that will read the next entry
561 * %0 - Complete
565 struct dentry *dir = file->f_path.dentry; in offset_readdir()
567 lockdep_assert_held(&d_inode(dir)->i_rwsem); in offset_readdir()
571 if (ctx->pos != DIR_OFFSET_EOD) in offset_readdir()
587 spin_lock(&parent->d_lock); in find_next_child()
591 spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); in find_next_child()
594 spin_unlock(&d->d_lock); in find_next_child()
599 spin_unlock(&parent->d_lock); in find_next_child()
612 struct inode *inode = this->d_inode; in __simple_recursive_removal()
616 inode->i_flags |= S_DEAD; in __simple_recursive_removal()
624 this = this->d_parent; in __simple_recursive_removal()
625 inode = this->d_inode; in __simple_recursive_removal()
672 struct pseudo_fs_context *ctx = fc->fs_private; in pseudo_fs_fill_super()
675 s->s_maxbytes = MAX_LFS_FILESIZE; in pseudo_fs_fill_super()
676 s->s_blocksize = PAGE_SIZE; in pseudo_fs_fill_super()
677 s->s_blocksize_bits = PAGE_SHIFT; in pseudo_fs_fill_super()
678 s->s_magic = ctx->magic; in pseudo_fs_fill_super()
679 s->s_op = ctx->ops ?: &simple_super_operations; in pseudo_fs_fill_super()
680 s->s_export_op = ctx->eops; in pseudo_fs_fill_super()
681 s->s_xattr = ctx->xattr; in pseudo_fs_fill_super()
682 s->s_time_gran = 1; in pseudo_fs_fill_super()
685 return -ENOMEM; in pseudo_fs_fill_super()
692 root->i_ino = 1; in pseudo_fs_fill_super()
693 root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR; in pseudo_fs_fill_super()
695 s->s_root = d_make_root(root); in pseudo_fs_fill_super()
696 if (!s->s_root) in pseudo_fs_fill_super()
697 return -ENOMEM; in pseudo_fs_fill_super()
698 set_default_d_op(s, ctx->dops); in pseudo_fs_fill_super()
709 kfree(fc->fs_private); in pseudo_fs_free()
718 * Common helper for pseudo-filesystems (sockfs, pipefs, bdev - stuff that
728 ctx->magic = magic; in init_pseudo()
729 fc->fs_private = ctx; in init_pseudo()
730 fc->ops = &pseudo_fs_context_ops; in init_pseudo()
731 fc->sb_flags |= SB_NOUSER; in init_pseudo()
732 fc->global = true; in init_pseudo()
740 if (inode->i_private) in simple_open()
741 file->private_data = inode->i_private; in simple_open()
765 spin_lock(&dentry->d_lock); in simple_empty()
766 hlist_for_each_entry(child, &dentry->d_children, d_sib) { in simple_empty()
767 spin_lock_nested(&child->d_lock, DENTRY_D_LOCK_NESTED); in simple_empty()
769 spin_unlock(&child->d_lock); in simple_empty()
772 spin_unlock(&child->d_lock); in simple_empty()
776 spin_unlock(&dentry->d_lock); in simple_empty()
796 return -ENOTEMPTY; in simple_rmdir()
806 * simple_rename_timestamp - update the various inode timestamps for rename
858 return -EINVAL; in simple_rename()
864 return -ENOTEMPTY; in simple_rename()
883 * simple_setattr - setattr for simple filesystem
888 * Returns 0 on success, -error on failure.
890 * simple_setattr is a simple ->setattr implementation without a proper
893 * It can either be used for in-memory filesystems or special files
894 * on simple regular filesystems. Anything that needs to change on-disk
907 if (iattr->ia_valid & ATTR_SIZE) in simple_setattr()
908 truncate_setsize(inode, iattr->ia_size); in simple_setattr()
948 * simple_write_end - .write_end helper for non-block-device FSes
975 struct inode *inode = folio->mapping->host; in simple_write_end()
983 folio_zero_range(folio, from + copied, len - copied); in simple_write_end()
991 if (last_pos > inode->i_size) in simple_write_end()
1002 * Provides ramfs-style behavior: data in the pagecache, but no writeback.
1024 s->s_blocksize = PAGE_SIZE; in simple_fill_super()
1025 s->s_blocksize_bits = PAGE_SHIFT; in simple_fill_super()
1026 s->s_magic = magic; in simple_fill_super()
1027 s->s_op = &simple_super_operations; in simple_fill_super()
1028 s->s_time_gran = 1; in simple_fill_super()
1032 return -ENOMEM; in simple_fill_super()
1037 inode->i_ino = 1; in simple_fill_super()
1038 inode->i_mode = S_IFDIR | 0755; in simple_fill_super()
1040 inode->i_op = &simple_dir_inode_operations; in simple_fill_super()
1041 inode->i_fop = &simple_dir_operations; in simple_fill_super()
1043 s->s_root = d_make_root(inode); in simple_fill_super()
1044 if (!s->s_root) in simple_fill_super()
1045 return -ENOMEM; in simple_fill_super()
1046 for (i = 0; !files->name || files->name[0]; i++, files++) { in simple_fill_super()
1047 if (!files->name) in simple_fill_super()
1054 s->s_type->name); in simple_fill_super()
1056 dentry = d_alloc_name(s->s_root, files->name); in simple_fill_super()
1058 return -ENOMEM; in simple_fill_super()
1062 return -ENOMEM; in simple_fill_super()
1064 inode->i_mode = S_IFREG | files->mode; in simple_fill_super()
1066 inode->i_fop = files->ops; in simple_fill_super()
1067 inode->i_ino = i; in simple_fill_super()
1082 mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, NULL); in simple_pin_fs()
1102 if (!--*count) in simple_release_fs()
1110 * simple_read_from_buffer - copy data from the buffer to user space
1130 return -EINVAL; in simple_read_from_buffer()
1133 if (count > available - pos) in simple_read_from_buffer()
1134 count = available - pos; in simple_read_from_buffer()
1137 return -EFAULT; in simple_read_from_buffer()
1138 count -= ret; in simple_read_from_buffer()
1145 * simple_write_to_buffer - copy data from user space to the buffer
1165 return -EINVAL; in simple_write_to_buffer()
1168 if (count > available - pos) in simple_write_to_buffer()
1169 count = available - pos; in simple_write_to_buffer()
1172 return -EFAULT; in simple_write_to_buffer()
1173 count -= res; in simple_write_to_buffer()
1180 * memory_read_from_buffer - copy data from the buffer
1199 return -EINVAL; in memory_read_from_buffer()
1202 if (count > available - pos) in memory_read_from_buffer()
1203 count = available - pos; in memory_read_from_buffer()
1214 * possibly a read which collects the result - which is stored in a
1215 * file-local buffer.
1220 struct simple_transaction_argresp *ar = file->private_data; in simple_transaction_set()
1225 * The barrier ensures that ar->size will really remain zero until in simple_transaction_set()
1226 * ar->data is ready for reading. in simple_transaction_set()
1229 ar->size = n; in simple_transaction_set()
1238 if (size > SIMPLE_TRANSACTION_LIMIT - 1) in simple_transaction_get()
1239 return ERR_PTR(-EFBIG); in simple_transaction_get()
1243 return ERR_PTR(-ENOMEM); in simple_transaction_get()
1248 if (file->private_data) { in simple_transaction_get()
1251 return ERR_PTR(-EBUSY); in simple_transaction_get()
1254 file->private_data = ar; in simple_transaction_get()
1258 if (copy_from_user(ar->data, buf, size)) in simple_transaction_get()
1259 return ERR_PTR(-EFAULT); in simple_transaction_get()
1261 return ar->data; in simple_transaction_get()
1267 struct simple_transaction_argresp *ar = file->private_data; in simple_transaction_read()
1271 return simple_read_from_buffer(buf, size, pos, ar->data, ar->size); in simple_transaction_read()
1277 free_page((unsigned long)file->private_data); in simple_transaction_release()
1304 return -ENOMEM; in simple_attr_open()
1306 attr->get = get; in simple_attr_open()
1307 attr->set = set; in simple_attr_open()
1308 attr->data = inode->i_private; in simple_attr_open()
1309 attr->fmt = fmt; in simple_attr_open()
1310 mutex_init(&attr->mutex); in simple_attr_open()
1312 file->private_data = attr; in simple_attr_open()
1320 kfree(file->private_data); in simple_attr_release()
1323 EXPORT_SYMBOL_GPL(simple_attr_release); /* GPL-only? This? Really? */
1333 attr = file->private_data; in simple_attr_read()
1335 if (!attr->get) in simple_attr_read()
1336 return -EACCES; in simple_attr_read()
1338 ret = mutex_lock_interruptible(&attr->mutex); in simple_attr_read()
1342 if (*ppos && attr->get_buf[0]) { in simple_attr_read()
1344 size = strlen(attr->get_buf); in simple_attr_read()
1348 ret = attr->get(attr->data, &val); in simple_attr_read()
1352 size = scnprintf(attr->get_buf, sizeof(attr->get_buf), in simple_attr_read()
1353 attr->fmt, (unsigned long long)val); in simple_attr_read()
1356 ret = simple_read_from_buffer(buf, len, ppos, attr->get_buf, size); in simple_attr_read()
1358 mutex_unlock(&attr->mutex); in simple_attr_read()
1372 attr = file->private_data; in simple_attr_write_xsigned()
1373 if (!attr->set) in simple_attr_write_xsigned()
1374 return -EACCES; in simple_attr_write_xsigned()
1376 ret = mutex_lock_interruptible(&attr->mutex); in simple_attr_write_xsigned()
1380 ret = -EFAULT; in simple_attr_write_xsigned()
1381 size = min(sizeof(attr->set_buf) - 1, len); in simple_attr_write_xsigned()
1382 if (copy_from_user(attr->set_buf, buf, size)) in simple_attr_write_xsigned()
1385 attr->set_buf[size] = '\0'; in simple_attr_write_xsigned()
1387 ret = kstrtoll(attr->set_buf, 0, &val); in simple_attr_write_xsigned()
1389 ret = kstrtoull(attr->set_buf, 0, &val); in simple_attr_write_xsigned()
1392 ret = attr->set(attr->data, val); in simple_attr_write_xsigned()
1396 mutex_unlock(&attr->mutex); in simple_attr_write_xsigned()
1415 * generic_encode_ino32_fh - generic export_operations->encode_fh function
1442 fid->i32.ino = inode->i_ino; in generic_encode_ino32_fh()
1443 fid->i32.gen = inode->i_generation; in generic_encode_ino32_fh()
1445 fid->i32.parent_ino = parent->i_ino; in generic_encode_ino32_fh()
1446 fid->i32.parent_gen = parent->i_generation; in generic_encode_ino32_fh()
1456 * generic_fh_to_dentry - generic helper for the fh_to_dentry export operation
1463 * This function decodes @fid as long as it has one of the well-known
1479 inode = get_inode(sb, fid->i32.ino, fid->i32.gen); in generic_fh_to_dentry()
1488 * generic_fh_to_parent - generic helper for the fh_to_parent export operation
1495 * This function decodes @fid as long as it has one of the well-known
1511 inode = get_inode(sb, fid->i32.parent_ino, in generic_fh_to_parent()
1512 (fh_len > 3 ? fid->i32.parent_gen : 0)); in generic_fh_to_parent()
1521 * __generic_file_fsync - generic fsync implementation for simple filesystems
1529 * filesystems which track all non-inode metadata in the buffers list
1535 struct inode *inode = file->f_mapping->host; in __generic_file_fsync()
1544 ret = sync_mapping_buffers(inode->i_mapping); in __generic_file_fsync()
1545 if (!(inode->i_state & I_DIRTY_ALL)) in __generic_file_fsync()
1547 if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) in __generic_file_fsync()
1565 * generic_file_fsync - generic fsync implementation for simple filesystems
1577 struct inode *inode = file->f_mapping->host; in generic_file_fsync()
1583 return blkdev_issue_flush(inode->i_sb->s_bdev); in generic_file_fsync()
1588 * generic_check_addressable - Check addressability of file system
1594 * and page cache of the system. Return 0 if so and -EFBIG otherwise.
1598 u64 last_fs_block = num_blocks - 1; in generic_check_addressable()
1602 return -EFBIG; in generic_check_addressable()
1604 last_fs_page = (max_bytes >> PAGE_SHIFT) - 1; in generic_check_addressable()
1610 return -EINVAL; in generic_check_addressable()
1612 if ((last_fs_block > (sector_t)(~0ULL) >> (blocksize_bits - 9)) || in generic_check_addressable()
1614 return -EFBIG; in generic_check_addressable()
1621 * No-op implementation of ->fsync for in-memory filesystems.
1634 * inode->a_ops so that open/fcntl know that direct I/O is in noop_direct_IO()
1637 return -EINVAL; in noop_direct_IO()
1641 /* Because kfree isn't assignment-compatible with void(void*) ;-/ */
1656 return ERR_PTR(-ENOMEM); in alloc_anon_inode()
1658 inode->i_ino = get_next_ino(); in alloc_anon_inode()
1659 inode->i_mapping->a_ops = &anon_aops; in alloc_anon_inode()
1667 inode->i_state = I_DIRTY; in alloc_anon_inode()
1672 inode->i_mode = S_IRUSR | S_IWUSR; in alloc_anon_inode()
1673 inode->i_uid = current_fsuid(); in alloc_anon_inode()
1674 inode->i_gid = current_fsgid(); in alloc_anon_inode()
1675 inode->i_flags |= S_PRIVATE | S_ANON_INODE; in alloc_anon_inode()
1682 * simple_nosetlease - generic helper for prohibiting leases
1689 * All arguments are ignored and it just returns -EINVAL.
1695 return -EINVAL; in simple_nosetlease()
1700 * simple_get_link - generic helper to get the target of "fast" symlinks
1706 * the symlink target is stored in ->i_link. NOTE: this isn't normally called,
1707 * since as an optimization the path lookup code uses any non-NULL ->i_link
1708 * directly, without calling ->get_link(). But ->get_link() still must be set,
1716 return inode->i_link; in simple_get_link()
1730 return ERR_PTR(-ENOENT); in empty_dir_lookup()
1736 return -EPERM; in empty_dir_setattr()
1741 return -EOPNOTSUPP; in empty_dir_listxattr()
1773 inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; in make_empty_dir_inode()
1774 inode->i_uid = GLOBAL_ROOT_UID; in make_empty_dir_inode()
1775 inode->i_gid = GLOBAL_ROOT_GID; in make_empty_dir_inode()
1776 inode->i_rdev = 0; in make_empty_dir_inode()
1777 inode->i_size = 0; in make_empty_dir_inode()
1778 inode->i_blkbits = PAGE_SHIFT; in make_empty_dir_inode()
1779 inode->i_blocks = 0; in make_empty_dir_inode()
1781 inode->i_op = &empty_dir_inode_operations; in make_empty_dir_inode()
1782 inode->i_opflags &= ~IOP_XATTR; in make_empty_dir_inode()
1783 inode->i_fop = &empty_dir_operations; in make_empty_dir_inode()
1788 return (inode->i_fop == &empty_dir_operations) && in is_empty_dir_inode()
1789 (inode->i_op == &empty_dir_inode_operations); in is_empty_dir_inode()
1794 * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
1800 * Return: 0 if names match, 1 if mismatch, or -ERRNO
1811 * Attempt a case-sensitive match first. It is cheaper and in generic_ci_d_compare()
1813 * applications that expect a case-sensitive filesystem. in generic_ci_d_compare()
1819 if (len == name->len && !memcmp(str, name->name, len)) in generic_ci_d_compare()
1822 parent = READ_ONCE(dentry->d_parent); in generic_ci_d_compare()
1823 dir = READ_ONCE(parent->d_inode); in generic_ci_d_compare()
1830 * If the dentry name is stored in-line, then it may be concurrently in generic_ci_d_compare()
1832 * the lookup, so it doesn't matter what ->d_compare() returns. in generic_ci_d_compare()
1836 * is exactly when str points to ->d_shortname. in generic_ci_d_compare()
1838 if (qstr.name == dentry->d_shortname.string) { in generic_ci_d_compare()
1839 strbuf = dentry->d_shortname; // NUL is guaranteed to be in there in generic_ci_d_compare()
1845 return utf8_strncasecmp(dentry->d_sb->s_encoding, name, &qstr); in generic_ci_d_compare()
1850 * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
1854 * Return: 0 if hash was successful or unchanged, and -EINVAL on error
1858 const struct inode *dir = READ_ONCE(dentry->d_inode); in generic_ci_d_hash()
1859 struct super_block *sb = dentry->d_sb; in generic_ci_d_hash()
1860 const struct unicode_map *um = sb->s_encoding; in generic_ci_d_hash()
1868 return -EINVAL; in generic_ci_d_hash()
1882 * generic_ci_match() - Match a name (case-insensitively) with a dirent.
1884 * generic_ci_d_compare should be used in VFS' ->d_compare instead.
1888 * @folded_name: Optional pre-folded name under lookup
1892 * Test whether a case-insensitive directory entry matches the filename
1904 const struct super_block *sb = parent->i_sb; in generic_ci_match()
1905 const struct unicode_map *um = sb->s_encoding; in generic_ci_match()
1915 return -EINVAL; in generic_ci_match()
1919 return -ENOMEM; in generic_ci_match()
1931 * Attempt a case-sensitive match first. It is cheaper and in generic_ci_match()
1933 * applications that expect a case-sensitive filesystem. in generic_ci_match()
1936 if (dirent.len == name->len && in generic_ci_match()
1937 !memcmp(name->name, dirent.name, dirent.len)) in generic_ci_match()
1940 if (folded_name->name) in generic_ci_match()
1948 pr_err_ratelimited("Directory contains filename that is invalid UTF-8"); in generic_ci_match()
1963 * generic_set_sb_d_ops - helper for choosing the set of
1964 * filesystem-wide dentry operations for the enabled features
1968 * helper at mount-time to configure default dentry_operations to the
1976 if (sb->s_encoding) { in generic_set_sb_d_ops()
1982 if (sb->s_cop) { in generic_set_sb_d_ops()
1991 * inode_maybe_inc_iversion - increments i_version
2036 } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new)); in inode_maybe_inc_iversion()
2042 * inode_query_iversion - read i_version for later use
2074 } while (!atomic64_try_cmpxchg(&inode->i_version, &cur, new)); in inode_query_iversion()
2082 struct address_space *mapping = iocb->ki_filp->f_mapping; in direct_write_fallback()
2083 loff_t pos = iocb->ki_pos - buffered_written; in direct_write_fallback()
2084 loff_t end = iocb->ki_pos - 1; in direct_write_fallback()
2088 * If the buffered write fallback returned an error, we want to return in direct_write_fallback()
2092 * Note that this differs from normal direct-io semantics, which will in direct_write_fallback()
2093 * return -EFOO even if some bytes were written. in direct_write_fallback()
2109 * bytes which were direct-written in direct_write_fallback()
2111 iocb->ki_pos -= buffered_written; in direct_write_fallback()
2122 * simple_inode_init_ts - initialize the timestamps for a new inode
2148 if (!lockref_get_not_dead(&dentry->d_lockref)) in stashed_dentry_get()
2159 const struct stashed_operations *sops = sb->s_fs_info; in prepare_anon_dentry()
2164 sops->put_data(data); in prepare_anon_dentry()
2165 return ERR_PTR(-ENOMEM); in prepare_anon_dentry()
2168 inode->i_flags |= S_IMMUTABLE; in prepare_anon_dentry()
2169 inode->i_mode = S_IFREG; in prepare_anon_dentry()
2172 ret = sops->init_inode(inode, data); in prepare_anon_dentry()
2179 WARN_ON_ONCE(!S_ISREG(inode->i_mode)); in prepare_anon_dentry()
2184 return ERR_PTR(-ENOMEM); in prepare_anon_dentry()
2188 dentry->d_fsdata = stashed; in prepare_anon_dentry()
2207 if (lockref_get_not_dead(&old->d_lockref)) in stash_dentry()
2217 * path_from_stashed - create path from stashed or new dentry
2220 * @data: data to store in inode->i_private
2229 * Special-purpose helper for nsfs and pidfs.
2237 const struct stashed_operations *sops = mnt->mnt_sb->s_fs_info; in path_from_stashed()
2244 sops->put_data(data); in path_from_stashed()
2249 dentry = prepare_anon_dentry(stashed, mnt->mnt_sb, data); in path_from_stashed()
2254 if (sops->stash_dentry) in path_from_stashed()
2255 res = sops->stash_dentry(stashed, dentry); in path_from_stashed()
2266 path->dentry = res; in path_from_stashed()
2267 path->mnt = mntget(mnt); in path_from_stashed()
2268 VFS_WARN_ON_ONCE(path->dentry->d_fsdata != stashed); in path_from_stashed()
2269 VFS_WARN_ON_ONCE(d_inode(path->dentry)->i_private != data); in path_from_stashed()
2275 struct dentry **stashed = dentry->d_fsdata; in stashed_dentry_prune()
2301 return ERR_PTR(-ENOENT); in simple_start_creating()
2308 if (dentry->d_inode) { in simple_start_creating()
2311 return ERR_PTR(-EEXIST); in simple_start_creating()