Lines Matching +full:entry +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0
10 * Copyright (C) 2001-2003 Andreas Gruenbacher <agruen@suse.de>
28 if (likely(size == sbi->inline_xattr_slab_size)) { in xattr_alloc()
30 return kmem_cache_zalloc(sbi->inline_xattr_slab, GFP_NOFS); in xattr_alloc()
40 kmem_cache_free(sbi->inline_xattr_slab, xattr_addr); in xattr_free()
47 const char *name, void *buffer, size_t size) in f2fs_xattr_generic_get() argument
49 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); in f2fs_xattr_generic_get()
51 switch (handler->flags) { in f2fs_xattr_generic_get()
54 return -EOPNOTSUPP; in f2fs_xattr_generic_get()
60 return -EINVAL; in f2fs_xattr_generic_get()
62 return f2fs_getxattr(inode, handler->flags, name, in f2fs_xattr_generic_get()
68 const char *name, const void *value, in f2fs_xattr_generic_set() argument
71 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); in f2fs_xattr_generic_set()
73 switch (handler->flags) { in f2fs_xattr_generic_set()
76 return -EOPNOTSUPP; in f2fs_xattr_generic_set()
82 return -EINVAL; in f2fs_xattr_generic_set()
84 return f2fs_setxattr(inode, handler->flags, name, in f2fs_xattr_generic_set()
90 struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb); in f2fs_xattr_user_list()
102 const char *name, void *buffer, size_t size) in f2fs_xattr_advise_get() argument
105 *((char *)buffer) = F2FS_I(inode)->i_advise; in f2fs_xattr_advise_get()
111 const char *name, const void *value, in f2fs_xattr_advise_set() argument
114 unsigned char old_advise = F2FS_I(inode)->i_advise; in f2fs_xattr_advise_set()
118 return -EPERM; in f2fs_xattr_advise_set()
120 return -EINVAL; in f2fs_xattr_advise_set()
124 return -EINVAL; in f2fs_xattr_advise_set()
129 F2FS_I(inode)->i_advise = new_advise; in f2fs_xattr_advise_set()
141 for (xattr = xattr_array; xattr->name != NULL; xattr++) { in f2fs_initxattrs()
143 xattr->name, xattr->value, in f2fs_initxattrs()
144 xattr->value_len, (struct page *)page, 0); in f2fs_initxattrs()
176 .name = F2FS_SYSTEM_ADVISE_NAME,
227 size_t len, const char *name) in __find_xattr() argument
229 struct f2fs_xattr_entry *entry; in __find_xattr() local
231 list_for_each_xattr(entry, base_addr) { in __find_xattr()
232 if ((void *)(entry) + sizeof(__u32) > last_base_addr || in __find_xattr()
233 (void *)XATTR_NEXT_ENTRY(entry) > last_base_addr) in __find_xattr()
236 if (entry->e_name_index != index) in __find_xattr()
238 if (entry->e_name_len != len) in __find_xattr()
240 if (!memcmp(entry->e_name, name, len)) in __find_xattr()
243 return entry; in __find_xattr()
248 size_t len, const char *name) in __find_inline_xattr() argument
250 struct f2fs_xattr_entry *entry; in __find_inline_xattr() local
254 list_for_each_xattr(entry, base_addr) { in __find_inline_xattr()
255 if ((void *)entry + sizeof(__u32) > max_addr || in __find_inline_xattr()
256 (void *)XATTR_NEXT_ENTRY(entry) > max_addr) { in __find_inline_xattr()
257 *last_addr = entry; in __find_inline_xattr()
260 if (entry->e_name_index != index) in __find_inline_xattr()
262 if (entry->e_name_len != len) in __find_inline_xattr()
264 if (!memcmp(entry->e_name, name, len)) in __find_inline_xattr()
268 /* inline xattr header or entry across max inline xattr size */ in __find_inline_xattr()
269 if (IS_XATTR_LAST_ENTRY(entry) && in __find_inline_xattr()
270 (void *)entry + sizeof(__u32) > max_addr) { in __find_inline_xattr()
271 *last_addr = entry; in __find_inline_xattr()
274 return entry; in __find_inline_xattr()
288 page = f2fs_get_node_page(sbi, inode->i_ino); in read_inline_xattr()
303 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in read_xattr_block()
322 const char *name, struct f2fs_xattr_entry **xe, in lookup_all_xattrs() argument
328 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in lookup_all_xattrs()
333 return -ENODATA; in lookup_all_xattrs()
338 return -ENOMEM; in lookup_all_xattrs()
349 index, len, name); in lookup_all_xattrs()
364 cur_addr = XATTR_HDR(last_addr) - 1; in lookup_all_xattrs()
368 *xe = __find_xattr(cur_addr, last_txattr_addr, index, len, name); in lookup_all_xattrs()
371 inode->i_ino); in lookup_all_xattrs()
373 err = -EFSCORRUPTED; in lookup_all_xattrs()
378 err = -ENODATA; in lookup_all_xattrs()
393 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in read_all_xattrs()
402 return -ENOMEM; in read_all_xattrs()
421 if (le32_to_cpu(header->h_magic) != F2FS_XATTR_MAGIC) { in read_all_xattrs()
422 header->h_magic = cpu_to_le32(F2FS_XATTR_MAGIC); in read_all_xattrs()
423 header->h_refcount = cpu_to_le32(1); in read_all_xattrs()
444 if (hsize > inline_size && !F2FS_I(inode)->i_xattr_nid) in write_all_xattrs()
446 return -ENOSPC; in write_all_xattrs()
453 in_page = f2fs_get_node_page(sbi, inode->i_ino); in write_all_xattrs()
478 if (F2FS_I(inode)->i_xattr_nid) { in write_all_xattrs()
479 xpage = f2fs_get_node_page(sbi, F2FS_I(inode)->i_xattr_nid); in write_all_xattrs()
514 int f2fs_getxattr(struct inode *inode, int index, const char *name, in f2fs_getxattr() argument
517 struct f2fs_xattr_entry *entry = NULL; in f2fs_getxattr() local
524 if (name == NULL) in f2fs_getxattr()
525 return -EINVAL; in f2fs_getxattr()
527 len = strlen(name); in f2fs_getxattr()
529 return -ERANGE; in f2fs_getxattr()
531 down_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_getxattr()
532 error = lookup_all_xattrs(inode, ipage, index, len, name, in f2fs_getxattr()
533 &entry, &base_addr, &base_size, &is_inline); in f2fs_getxattr()
534 up_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_getxattr()
538 size = le16_to_cpu(entry->e_value_size); in f2fs_getxattr()
541 error = -ERANGE; in f2fs_getxattr()
546 char *pval = entry->e_name + entry->e_name_len; in f2fs_getxattr()
548 if (base_size - (pval - (char *)base_addr) < size) { in f2fs_getxattr()
549 error = -ERANGE; in f2fs_getxattr()
563 struct f2fs_xattr_entry *entry; in f2fs_listxattr() local
568 down_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_listxattr()
570 up_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_listxattr()
576 list_for_each_xattr(entry, base_addr) { in f2fs_listxattr()
578 f2fs_xattr_handler(entry->e_name_index); in f2fs_listxattr()
583 if ((void *)(entry) + sizeof(__u32) > last_base_addr || in f2fs_listxattr()
584 (void *)XATTR_NEXT_ENTRY(entry) > last_base_addr) { in f2fs_listxattr()
586 inode->i_ino); in f2fs_listxattr()
588 error = -EFSCORRUPTED; in f2fs_listxattr()
592 if (!handler || (handler->list && !handler->list(dentry))) in f2fs_listxattr()
597 size = prefix_len + entry->e_name_len + 1; in f2fs_listxattr()
600 error = -ERANGE; in f2fs_listxattr()
605 memcpy(buffer, entry->e_name, entry->e_name_len); in f2fs_listxattr()
606 buffer += entry->e_name_len; in f2fs_listxattr()
609 rest -= size; in f2fs_listxattr()
611 error = buffer_size - rest; in f2fs_listxattr()
617 static bool f2fs_xattr_value_same(struct f2fs_xattr_entry *entry, in f2fs_xattr_value_same() argument
620 void *pval = entry->e_name + entry->e_name_len; in f2fs_xattr_value_same()
622 return (le16_to_cpu(entry->e_value_size) == size) && in f2fs_xattr_value_same()
627 const char *name, const void *value, size_t size, in __f2fs_setxattr() argument
637 if (name == NULL) in __f2fs_setxattr()
638 return -EINVAL; in __f2fs_setxattr()
643 len = strlen(name); in __f2fs_setxattr()
646 return -ERANGE; in __f2fs_setxattr()
649 return -E2BIG; in __f2fs_setxattr()
657 /* find entry with wanted name. */ in __f2fs_setxattr()
658 here = __find_xattr(base_addr, last_base_addr, index, len, name); in __f2fs_setxattr()
661 inode->i_ino); in __f2fs_setxattr()
663 error = -EFSCORRUPTED; in __f2fs_setxattr()
671 error = -EEXIST; in __f2fs_setxattr()
678 error = -ENODATA; in __f2fs_setxattr()
695 free = MIN_OFFSET(inode) - ((char *)last - (char *)base_addr); in __f2fs_setxattr()
700 error = -E2BIG; in __f2fs_setxattr()
705 /* 2. Remove old entry */ in __f2fs_setxattr()
708 * If entry is found, remove old entry. in __f2fs_setxattr()
714 memmove(here, next, (char *)last - (char *)next); in __f2fs_setxattr()
715 last = (struct f2fs_xattr_entry *)((char *)last - oldsize); in __f2fs_setxattr()
719 new_hsize = (char *)last - (char *)base_addr; in __f2fs_setxattr()
721 /* 3. Write new entry */ in __f2fs_setxattr()
725 * Before we come here, old entry is removed. in __f2fs_setxattr()
726 * We just write new entry. in __f2fs_setxattr()
728 last->e_name_index = index; in __f2fs_setxattr()
729 last->e_name_len = len; in __f2fs_setxattr()
730 memcpy(last->e_name, name, len); in __f2fs_setxattr()
731 pval = last->e_name + len; in __f2fs_setxattr()
733 last->e_value_size = cpu_to_le16(size); in __f2fs_setxattr()
742 inode->i_mode = F2FS_I(inode)->i_acl_mode; in __f2fs_setxattr()
743 inode->i_ctime = current_time(inode); in __f2fs_setxattr()
747 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT)) in __f2fs_setxattr()
750 if (!error && S_ISDIR(inode->i_mode)) in __f2fs_setxattr()
757 int f2fs_setxattr(struct inode *inode, int index, const char *name, in f2fs_setxattr() argument
765 return -EIO; in f2fs_setxattr()
767 return -ENOSPC; in f2fs_setxattr()
775 return __f2fs_setxattr(inode, index, name, value, in f2fs_setxattr()
780 down_write(&F2FS_I(inode)->i_xattr_sem); in f2fs_setxattr()
781 err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags); in f2fs_setxattr()
782 up_write(&F2FS_I(inode)->i_xattr_sem); in f2fs_setxattr()
791 dev_t dev = sbi->sb->s_bdev->bd_dev; in f2fs_init_xattr_caches()
794 sprintf(slab_name, "f2fs_xattr_entry-%u:%u", MAJOR(dev), MINOR(dev)); in f2fs_init_xattr_caches()
796 sbi->inline_xattr_slab_size = F2FS_OPTION(sbi).inline_xattr_size * in f2fs_init_xattr_caches()
799 sbi->inline_xattr_slab = f2fs_kmem_cache_create(slab_name, in f2fs_init_xattr_caches()
800 sbi->inline_xattr_slab_size); in f2fs_init_xattr_caches()
801 if (!sbi->inline_xattr_slab) in f2fs_init_xattr_caches()
802 return -ENOMEM; in f2fs_init_xattr_caches()
809 kmem_cache_destroy(sbi->inline_xattr_slab); in f2fs_destroy_xattr_caches()