Module Name:    src
Committed By:   haad
Date:           Sun Jan 10 01:35:39 UTC 2010

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_replay.c

Log Message:
Fix problem in ZFS ZIL layer where unclean shutdown of filesystem can change
replayed file permissions to 777. Patch from FreeBSD. Original commit message:

Be careful which vattr fields are set during setattr replay.
Without this fix strange things can appear after unclean shutdown like
files with mode set to 07777.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.2 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.3
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c:1.2	Fri Aug  7 20:16:45 2009
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_replay.c	Sun Jan 10 01:35:39 2010
@@ -60,10 +60,14 @@
 {
 	VATTR_NULL(vap);
 	vap->va_mask = (uint_t)mask;
-	vap->va_type = IFTOVT(mode);
-	vap->va_mode = mode & MODEMASK;
-	vap->va_uid = (uid_t)(IS_EPHEMERAL(uid)) ? -1 : uid;
-	vap->va_gid = (gid_t)(IS_EPHEMERAL(gid)) ? -1 : gid;
+	if (mask & AT_TYPE)
+		vap->va_type = IFTOVT(mode);
+	if (mask & AT_MODE)
+		vap->va_mode = mode & MODEMASK;
+	if (mask & AT_UID)
+		vap->va_uid = (uid_t)(IS_EPHEMERAL(uid)) ? -1 : uid;
+	if (mask & AT_GID)
+		vap->va_gid = (gid_t)(IS_EPHEMERAL(gid)) ? -1 : gid;
 	vap->va_rdev = zfs_cmpldev(rdev);
 	vap->va_nodeid = nodeid;
 }

Reply via email to