diff options
Diffstat (limited to 'fs/ceph/xattr.c')
| -rw-r--r-- | fs/ceph/xattr.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 8c9eba6ef9df..f2b628696180 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c | |||
| @@ -703,6 +703,7 @@ int ceph_setxattr(struct dentry *dentry, const char *name, | |||
| 703 | struct ceph_inode_xattr *xattr = NULL; | 703 | struct ceph_inode_xattr *xattr = NULL; |
| 704 | int issued; | 704 | int issued; |
| 705 | int required_blob_size; | 705 | int required_blob_size; |
| 706 | int dirty; | ||
| 706 | 707 | ||
| 707 | if (ceph_snap(inode) != CEPH_NOSNAP) | 708 | if (ceph_snap(inode) != CEPH_NOSNAP) |
| 708 | return -EROFS; | 709 | return -EROFS; |
| @@ -763,11 +764,12 @@ retry: | |||
| 763 | dout("setxattr %p issued %s\n", inode, ceph_cap_string(issued)); | 764 | dout("setxattr %p issued %s\n", inode, ceph_cap_string(issued)); |
| 764 | err = __set_xattr(ci, newname, name_len, newval, | 765 | err = __set_xattr(ci, newname, name_len, newval, |
| 765 | val_len, 1, 1, 1, &xattr); | 766 | val_len, 1, 1, 1, &xattr); |
| 766 | __ceph_mark_dirty_caps(ci, CEPH_CAP_XATTR_EXCL); | 767 | dirty = __ceph_mark_dirty_caps(ci, CEPH_CAP_XATTR_EXCL); |
| 767 | ci->i_xattrs.dirty = true; | 768 | ci->i_xattrs.dirty = true; |
| 768 | inode->i_ctime = CURRENT_TIME; | 769 | inode->i_ctime = CURRENT_TIME; |
| 769 | spin_unlock(&inode->i_lock); | 770 | spin_unlock(&inode->i_lock); |
| 770 | 771 | if (dirty) | |
| 772 | __mark_inode_dirty(inode, dirty); | ||
| 771 | return err; | 773 | return err; |
| 772 | 774 | ||
| 773 | do_sync: | 775 | do_sync: |
| @@ -810,6 +812,7 @@ int ceph_removexattr(struct dentry *dentry, const char *name) | |||
| 810 | struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode); | 812 | struct ceph_vxattr_cb *vxattrs = ceph_inode_vxattrs(inode); |
| 811 | int issued; | 813 | int issued; |
| 812 | int err; | 814 | int err; |
| 815 | int dirty; | ||
| 813 | 816 | ||
| 814 | if (ceph_snap(inode) != CEPH_NOSNAP) | 817 | if (ceph_snap(inode) != CEPH_NOSNAP) |
| 815 | return -EROFS; | 818 | return -EROFS; |
| @@ -833,12 +836,13 @@ int ceph_removexattr(struct dentry *dentry, const char *name) | |||
| 833 | goto do_sync; | 836 | goto do_sync; |
| 834 | 837 | ||
| 835 | err = __remove_xattr_by_name(ceph_inode(inode), name); | 838 | err = __remove_xattr_by_name(ceph_inode(inode), name); |
| 836 | __ceph_mark_dirty_caps(ci, CEPH_CAP_XATTR_EXCL); | 839 | dirty = __ceph_mark_dirty_caps(ci, CEPH_CAP_XATTR_EXCL); |
| 837 | ci->i_xattrs.dirty = true; | 840 | ci->i_xattrs.dirty = true; |
| 838 | inode->i_ctime = CURRENT_TIME; | 841 | inode->i_ctime = CURRENT_TIME; |
| 839 | 842 | ||
| 840 | spin_unlock(&inode->i_lock); | 843 | spin_unlock(&inode->i_lock); |
| 841 | 844 | if (dirty) | |
| 845 | __mark_inode_dirty(inode, dirty); | ||
| 842 | return err; | 846 | return err; |
| 843 | do_sync: | 847 | do_sync: |
| 844 | spin_unlock(&inode->i_lock); | 848 | spin_unlock(&inode->i_lock); |
