| .. | .. |
|---|
| 39 | 39 | if (is_inline) |
|---|
| 40 | 40 | kmem_cache_free(sbi->inline_xattr_slab, xattr_addr); |
|---|
| 41 | 41 | else |
|---|
| 42 | | - kvfree(xattr_addr); |
|---|
| 42 | + kfree(xattr_addr); |
|---|
| 43 | 43 | } |
|---|
| 44 | 44 | |
|---|
| 45 | 45 | static int f2fs_xattr_generic_get(const struct xattr_handler *handler, |
|---|
| 46 | 46 | 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) |
|---|
| 48 | 48 | { |
|---|
| 49 | 49 | struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); |
|---|
| 50 | 50 | |
|---|
| .. | .. |
|---|
| 99 | 99 | |
|---|
| 100 | 100 | static int f2fs_xattr_advise_get(const struct xattr_handler *handler, |
|---|
| 101 | 101 | 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) |
|---|
| 103 | 103 | { |
|---|
| 104 | 104 | if (buffer) |
|---|
| 105 | 105 | *((char *)buffer) = F2FS_I(inode)->i_advise; |
|---|
| .. | .. |
|---|
| 175 | 175 | const struct xattr_handler f2fs_xattr_advise_handler = { |
|---|
| 176 | 176 | .name = F2FS_SYSTEM_ADVISE_NAME, |
|---|
| 177 | 177 | .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, |
|---|
| 180 | 180 | }; |
|---|
| 181 | 181 | |
|---|
| 182 | 182 | const struct xattr_handler f2fs_xattr_security_handler = { |
|---|
| .. | .. |
|---|
| 327 | 327 | void *last_addr = NULL; |
|---|
| 328 | 328 | nid_t xnid = F2FS_I(inode)->i_xattr_nid; |
|---|
| 329 | 329 | unsigned int inline_size = inline_xattr_size(inode); |
|---|
| 330 | | - int err = 0; |
|---|
| 330 | + int err; |
|---|
| 331 | 331 | |
|---|
| 332 | 332 | if (!xnid && !inline_size) |
|---|
| 333 | 333 | return -ENODATA; |
|---|
| .. | .. |
|---|
| 425 | 425 | *base_addr = txattr_addr; |
|---|
| 426 | 426 | return 0; |
|---|
| 427 | 427 | fail: |
|---|
| 428 | | - kvfree(txattr_addr); |
|---|
| 428 | + kfree(txattr_addr); |
|---|
| 429 | 429 | return err; |
|---|
| 430 | 430 | } |
|---|
| 431 | 431 | |
|---|
| .. | .. |
|---|
| 486 | 486 | f2fs_wait_on_page_writeback(xpage, NODE, true, true); |
|---|
| 487 | 487 | } else { |
|---|
| 488 | 488 | struct dnode_of_data dn; |
|---|
| 489 | + |
|---|
| 489 | 490 | set_new_dnode(&dn, inode, NULL, NULL, new_nid); |
|---|
| 490 | 491 | xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET); |
|---|
| 491 | 492 | if (IS_ERR(xpage)) { |
|---|
| .. | .. |
|---|
| 515 | 516 | void *buffer, size_t buffer_size, struct page *ipage) |
|---|
| 516 | 517 | { |
|---|
| 517 | 518 | struct f2fs_xattr_entry *entry = NULL; |
|---|
| 518 | | - int error = 0; |
|---|
| 519 | + int error; |
|---|
| 519 | 520 | unsigned int size, len; |
|---|
| 520 | 521 | void *base_addr = NULL; |
|---|
| 521 | 522 | int base_size; |
|---|
| .. | .. |
|---|
| 528 | 529 | if (len > F2FS_NAME_LEN) |
|---|
| 529 | 530 | return -ERANGE; |
|---|
| 530 | 531 | |
|---|
| 531 | | - down_read(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 532 | + f2fs_down_read(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 532 | 533 | error = lookup_all_xattrs(inode, ipage, index, len, name, |
|---|
| 533 | 534 | &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); |
|---|
| 535 | 536 | if (error) |
|---|
| 536 | 537 | return error; |
|---|
| 537 | 538 | |
|---|
| .. | .. |
|---|
| 562 | 563 | struct inode *inode = d_inode(dentry); |
|---|
| 563 | 564 | struct f2fs_xattr_entry *entry; |
|---|
| 564 | 565 | void *base_addr, *last_base_addr; |
|---|
| 565 | | - int error = 0; |
|---|
| 566 | + int error; |
|---|
| 566 | 567 | size_t rest = buffer_size; |
|---|
| 567 | 568 | |
|---|
| 568 | | - down_read(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 569 | + f2fs_down_read(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 569 | 570 | 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); |
|---|
| 571 | 572 | if (error) |
|---|
| 572 | 573 | return error; |
|---|
| 573 | 574 | |
|---|
| .. | .. |
|---|
| 610 | 611 | } |
|---|
| 611 | 612 | error = buffer_size - rest; |
|---|
| 612 | 613 | cleanup: |
|---|
| 613 | | - kvfree(base_addr); |
|---|
| 614 | + kfree(base_addr); |
|---|
| 614 | 615 | return error; |
|---|
| 615 | 616 | } |
|---|
| 616 | 617 | |
|---|
| .. | .. |
|---|
| 632 | 633 | int found, newsize; |
|---|
| 633 | 634 | size_t len; |
|---|
| 634 | 635 | __u32 new_hsize; |
|---|
| 635 | | - int error = 0; |
|---|
| 636 | + int error; |
|---|
| 636 | 637 | |
|---|
| 637 | 638 | if (name == NULL) |
|---|
| 638 | 639 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 673 | 674 | } |
|---|
| 674 | 675 | |
|---|
| 675 | 676 | if (value && f2fs_xattr_value_same(here, value, size)) |
|---|
| 676 | | - goto exit; |
|---|
| 677 | + goto same; |
|---|
| 677 | 678 | } else if ((flags & XATTR_REPLACE)) { |
|---|
| 678 | 679 | error = -ENODATA; |
|---|
| 679 | 680 | goto exit; |
|---|
| .. | .. |
|---|
| 683 | 684 | while (!IS_XATTR_LAST_ENTRY(last)) { |
|---|
| 684 | 685 | if ((void *)(last) + sizeof(__u32) > last_base_addr || |
|---|
| 685 | 686 | (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)); |
|---|
| 686 | 689 | set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); |
|---|
| 687 | 690 | error = -EFSCORRUPTED; |
|---|
| 688 | 691 | goto exit; |
|---|
| .. | .. |
|---|
| 745 | 748 | if (error) |
|---|
| 746 | 749 | goto exit; |
|---|
| 747 | 750 | |
|---|
| 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 | | - } |
|---|
| 753 | 751 | if (index == F2FS_XATTR_INDEX_ENCRYPTION && |
|---|
| 754 | 752 | !strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT)) |
|---|
| 755 | 753 | f2fs_set_encrypted_inode(inode); |
|---|
| 756 | 754 | f2fs_mark_inode_dirty_sync(inode, true); |
|---|
| 757 | 755 | if (!error && S_ISDIR(inode->i_mode)) |
|---|
| 758 | 756 | 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 | + |
|---|
| 759 | 765 | exit: |
|---|
| 760 | | - kvfree(base_addr); |
|---|
| 766 | + kfree(base_addr); |
|---|
| 761 | 767 | return error; |
|---|
| 762 | 768 | } |
|---|
| 763 | 769 | |
|---|
| .. | .. |
|---|
| 784 | 790 | f2fs_balance_fs(sbi, true); |
|---|
| 785 | 791 | |
|---|
| 786 | 792 | f2fs_lock_op(sbi); |
|---|
| 787 | | - down_write(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 793 | + f2fs_down_write(&F2FS_I(inode)->i_xattr_sem); |
|---|
| 788 | 794 | 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); |
|---|
| 790 | 796 | f2fs_unlock_op(sbi); |
|---|
| 791 | 797 | |
|---|
| 792 | 798 | f2fs_update_time(sbi, REQ_TIME); |
|---|