ocfs2: call ocfs2_update_inode_fsync_trans when updating any inode
[linux-drm-fsl-dcu.git] / fs / ocfs2 / xattr.c
index 185fa3b7f962a482f06f9926cca946185672c7d6..14b8c46b4fbb721b370ff8692fd926eae0452d19 100644 (file)
@@ -2602,6 +2602,7 @@ int ocfs2_xattr_remove(struct inode *inode, struct buffer_head *di_bh)
        oi->ip_dyn_features &= ~(OCFS2_INLINE_XATTR_FL | OCFS2_HAS_XATTR_FL);
        di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features);
        spin_unlock(&oi->ip_lock);
+       ocfs2_update_inode_fsync_trans(handle, inode, 0);
 
        ocfs2_journal_dirty(handle, di_bh);
 out_commit:
@@ -3200,8 +3201,15 @@ meta_guess:
                        clusters_add += 1;
                }
        } else {
-               meta_add += 1;
                credits += OCFS2_XATTR_BLOCK_CREATE_CREDITS;
+               if (xi->xi_value_len > OCFS2_XATTR_INLINE_SIZE) {
+                       struct ocfs2_extent_list *el = &def_xv.xv.xr_list;
+                       meta_add += ocfs2_extend_meta_needed(el);
+                       credits += ocfs2_calc_extend_credits(inode->i_sb,
+                                                            el);
+               } else {
+                       meta_add += 1;
+               }
        }
 out:
        if (clusters_need)
@@ -3614,6 +3622,7 @@ int ocfs2_xattr_set(struct inode *inode,
        }
 
        ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt);
+       ocfs2_update_inode_fsync_trans(ctxt.handle, inode, 0);
 
        ocfs2_commit_trans(osb, ctxt.handle);
 
@@ -5476,6 +5485,7 @@ static int ocfs2_rm_xattr_cluster(struct inode *inode,
        ret = ocfs2_truncate_log_append(osb, handle, blkno, len);
        if (ret)
                mlog_errno(ret);
+       ocfs2_update_inode_fsync_trans(handle, inode, 0);
 
 out_commit:
        ocfs2_commit_trans(osb, handle);