Commit e13a73f02595c564e423bda5742fb8df4ebca455

Authored by Christoph Hellwig
Committed by Nathan Scott
1 parent 1df84c930a

[XFS] Write log dummy record when freezing filesystem

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

Signed-off-by: Christoph Hellwig <hch@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>

Showing 3 changed files with 29 additions and 0 deletions Side-by-side Diff

... ... @@ -540,6 +540,32 @@
540 540 return(0);
541 541 }
542 542  
  543 +void
  544 +xfs_fs_log_dummy(xfs_mount_t *mp)
  545 +{
  546 + xfs_trans_t *tp;
  547 + xfs_inode_t *ip;
  548 +
  549 +
  550 + tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1);
  551 + atomic_inc(&mp->m_active_trans);
  552 + if (xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0)) {
  553 + xfs_trans_cancel(tp, 0);
  554 + return;
  555 + }
  556 +
  557 + ip = mp->m_rootip;
  558 + xfs_ilock(ip, XFS_ILOCK_EXCL);
  559 +
  560 + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
  561 + xfs_trans_ihold(tp, ip);
  562 + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
  563 + xfs_trans_set_sync(tp);
  564 + xfs_trans_commit(tp, 0, NULL);
  565 +
  566 + xfs_iunlock(ip, XFS_ILOCK_EXCL);
  567 +}
  568 +
543 569 int
544 570 xfs_fs_goingdown(
545 571 xfs_mount_t *mp,
... ... @@ -25,6 +25,7 @@
25 25 extern int xfs_reserve_blocks(xfs_mount_t *mp, __uint64_t *inval,
26 26 xfs_fsop_resblks_t *outval);
27 27 extern int xfs_fs_goingdown(xfs_mount_t *mp, __uint32_t inflags);
  28 +extern void xfs_fs_log_dummy(xfs_mount_t *mp);
28 29  
29 30 #endif /* __XFS_FSOPS_H__ */
... ... @@ -53,6 +53,7 @@
53 53 #include "xfs_acl.h"
54 54 #include "xfs_attr.h"
55 55 #include "xfs_clnt.h"
  56 +#include "xfs_fsops.h"
56 57  
57 58 STATIC int xfs_sync(bhv_desc_t *, int, cred_t *);
58 59  
... ... @@ -1967,6 +1968,7 @@
1967 1968 /* Push the superblock and write an unmount record */
1968 1969 xfs_log_unmount_write(mp);
1969 1970 xfs_unmountfs_writesb(mp);
  1971 + xfs_fs_log_dummy(mp);
1970 1972 }
1971 1973  
1972 1974