svn commit: r321348 - head/sys/ufs/ffs
Konstantin Belousov
kib at FreeBSD.org
Fri Jul 21 18:36:19 UTC 2017
Author: kib
Date: Fri Jul 21 18:36:17 2017
New Revision: 321348
URL: https://svnweb.freebsd.org/changeset/base/321348
Log:
Unlock correct lock in ffs_snapblkfree().
It is possible for ffs_snapblkfree() to race and lock snaplock while
the devvp snapdata is instantiated, but no snapshots exist. In this
case the loop over snapshots in ffs_snapblkfree() is not executed, and
the local variable vp is left initialized to NULL.
Unlock using &sn->sn_lock and not vp->v_vnlock. For the inodes on the
snapshot list, the locks are same.
Reported and tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 2 weeks
Modified:
head/sys/ufs/ffs/ffs_snapshot.c
Modified: head/sys/ufs/ffs/ffs_snapshot.c
==============================================================================
--- head/sys/ufs/ffs/ffs_snapshot.c Fri Jul 21 18:28:27 2017 (r321347)
+++ head/sys/ufs/ffs/ffs_snapshot.c Fri Jul 21 18:36:17 2017 (r321348)
@@ -1935,7 +1935,7 @@ retry:
*/
if (error != 0 && wkhd != NULL)
softdep_freework(wkhd);
- lockmgr(vp->v_vnlock, LK_RELEASE, NULL);
+ lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
return (error);
}
More information about the svn-src-all
mailing list