rk: revert 20f3d0b+v3.0.66 to v3.0
[firefly-linux-kernel-4.4.55.git] / fs / xfs / xfs_attr.c
index 99d4011602e06f697bacad9f24bd6848a5db3a5a..01d2072fb6d4580ca6ceb7f77a20eed67c94cf1c 100644 (file)
@@ -822,9 +822,17 @@ xfs_attr_inactive(xfs_inode_t *dp)
        error = xfs_attr_root_inactive(&trans, dp);
        if (error)
                goto out;
-
-       error = xfs_itruncate_finish(&trans, dp, 0LL, XFS_ATTR_FORK, 0);
-       if (error)
+       /*
+        * signal synchronous inactive transactions unless this
+        * is a synchronous mount filesystem in which case we
+        * know that we're here because we've been called out of
+        * xfs_inactive which means that the last reference is gone
+        * and the unlink transaction has already hit the disk so
+        * async inactive transactions are safe.
+        */
+       if ((error = xfs_itruncate_finish(&trans, dp, 0LL, XFS_ATTR_FORK,
+                               (!(mp->m_flags & XFS_MOUNT_WSYNC)
+                                ? 1 : 0))))
                goto out;
 
        /*