zfs_getattr_fast() was missing a lock on the ZFS superblock which
could result in zfs_znode_dmu_fini() clearing the zp->z_sa_hdl member
while zfs_getattr_fast() was accessing the znode. The result of this
would usually be a panic.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Fixes #431
znode_t *zp = ITOZ(ip);
zfs_sb_t *zsb = ITOZSB(ip);
+ ZFS_ENTER(zsb);
+ ZFS_VERIFY_ZP(zp);
+
mutex_enter(&zp->z_lock);
generic_fillattr(ip, sp);
mutex_exit(&zp->z_lock);
+ ZFS_EXIT(zsb);
+
return (0);
}
EXPORT_SYMBOL(zfs_getattr_fast);