Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d7b5a11 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs

* 'for-linus' of git://oss.sgi.com/xfs/xfs:
  xfs: fix ->write_inode return values
  xfs: fix xfs_mark_inode_dirty during umount
  xfs: deprecate the nodelaylog mount option
parents b79c4f75 58d84c4e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -592,3 +592,11 @@ Why: In 3.0, we can now autodetect internal 3G device and already have
	interface that was used by acer-wmi driver. It will replaced by
	information log when acer-wmi initial.
Who:    Lee, Chun-Yi <jlee@novell.com>

----------------------------
What:	The XFS nodelaylog mount option
When:	3.3
Why:	The delaylog mode that has been the default since 2.6.39 has proven
	stable, and the old code is in the way of additional improvements in
	the log code.
Who:	Christoph Hellwig <hch@lst.de>
+11 −3
Original line number Diff line number Diff line
@@ -70,9 +70,8 @@ xfs_synchronize_times(
}

/*
 * If the linux inode is valid, mark it dirty.
 * Used when committing a dirty inode into a transaction so that
 * the inode will get written back by the linux code
 * If the linux inode is valid, mark it dirty, else mark the dirty state
 * in the XFS inode to make sure we pick it up when reclaiming the inode.
 */
void
xfs_mark_inode_dirty_sync(
@@ -82,6 +81,10 @@ xfs_mark_inode_dirty_sync(

	if (!(inode->i_state & (I_WILL_FREE|I_FREEING)))
		mark_inode_dirty_sync(inode);
	else {
		barrier();
		ip->i_update_core = 1;
	}
}

void
@@ -92,6 +95,11 @@ xfs_mark_inode_dirty(

	if (!(inode->i_state & (I_WILL_FREE|I_FREEING)))
		mark_inode_dirty(inode);
	else {
		barrier();
		ip->i_update_core = 1;
	}

}

/*
+11 −25
Original line number Diff line number Diff line
@@ -356,6 +356,8 @@ xfs_parseargs(
			mp->m_flags |= XFS_MOUNT_DELAYLOG;
		} else if (!strcmp(this_char, MNTOPT_NODELAYLOG)) {
			mp->m_flags &= ~XFS_MOUNT_DELAYLOG;
			xfs_warn(mp,
	"nodelaylog is deprecated and will be removed in Linux 3.3");
		} else if (!strcmp(this_char, MNTOPT_DISCARD)) {
			mp->m_flags |= XFS_MOUNT_DISCARD;
		} else if (!strcmp(this_char, MNTOPT_NODISCARD)) {
@@ -877,33 +879,17 @@ xfs_log_inode(
	struct xfs_trans	*tp;
	int			error;

	xfs_iunlock(ip, XFS_ILOCK_SHARED);
	tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS);
	error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0);

	if (error) {
		xfs_trans_cancel(tp, 0);
		/* we need to return with the lock hold shared */
		xfs_ilock(ip, XFS_ILOCK_SHARED);
		return error;
	}

	xfs_ilock(ip, XFS_ILOCK_EXCL);

	/*
	 * Note - it's possible that we might have pushed ourselves out of the
	 * way during trans_reserve which would flush the inode.  But there's
	 * no guarantee that the inode buffer has actually gone out yet (it's
	 * delwri).  Plus the buffer could be pinned anyway if it's part of
	 * an inode in another recent transaction.  So we play it safe and
	 * fire off the transaction anyway.
	 */
	xfs_trans_ijoin(tp, ip);
	xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL);
	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
	error = xfs_trans_commit(tp, 0);
	xfs_ilock_demote(ip, XFS_ILOCK_EXCL);

	return error;
	return xfs_trans_commit(tp, 0);
}

STATIC int
@@ -918,7 +904,9 @@ xfs_fs_write_inode(
	trace_xfs_write_inode(ip);

	if (XFS_FORCED_SHUTDOWN(mp))
		return XFS_ERROR(EIO);
		return -XFS_ERROR(EIO);
	if (!ip->i_update_core)
		return 0;

	if (wbc->sync_mode == WB_SYNC_ALL) {
		/*
@@ -929,12 +917,10 @@ xfs_fs_write_inode(
		 * of synchronous log foces dramatically.
		 */
		xfs_ioend_wait(ip);
		xfs_ilock(ip, XFS_ILOCK_SHARED);
		if (ip->i_update_core) {
		error = xfs_log_inode(ip);
		if (error)
				goto out_unlock;
		}
			goto out;
		return 0;
	} else {
		/*
		 * We make this non-blocking if the inode is contended, return