struct xfs_trans        *tp;
        int                     error = 0;
        int                     log_flushed = 0;
+       xfs_lsn_t               lsn = 0;
 
        trace_xfs_file_fsync(ip);
 
                 */
                xfs_trans_ijoin(tp, ip);
                xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
-               xfs_trans_set_sync(tp);
-               error = _xfs_trans_commit(tp, 0, &log_flushed);
+               error = xfs_trans_commit(tp, 0);
 
+               lsn = ip->i_itemp->ili_last_lsn;
                xfs_iunlock(ip, XFS_ILOCK_EXCL);
        } else {
                /*
                 * disk yet, the inode will be still be pinned.  If it is,
                 * force the log.
                 */
-               if (xfs_ipincount(ip)) {
-                       error = _xfs_log_force_lsn(mp,
-                                       ip->i_itemp->ili_last_lsn,
-                                       XFS_LOG_SYNC, &log_flushed);
-               }
+               if (xfs_ipincount(ip))
+                       lsn = ip->i_itemp->ili_last_lsn;
                xfs_iunlock(ip, XFS_ILOCK_SHARED);
        }
 
+       if (!error && lsn)
+               error = _xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, &log_flushed);
+
        /*
         * If we only have a single device, and the log force about was
         * a no-op we might have to flush the data device cache here.
 
 }
 
 /*
- * xfs_trans_commit
- *
- * Commit the given transaction to the log a/synchronously.
+ * Commit the given transaction to the log.
  *
  * XFS disk error handling mechanism is not based on a typical
  * transaction abort mechanism. Logically after the filesystem
  * Do not reference the transaction structure after this call.
  */
 int
-_xfs_trans_commit(
+xfs_trans_commit(
        struct xfs_trans        *tp,
-       uint                    flags,
-       int                     *log_flushed)
+       uint                    flags)
 {
        struct xfs_mount        *mp = tp->t_mountp;
        xfs_lsn_t               commit_lsn = -1;
        if (sync) {
                if (!error) {
                        error = _xfs_log_force_lsn(mp, commit_lsn,
-                                     XFS_LOG_SYNC, log_flushed);
+                                     XFS_LOG_SYNC, NULL);
                }
                XFS_STATS_INC(xs_trans_sync);
        } else {
 
                                         struct xfs_efd_log_item *,
                                         xfs_fsblock_t,
                                         xfs_extlen_t);
-int            _xfs_trans_commit(xfs_trans_t *,
-                                 uint flags,
-                                 int *);
-#define xfs_trans_commit(tp, flags)    _xfs_trans_commit(tp, flags, NULL)
+int            xfs_trans_commit(xfs_trans_t *, uint flags);
 void           xfs_trans_cancel(xfs_trans_t *, int);
 int            xfs_trans_ail_init(struct xfs_mount *);
 void           xfs_trans_ail_destroy(struct xfs_mount *);