]> granicus.if.org Git - zfs/commitdiff
Fix NULL pointer when O_SYNC read in snapshot
authorChunwei Chen <tuxoko@gmail.com>
Fri, 11 Aug 2017 15:57:54 +0000 (08:57 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 11 Aug 2017 15:57:54 +0000 (08:57 -0700)
When doing read on a file open with O_SYNC, it will trigger zil_commit.
However for snapshot, there's no zil, so we shouldn't be doing that.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Closes #6478
Closes #6494

module/zfs/zfs_vnops.c

index 4658a20514fd2da04f490f38642dbafabe43bd9a..53c5e4f2384f175185d3f59ef6178b12e1ddf707 100644 (file)
@@ -482,8 +482,10 @@ zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr)
 
        /*
         * If we're in FRSYNC mode, sync out this znode before reading it.
+        * Only do this for non-snapshots.
         */
-       if (ioflag & FRSYNC || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
+       if (zfsvfs->z_log &&
+           (ioflag & FRSYNC || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS))
                zil_commit(zfsvfs->z_log, zp->z_id);
 
        /*