Skip to content

Commit

Permalink
Linux: syncfs(2) should sync all cached files
Browse files Browse the repository at this point in the history
While debugging problem with data not being synced on umount, we've
noticed that even syncfs(2) doesn't help to get the data written
out. It is because it doesn't actually sync any of the live znodes.

Signed-off-by: Pavel Snajdr <[email protected]>
  • Loading branch information
snajpa committed Nov 29, 2024
1 parent 0ffa6f3 commit 88d1c8e
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion module/os/linux/zfs/zpl_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,23 @@ zpl_sync_fs(struct super_block *sb, int wait)
{
fstrans_cookie_t cookie;
cred_t *cr = CRED();
znode_t *zp;
zfsvfs_t *zfsvfs = sb->s_fs_info;
int error;

crhold(cr);
cookie = spl_fstrans_mark();
error = -zfs_sync(sb, wait, cr);
mutex_enter(&zfsvfs->z_znodes_lock);
for (zp = list_head(&zfsvfs->z_all_znodes); zp;
zp = list_next(&zfsvfs->z_all_znodes, zp)) {
if (zp->z_sa_hdl)
error = zpl_fsync(zp, 0, LLONG_MAX, wait);
if (error != 0)
break;
}
mutex_exit(&zfsvfs->z_znodes_lock);
if (error == 0)
error = -zfs_sync(sb, wait, cr);
spl_fstrans_unmark(cookie);
crfree(cr);
ASSERT3S(error, <=, 0);
Expand Down

0 comments on commit 88d1c8e

Please sign in to comment.