hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/fs/f2fs/xattr.c
....@@ -39,12 +39,12 @@
3939 if (is_inline)
4040 kmem_cache_free(sbi->inline_xattr_slab, xattr_addr);
4141 else
42
- kvfree(xattr_addr);
42
+ kfree(xattr_addr);
4343 }
4444
4545 static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
4646 struct dentry *unused, struct inode *inode,
47
- const char *name, void *buffer, size_t size)
47
+ const char *name, void *buffer, size_t size, int flags)
4848 {
4949 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
5050
....@@ -99,7 +99,7 @@
9999
100100 static int f2fs_xattr_advise_get(const struct xattr_handler *handler,
101101 struct dentry *unused, struct inode *inode,
102
- const char *name, void *buffer, size_t size)
102
+ const char *name, void *buffer, size_t size, int flags)
103103 {
104104 if (buffer)
105105 *((char *)buffer) = F2FS_I(inode)->i_advise;
....@@ -175,8 +175,8 @@
175175 const struct xattr_handler f2fs_xattr_advise_handler = {
176176 .name = F2FS_SYSTEM_ADVISE_NAME,
177177 .flags = F2FS_XATTR_INDEX_ADVISE,
178
- .get = f2fs_xattr_advise_get,
179
- .set = f2fs_xattr_advise_set,
178
+ .get = f2fs_xattr_advise_get,
179
+ .set = f2fs_xattr_advise_set,
180180 };
181181
182182 const struct xattr_handler f2fs_xattr_security_handler = {
....@@ -327,7 +327,7 @@
327327 void *last_addr = NULL;
328328 nid_t xnid = F2FS_I(inode)->i_xattr_nid;
329329 unsigned int inline_size = inline_xattr_size(inode);
330
- int err = 0;
330
+ int err;
331331
332332 if (!xnid && !inline_size)
333333 return -ENODATA;
....@@ -425,7 +425,7 @@
425425 *base_addr = txattr_addr;
426426 return 0;
427427 fail:
428
- kvfree(txattr_addr);
428
+ kfree(txattr_addr);
429429 return err;
430430 }
431431
....@@ -486,6 +486,7 @@
486486 f2fs_wait_on_page_writeback(xpage, NODE, true, true);
487487 } else {
488488 struct dnode_of_data dn;
489
+
489490 set_new_dnode(&dn, inode, NULL, NULL, new_nid);
490491 xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);
491492 if (IS_ERR(xpage)) {
....@@ -515,7 +516,7 @@
515516 void *buffer, size_t buffer_size, struct page *ipage)
516517 {
517518 struct f2fs_xattr_entry *entry = NULL;
518
- int error = 0;
519
+ int error;
519520 unsigned int size, len;
520521 void *base_addr = NULL;
521522 int base_size;
....@@ -528,10 +529,10 @@
528529 if (len > F2FS_NAME_LEN)
529530 return -ERANGE;
530531
531
- down_read(&F2FS_I(inode)->i_xattr_sem);
532
+ f2fs_down_read(&F2FS_I(inode)->i_xattr_sem);
532533 error = lookup_all_xattrs(inode, ipage, index, len, name,
533534 &entry, &base_addr, &base_size, &is_inline);
534
- up_read(&F2FS_I(inode)->i_xattr_sem);
535
+ f2fs_up_read(&F2FS_I(inode)->i_xattr_sem);
535536 if (error)
536537 return error;
537538
....@@ -562,12 +563,12 @@
562563 struct inode *inode = d_inode(dentry);
563564 struct f2fs_xattr_entry *entry;
564565 void *base_addr, *last_base_addr;
565
- int error = 0;
566
+ int error;
566567 size_t rest = buffer_size;
567568
568
- down_read(&F2FS_I(inode)->i_xattr_sem);
569
+ f2fs_down_read(&F2FS_I(inode)->i_xattr_sem);
569570 error = read_all_xattrs(inode, NULL, &base_addr);
570
- up_read(&F2FS_I(inode)->i_xattr_sem);
571
+ f2fs_up_read(&F2FS_I(inode)->i_xattr_sem);
571572 if (error)
572573 return error;
573574
....@@ -610,7 +611,7 @@
610611 }
611612 error = buffer_size - rest;
612613 cleanup:
613
- kvfree(base_addr);
614
+ kfree(base_addr);
614615 return error;
615616 }
616617
....@@ -632,7 +633,7 @@
632633 int found, newsize;
633634 size_t len;
634635 __u32 new_hsize;
635
- int error = 0;
636
+ int error;
636637
637638 if (name == NULL)
638639 return -EINVAL;
....@@ -673,7 +674,7 @@
673674 }
674675
675676 if (value && f2fs_xattr_value_same(here, value, size))
676
- goto exit;
677
+ goto same;
677678 } else if ((flags & XATTR_REPLACE)) {
678679 error = -ENODATA;
679680 goto exit;
....@@ -683,6 +684,8 @@
683684 while (!IS_XATTR_LAST_ENTRY(last)) {
684685 if ((void *)(last) + sizeof(__u32) > last_base_addr ||
685686 (void *)XATTR_NEXT_ENTRY(last) > last_base_addr) {
687
+ f2fs_err(F2FS_I_SB(inode), "inode (%lu) has invalid last xattr entry, entry_size: %zu",
688
+ inode->i_ino, ENTRY_SIZE(last));
686689 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
687690 error = -EFSCORRUPTED;
688691 goto exit;
....@@ -745,19 +748,22 @@
745748 if (error)
746749 goto exit;
747750
748
- if (is_inode_flag_set(inode, FI_ACL_MODE)) {
749
- inode->i_mode = F2FS_I(inode)->i_acl_mode;
750
- inode->i_ctime = current_time(inode);
751
- clear_inode_flag(inode, FI_ACL_MODE);
752
- }
753751 if (index == F2FS_XATTR_INDEX_ENCRYPTION &&
754752 !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT))
755753 f2fs_set_encrypted_inode(inode);
756754 f2fs_mark_inode_dirty_sync(inode, true);
757755 if (!error && S_ISDIR(inode->i_mode))
758756 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP);
757
+
758
+same:
759
+ if (is_inode_flag_set(inode, FI_ACL_MODE)) {
760
+ inode->i_mode = F2FS_I(inode)->i_acl_mode;
761
+ inode->i_ctime = current_time(inode);
762
+ clear_inode_flag(inode, FI_ACL_MODE);
763
+ }
764
+
759765 exit:
760
- kvfree(base_addr);
766
+ kfree(base_addr);
761767 return error;
762768 }
763769
....@@ -784,9 +790,9 @@
784790 f2fs_balance_fs(sbi, true);
785791
786792 f2fs_lock_op(sbi);
787
- down_write(&F2FS_I(inode)->i_xattr_sem);
793
+ f2fs_down_write(&F2FS_I(inode)->i_xattr_sem);
788794 err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
789
- up_write(&F2FS_I(inode)->i_xattr_sem);
795
+ f2fs_up_write(&F2FS_I(inode)->i_xattr_sem);
790796 f2fs_unlock_op(sbi);
791797
792798 f2fs_update_time(sbi, REQ_TIME);