Module Name:    src
Committed By:   chs
Date:           Mon Nov 28 04:52:04 UTC 2022

Modified Files:
        src/sys/ufs: files.ufs
        src/sys/ufs/ffs: ffs_extattr.c ffs_extern.h

Log Message:
the UFS_EXTATTR option was supposed to affect only UFS1 file systems,
but when the UFS2 extattr code was merged, the UFS_EXTATTR option was
mistakenly changed to affect UFS2 file systems as well.  this commit
changes UFS_EXTATTR back to affecting only UFS1 file systems as originally
intended.  in UFS2 (or rather UFS2ea in NetBSD), extattrs are a
native feature and are always supported.


To generate a diff of this commit:
cvs rdiff -u -r1.49 -r1.50 src/sys/ufs/files.ufs
cvs rdiff -u -r1.9 -r1.10 src/sys/ufs/ffs/ffs_extattr.c
cvs rdiff -u -r1.86 -r1.87 src/sys/ufs/ffs/ffs_extern.h

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

Modified files:

Index: src/sys/ufs/files.ufs
diff -u src/sys/ufs/files.ufs:1.49 src/sys/ufs/files.ufs:1.50
--- src/sys/ufs/files.ufs:1.49	Thu Sep 24 17:20:53 2020
+++ src/sys/ufs/files.ufs	Mon Nov 28 04:52:04 2022
@@ -1,4 +1,4 @@
-#	$NetBSD: files.ufs,v 1.49 2020/09/24 17:20:53 riastradh Exp $
+#	$NetBSD: files.ufs,v 1.50 2022/11/28 04:52:04 chs Exp $
 
 deffs					FFS
 deffs					EXT2FS
@@ -52,7 +52,7 @@ define	ffs: vfs, ufs
 file	ufs/ffs/ffs_alloc.c		ffs
 file	ufs/ffs/ffs_balloc.c		ffs
 file	ufs/ffs/ffs_bswap.c		(ffs | mfs) & ffs_ei
-file	ufs/ffs/ffs_extattr.c		ffs & ufs_extattr
+file	ufs/ffs/ffs_extattr.c		ffs
 file	ufs/ffs/ffs_inode.c		ffs
 file	ufs/ffs/ffs_snapshot.c		ffs
 file	ufs/ffs/ffs_subr.c		ffs

Index: src/sys/ufs/ffs/ffs_extattr.c
diff -u src/sys/ufs/ffs/ffs_extattr.c:1.9 src/sys/ufs/ffs/ffs_extattr.c:1.10
--- src/sys/ufs/ffs/ffs_extattr.c:1.9	Thu Nov 17 06:40:40 2022
+++ src/sys/ufs/ffs/ffs_extattr.c	Mon Nov 28 04:52:04 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_extattr.c,v 1.9 2022/11/17 06:40:40 chs Exp $	*/
+/*	$NetBSD: ffs_extattr.c,v 1.10 2022/11/28 04:52:04 chs Exp $	*/
 
 /*-
  * SPDX-License-Identifier: (BSD-2-Clause-FreeBSD AND BSD-3-Clause)
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_extattr.c,v 1.9 2022/11/17 06:40:40 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_extattr.c,v 1.10 2022/11/28 04:52:04 chs Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -114,7 +114,7 @@ __KERNEL_RCSID(0, "$NetBSD: ffs_extattr.
 #define VI_UNLOCK(vp)		mutex_exit((vp)->v_interlock)
 #define UFS_INODE_SET_FLAG(ip, f)	((ip)->i_flag |= (f))
 #define ASSERT_VOP_ELOCKED(vp, m)	KASSERT(VOP_ISLOCKED(vp))
-#define I_IS_UFS2(ip)		(ITOFS(ip)->fs_magic == FS_UFS2_MAGIC)
+#define I_IS_UFS2(ip)		((ip)->i_ump->um_fstype == UFS2)
 #define	lblktosize(fs, o)	ffs_lblktosize(fs, o)
 #define	lblkno(fs, o)		ffs_lblkno(fs, o)
 #define	blkoff(fs, o)		ffs_blkoff(fs, o)
@@ -151,7 +151,7 @@ ffs_extread(struct vnode *vp, struct uio
 	dp = ip->i_din2;
 
 #ifdef INVARIANTS
-	if (uio->uio_rw != UIO_READ || fs->fs_magic != FS_UFS2_MAGIC)
+	if (uio->uio_rw != UIO_READ || ip->i_ump->um_fstype != UFS2)
 		panic("ffs_extread: mode");
 
 #endif
@@ -269,7 +269,7 @@ ffs_extwrite(struct vnode *vp, struct ui
 	dp = ip->i_din2;
 
 #ifdef INVARIANTS
-	if (uio->uio_rw != UIO_WRITE || fs->fs_magic != FS_UFS2_MAGIC)
+	if (uio->uio_rw != UIO_WRITE || ip->i_ump->um_fstype != UFS2)
 		panic("ffs_extwrite: mode");
 #endif
 
@@ -585,10 +585,9 @@ ffs_openextattr(void *v)
 		struct proc *a_p;
 	} */ *ap = v;
 	struct inode *ip = VTOI(ap->a_vp);
-	struct fs *fs = ip->i_fs;
 
 	/* Not supported for UFS1 file systems. */
-	if (fs->fs_magic == FS_UFS1_MAGIC)
+	if (ip->i_ump->um_fstype == UFS1)
 		return (EOPNOTSUPP);
 
 #ifdef __FreeBSD__
@@ -612,10 +611,9 @@ ffs_closeextattr(void *v)
 		struct proc *a_p;
 	} */ *ap = v;
 	struct inode *ip = VTOI(ap->a_vp);
-	struct fs *fs = ip->i_fs;
 
 	/* Not supported for UFS1 file systems. */
-	if (fs->fs_magic == FS_UFS1_MAGIC)
+	if (ip->i_ump->um_fstype == UFS1)
 		return (EOPNOTSUPP);
 
 #ifdef __FreeBSD__
@@ -646,11 +644,15 @@ ffs_getextattr(void *v)
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
 	struct inode *ip = VTOI(vp);
-	struct fs *fs = ip->i_fs;
 
 	KASSERT(VOP_ISLOCKED(vp));
-	if (fs->fs_magic == FS_UFS1_MAGIC) {
+
+	if (ip->i_ump->um_fstype == UFS1) {
+#ifdef UFS_EXTATTR
 		return ufs_getextattr(ap);
+#else
+		return EOPNOTSUPP;
+#endif
 	}
 
 	u_char *eae, *p;
@@ -708,8 +710,12 @@ ffs_setextattr(void *v)
 	struct fs *fs = ip->i_fs;
 
 	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
-	if (fs->fs_magic == FS_UFS1_MAGIC) {
+	if (ip->i_ump->um_fstype == UFS1) {
+#ifdef UFS_EXTATTR
 		return ufs_setextattr(ap);
+#else
+		return EOPNOTSUPP;
+#endif
 	}
 
 	struct extattr *eap;
@@ -829,10 +835,13 @@ ffs_listextattr(void *v)
 		struct proc *a_p;
 	} */ *ap = v;
 	struct inode *ip = VTOI(ap->a_vp);
-	struct fs *fs = ip->i_fs;
 
-	if (fs->fs_magic == FS_UFS1_MAGIC) {
+	if (ip->i_ump->um_fstype == UFS1) {
+#ifdef UFS_EXTATTR
 		return ufs_listextattr(ap);
+#else
+		return EOPNOTSUPP;
+#endif
 	}
 
 	struct extattr *eap, *eaend;
@@ -890,10 +899,13 @@ ffs_deleteextattr(void *v)
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
 	struct inode *ip = VTOI(vp);
-	struct fs *fs = ip->i_fs;
 
-	if (fs->fs_magic == FS_UFS1_MAGIC) {
+	if (ip->i_ump->um_fstype == UFS1) {
+#ifdef UFS_EXTATTR
 		return ufs_deleteextattr(ap);
+#else
+		return EOPNOTSUPP;
+#endif
 	}
 
 	struct extattr *eap;

Index: src/sys/ufs/ffs/ffs_extern.h
diff -u src/sys/ufs/ffs/ffs_extern.h:1.86 src/sys/ufs/ffs/ffs_extern.h:1.87
--- src/sys/ufs/ffs/ffs_extern.h:1.86	Sat Apr 18 19:18:34 2020
+++ src/sys/ufs/ffs/ffs_extern.h	Mon Nov 28 04:52:04 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_extern.h,v 1.86 2020/04/18 19:18:34 christos Exp $	*/
+/*	$NetBSD: ffs_extern.h,v 1.87 2022/11/28 04:52:04 chs Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993, 1994
@@ -141,7 +141,6 @@ int	ffs_islocked(void *);
 int	ffs_full_fsync(struct vnode *, int);
 
 /* ffs_extattr.c */
-#ifdef UFS_EXTATTR
 int	ffs_openextattr(void *);
 int	ffs_closeextattr(void *);
 int	ffs_getextattr(void *);
@@ -149,15 +148,6 @@ int	ffs_setextattr(void *);
 int	ffs_listextattr(void *);
 int	ffs_deleteextattr(void *);
 int	ffsext_strategy(void *);
-#else
-#define	ffs_openextattr		genfs_eopnotsupp
-#define	ffs_closeextattr	genfs_eopnotsupp
-#define	ffs_getextattr		genfs_eopnotsupp
-#define	ffs_setextattr		genfs_eopnotsupp
-#define	ffs_listextattr		genfs_eopnotsupp
-#define	ffs_deleteextattr	genfs_eopnotsupp
-#define	ffsext_strategy		vn_fifo_bypass
-#endif
 
 /*
  * Snapshot function prototypes.

Reply via email to