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

Commit e13a73f0 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Nathan Scott
Browse files

[XFS] Write log dummy record when freezing filesystem



SGI-PV: 945483
SGI-Modid: xfs-linux-melb:xfs-kern:202638a

Signed-off-by: default avatarChristoph Hellwig <hch@sgi.com>
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent 1df84c93
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -540,6 +540,32 @@ xfs_reserve_blocks(
	return(0);
}

void
xfs_fs_log_dummy(xfs_mount_t *mp)
{
	xfs_trans_t *tp;
	xfs_inode_t *ip;


	tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1);
	atomic_inc(&mp->m_active_trans);
	if (xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0)) {
		xfs_trans_cancel(tp, 0);
		return;
	}

	ip = mp->m_rootip;
	xfs_ilock(ip, XFS_ILOCK_EXCL);

	xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
	xfs_trans_ihold(tp, ip);
	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
	xfs_trans_set_sync(tp);
	xfs_trans_commit(tp, 0, NULL);

	xfs_iunlock(ip, XFS_ILOCK_EXCL);
}

int
xfs_fs_goingdown(
	xfs_mount_t	*mp,
+1 −0
Original line number Diff line number Diff line
@@ -25,5 +25,6 @@ extern int xfs_fs_counts(xfs_mount_t *mp, xfs_fsop_counts_t *cnt);
extern int xfs_reserve_blocks(xfs_mount_t *mp, __uint64_t *inval,
				xfs_fsop_resblks_t *outval);
extern int xfs_fs_goingdown(xfs_mount_t *mp, __uint32_t inflags);
extern void xfs_fs_log_dummy(xfs_mount_t *mp);

#endif	/* __XFS_FSOPS_H__ */
+2 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@
#include "xfs_acl.h"
#include "xfs_attr.h"
#include "xfs_clnt.h"
#include "xfs_fsops.h"

STATIC int xfs_sync(bhv_desc_t *, int, cred_t *);

@@ -1967,6 +1968,7 @@ xfs_freeze(
	/* Push the superblock and write an unmount record */
	xfs_log_unmount_write(mp);
	xfs_unmountfs_writesb(mp);
	xfs_fs_log_dummy(mp);
}