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 f2fs_kmem_cache_alloc(sbi->inline_xattr_slab, in xattr_alloc()
41 kmem_cache_free(sbi->inline_xattr_slab, xattr_addr); in xattr_free()
48 const char *name, void *buffer, size_t size) in f2fs_xattr_generic_get() argument
50 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); in f2fs_xattr_generic_get()
52 switch (handler->flags) { in f2fs_xattr_generic_get()
55 return -EOPNOTSUPP; in f2fs_xattr_generic_get()
61 return -EINVAL; in f2fs_xattr_generic_get()
63 return f2fs_getxattr(inode, handler->flags, name, in f2fs_xattr_generic_get()
70 const char *name, const void *value, in f2fs_xattr_generic_set() argument
73 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); in f2fs_xattr_generic_set()
75 switch (handler->flags) { in f2fs_xattr_generic_set()
78 return -EOPNOTSUPP; in f2fs_xattr_generic_set()
84 return -EINVAL; in f2fs_xattr_generic_set()
86 return f2fs_setxattr(inode, handler->flags, name, in f2fs_xattr_generic_set()
92 struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb); in f2fs_xattr_user_list()
104 const char *name, void *buffer, size_t size) in f2fs_xattr_advise_get() argument
107 *((char *)buffer) = F2FS_I(inode)->i_advise; in f2fs_xattr_advise_get()
114 const char *name, const void *value, in f2fs_xattr_advise_set() argument
117 unsigned char old_advise = F2FS_I(inode)->i_advise; in f2fs_xattr_advise_set()
121 return -EPERM; in f2fs_xattr_advise_set()
123 return -EINVAL; in f2fs_xattr_advise_set()
127 return -EINVAL; in f2fs_xattr_advise_set()
132 F2FS_I(inode)->i_advise = new_advise; in f2fs_xattr_advise_set()
144 for (xattr = xattr_array; xattr->name != NULL; xattr++) { in f2fs_initxattrs()
146 xattr->name, xattr->value, in f2fs_initxattrs()
147 xattr->value_len, (struct page *)page, 0); in f2fs_initxattrs()
179 .name = F2FS_SYSTEM_ADVISE_NAME,
231 int index, size_t len, const char *name) in __find_xattr() argument
233 struct f2fs_xattr_entry *entry; in __find_xattr() local
235 list_for_each_xattr(entry, base_addr) { in __find_xattr()
236 if ((void *)(entry) + sizeof(__u32) > last_base_addr || in __find_xattr()
237 (void *)XATTR_NEXT_ENTRY(entry) > last_base_addr) { in __find_xattr()
239 *last_addr = entry; in __find_xattr()
243 if (entry->e_name_index != index) in __find_xattr()
245 if (entry->e_name_len != len) in __find_xattr()
247 if (!memcmp(entry->e_name, name, len)) in __find_xattr()
250 return entry; in __find_xattr()
255 size_t len, const char *name) in __find_inline_xattr() argument
257 struct f2fs_xattr_entry *entry; in __find_inline_xattr() local
261 entry = __find_xattr(base_addr, max_addr, last_addr, index, len, name); in __find_inline_xattr()
262 if (!entry) in __find_inline_xattr()
265 /* inline xattr header or entry across max inline xattr size */ in __find_inline_xattr()
266 if (IS_XATTR_LAST_ENTRY(entry) && in __find_inline_xattr()
267 (void *)entry + sizeof(__u32) > max_addr) { in __find_inline_xattr()
268 *last_addr = entry; in __find_inline_xattr()
271 return entry; in __find_inline_xattr()
285 page = f2fs_get_node_page(sbi, inode->i_ino); in read_inline_xattr()
300 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in read_xattr_block()
319 const char *name, struct f2fs_xattr_entry **xe, in lookup_all_xattrs() argument
325 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in lookup_all_xattrs()
330 return -ENODATA; in lookup_all_xattrs()
335 return -ENOMEM; in lookup_all_xattrs()
346 index, len, name); in lookup_all_xattrs()
361 cur_addr = XATTR_HDR(last_addr) - 1; in lookup_all_xattrs()
365 *xe = __find_xattr(cur_addr, last_txattr_addr, NULL, index, len, name); in lookup_all_xattrs()
368 inode->i_ino); in lookup_all_xattrs()
370 err = -ENODATA; in lookup_all_xattrs()
377 err = -ENODATA; in lookup_all_xattrs()
392 nid_t xnid = F2FS_I(inode)->i_xattr_nid; in read_all_xattrs()
401 return -ENOMEM; in read_all_xattrs()
420 if (le32_to_cpu(header->h_magic) != F2FS_XATTR_MAGIC) { in read_all_xattrs()
421 header->h_magic = cpu_to_le32(F2FS_XATTR_MAGIC); in read_all_xattrs()
422 header->h_refcount = cpu_to_le32(1); in read_all_xattrs()
443 if (hsize > inline_size && !F2FS_I(inode)->i_xattr_nid) in write_all_xattrs()
445 return -ENOSPC; in write_all_xattrs()
452 in_page = f2fs_get_node_page(sbi, inode->i_ino); in write_all_xattrs()
477 if (F2FS_I(inode)->i_xattr_nid) { in write_all_xattrs()
478 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()
532 f2fs_down_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_getxattr()
533 error = lookup_all_xattrs(inode, ipage, index, len, name, in f2fs_getxattr()
534 &entry, &base_addr, &base_size, &is_inline); in f2fs_getxattr()
536 f2fs_up_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_getxattr()
540 size = le16_to_cpu(entry->e_value_size); in f2fs_getxattr()
543 error = -ERANGE; in f2fs_getxattr()
548 char *pval = entry->e_name + entry->e_name_len; in f2fs_getxattr()
550 if (base_size - (pval - (char *)base_addr) < size) { in f2fs_getxattr()
551 error = -ERANGE; in f2fs_getxattr()
565 struct f2fs_xattr_entry *entry; in f2fs_listxattr() local
570 f2fs_down_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_listxattr()
572 f2fs_up_read(&F2FS_I(inode)->i_xattr_sem); in f2fs_listxattr()
578 list_for_each_xattr(entry, base_addr) { in f2fs_listxattr()
583 prefix = f2fs_xattr_prefix(entry->e_name_index, dentry); in f2fs_listxattr()
585 if ((void *)(entry) + sizeof(__u32) > last_base_addr || in f2fs_listxattr()
586 (void *)XATTR_NEXT_ENTRY(entry) > last_base_addr) { in f2fs_listxattr()
588 inode->i_ino); in f2fs_listxattr()
599 size = prefix_len + entry->e_name_len + 1; in f2fs_listxattr()
602 error = -ERANGE; in f2fs_listxattr()
607 memcpy(buffer, entry->e_name, entry->e_name_len); in f2fs_listxattr()
608 buffer += entry->e_name_len; in f2fs_listxattr()
611 rest -= size; in f2fs_listxattr()
613 error = buffer_size - rest; in f2fs_listxattr()
619 static bool f2fs_xattr_value_same(struct f2fs_xattr_entry *entry, in f2fs_xattr_value_same() argument
622 void *pval = entry->e_name + entry->e_name_len; in f2fs_xattr_value_same()
624 return (le16_to_cpu(entry->e_value_size) == size) && in f2fs_xattr_value_same()
629 const char *name, const void *value, size_t size, in __f2fs_setxattr() argument
640 if (name == NULL) in __f2fs_setxattr()
641 return -EINVAL; in __f2fs_setxattr()
646 len = strlen(name); in __f2fs_setxattr()
649 return -ERANGE; in __f2fs_setxattr()
652 return -E2BIG; in __f2fs_setxattr()
660 /* find entry with wanted name. */ in __f2fs_setxattr()
661 here = __find_xattr(base_addr, last_base_addr, NULL, index, len, name); in __f2fs_setxattr()
663 if (!F2FS_I(inode)->i_xattr_nid) { in __f2fs_setxattr()
667 inode->i_ino, error); in __f2fs_setxattr()
674 inode->i_ino); in __f2fs_setxattr()
676 error = -EFSCORRUPTED; in __f2fs_setxattr()
686 error = -EEXIST; in __f2fs_setxattr()
693 error = -ENODATA; in __f2fs_setxattr()
701 f2fs_err(F2FS_I_SB(inode), "inode (%lu) has invalid last xattr entry, entry_size: %zu", in __f2fs_setxattr()
702 inode->i_ino, ENTRY_SIZE(last)); in __f2fs_setxattr()
704 error = -EFSCORRUPTED; in __f2fs_setxattr()
721 free = MIN_OFFSET(inode) - ((char *)last - (char *)base_addr); in __f2fs_setxattr()
726 error = -E2BIG; in __f2fs_setxattr()
731 /* 2. Remove old entry */ in __f2fs_setxattr()
734 * If entry is found, remove old entry. in __f2fs_setxattr()
740 memmove(here, next, (char *)last - (char *)next); in __f2fs_setxattr()
741 last = (struct f2fs_xattr_entry *)((char *)last - oldsize); in __f2fs_setxattr()
745 new_hsize = (char *)last - (char *)base_addr; in __f2fs_setxattr()
747 /* 3. Write new entry */ in __f2fs_setxattr()
751 * Before we come here, old entry is removed. in __f2fs_setxattr()
752 * We just write new entry. in __f2fs_setxattr()
754 last->e_name_index = index; in __f2fs_setxattr()
755 last->e_name_len = len; in __f2fs_setxattr()
756 memcpy(last->e_name, name, len); in __f2fs_setxattr()
757 pval = last->e_name + len; in __f2fs_setxattr()
759 last->e_value_size = cpu_to_le16(size); in __f2fs_setxattr()
774 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT)) in __f2fs_setxattr()
777 if (!S_ISDIR(inode->i_mode)) in __f2fs_setxattr()
787 f2fs_add_ino_entry(sbi, inode->i_ino, XATTR_DIR_INO); in __f2fs_setxattr()
790 inode->i_mode = F2FS_I(inode)->i_acl_mode; in __f2fs_setxattr()
801 int f2fs_setxattr(struct inode *inode, int index, const char *name, in f2fs_setxattr() argument
809 return -EIO; in f2fs_setxattr()
811 return -ENOSPC; in f2fs_setxattr()
819 return __f2fs_setxattr(inode, index, name, value, in f2fs_setxattr()
824 f2fs_down_write(&F2FS_I(inode)->i_xattr_sem); in f2fs_setxattr()
825 err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags); in f2fs_setxattr()
826 f2fs_up_write(&F2FS_I(inode)->i_xattr_sem); in f2fs_setxattr()
835 dev_t dev = sbi->sb->s_bdev->bd_dev; in f2fs_init_xattr_caches()
838 sprintf(slab_name, "f2fs_xattr_entry-%u:%u", MAJOR(dev), MINOR(dev)); in f2fs_init_xattr_caches()
840 sbi->inline_xattr_slab_size = F2FS_OPTION(sbi).inline_xattr_size * in f2fs_init_xattr_caches()
843 sbi->inline_xattr_slab = f2fs_kmem_cache_create(slab_name, in f2fs_init_xattr_caches()
844 sbi->inline_xattr_slab_size); in f2fs_init_xattr_caches()
845 if (!sbi->inline_xattr_slab) in f2fs_init_xattr_caches()
846 return -ENOMEM; in f2fs_init_xattr_caches()
853 kmem_cache_destroy(sbi->inline_xattr_slab); in f2fs_destroy_xattr_caches()