Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/ufs/lfs Merge the extattr VOPs from ffs.
details: https://anonhg.NetBSD.org/src/rev/5d61127702e5
branches: trunk
changeset: 788902:5d61127702e5
user: dholland <dholland%NetBSD.org@localhost>
date: Sun Jul 28 01:27:02 2013 +0000
description:
Merge the extattr VOPs from ffs.
As these do nothing besides dispatch to ulfs_extattr.c it wasn't
exactly hard.
This might just make extended attributes work on lfs...
diffstat:
sys/ufs/lfs/lfs_vnops.c | 197 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 195 insertions(+), 2 deletions(-)
diffs (243 lines):
diff -r fea92dfed5d8 -r 5d61127702e5 sys/ufs/lfs/lfs_vnops.c
--- a/sys/ufs/lfs/lfs_vnops.c Sun Jul 28 01:26:13 2013 +0000
+++ b/sys/ufs/lfs/lfs_vnops.c Sun Jul 28 01:27:02 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_vnops.c,v 1.253 2013/07/28 01:10:49 dholland Exp $ */
+/* $NetBSD: lfs_vnops.c,v 1.254 2013/07/28 01:27:02 dholland Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.253 2013/07/28 01:10:49 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.254 2013/07/28 01:27:02 dholland Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -105,6 +105,13 @@
extern pid_t lfs_writer_daemon;
int lfs_ignore_lazy_sync = 1;
+static int lfs_openextattr(void *v);
+static int lfs_closeextattr(void *v);
+static int lfs_getextattr(void *v);
+static int lfs_setextattr(void *v);
+static int lfs_listextattr(void *v);
+static int lfs_deleteextattr(void *v);
+
/* Global vfs data structures for lfs. */
int (**lfs_vnodeop_p)(void *);
const struct vnodeopv_entry_desc lfs_vnodeop_entries[] = {
@@ -150,6 +157,12 @@
{ &vop_bwrite_desc, lfs_bwrite }, /* bwrite */
{ &vop_getpages_desc, lfs_getpages }, /* getpages */
{ &vop_putpages_desc, lfs_putpages }, /* putpages */
+ { &vop_openextattr_desc, lfs_openextattr }, /* openextattr */
+ { &vop_closeextattr_desc, lfs_closeextattr }, /* closeextattr */
+ { &vop_getextattr_desc, lfs_getextattr }, /* getextattr */
+ { &vop_setextattr_desc, lfs_setextattr }, /* setextattr */
+ { &vop_listextattr_desc, lfs_listextattr }, /* listextattr */
+ { &vop_deleteextattr_desc, lfs_deleteextattr }, /* deleteextattr */
{ NULL, NULL }
};
const struct vnodeopv_desc lfs_vnodeop_opv_desc =
@@ -198,6 +211,12 @@
{ &vop_bwrite_desc, vn_bwrite }, /* bwrite */
{ &vop_getpages_desc, spec_getpages }, /* getpages */
{ &vop_putpages_desc, spec_putpages }, /* putpages */
+ { &vop_openextattr_desc, lfs_openextattr }, /* openextattr */
+ { &vop_closeextattr_desc, lfs_closeextattr }, /* closeextattr */
+ { &vop_getextattr_desc, lfs_getextattr }, /* getextattr */
+ { &vop_setextattr_desc, lfs_setextattr }, /* setextattr */
+ { &vop_listextattr_desc, lfs_listextattr }, /* listextattr */
+ { &vop_deleteextattr_desc, lfs_deleteextattr }, /* deleteextattr */
{ NULL, NULL }
};
const struct vnodeopv_desc lfs_specop_opv_desc =
@@ -245,6 +264,12 @@
{ &vop_advlock_desc, vn_fifo_bypass }, /* advlock */
{ &vop_bwrite_desc, lfs_bwrite }, /* bwrite */
{ &vop_putpages_desc, vn_fifo_bypass }, /* putpages */
+ { &vop_openextattr_desc, lfs_openextattr }, /* openextattr */
+ { &vop_closeextattr_desc, lfs_closeextattr }, /* closeextattr */
+ { &vop_getextattr_desc, lfs_getextattr }, /* getextattr */
+ { &vop_setextattr_desc, lfs_setextattr }, /* setextattr */
+ { &vop_listextattr_desc, lfs_listextattr }, /* listextattr */
+ { &vop_deleteextattr_desc, lfs_deleteextattr }, /* deleteextattr */
{ NULL, NULL }
};
const struct vnodeopv_desc lfs_fifoop_opv_desc =
@@ -2456,3 +2481,171 @@
return EOPNOTSUPP;
return ulfs_mmap(v);
}
+
+static int
+lfs_openextattr(void *v)
+{
+ struct vop_openextattr_args /* {
+ struct vnode *a_vp;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct inode *ip = VTOI(ap->a_vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct lfs *fs = ip->i_lfs;
+
+ /* Not supported for ULFS1 file systems. */
+ if (ump->um_fstype == ULFS1)
+ return (EOPNOTSUPP);
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
+
+static int
+lfs_closeextattr(void *v)
+{
+ struct vop_closeextattr_args /* {
+ struct vnode *a_vp;
+ int a_commit;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct inode *ip = VTOI(ap->a_vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct lfs *fs = ip->i_lfs;
+
+ /* Not supported for ULFS1 file systems. */
+ if (ump->um_fstype == ULFS1)
+ return (EOPNOTSUPP);
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
+
+static int
+lfs_getextattr(void *v)
+{
+ struct vop_getextattr_args /* {
+ struct vnode *a_vp;
+ int a_attrnamespace;
+ const char *a_name;
+ struct uio *a_uio;
+ size_t *a_size;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct vnode *vp = ap->a_vp;
+ struct inode *ip = VTOI(vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct lfs *fs = ip->i_lfs;
+ int error;
+
+ if (ump->um_fstype == ULFS1) {
+#ifdef LFS_EXTATTR
+ fstrans_start(vp->v_mount, FSTRANS_SHARED);
+ error = ulfs_getextattr(ap);
+ fstrans_done(vp->v_mount);
+#else
+ error = EOPNOTSUPP;
+#endif
+ return error;
+ }
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
+
+static int
+lfs_setextattr(void *v)
+{
+ struct vop_setextattr_args /* {
+ struct vnode *a_vp;
+ int a_attrnamespace;
+ const char *a_name;
+ struct uio *a_uio;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct vnode *vp = ap->a_vp;
+ struct inode *ip = VTOI(vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct lfs *fs = ip->i_lfs;
+ int error;
+
+ if (ump->um_fstype == ULFS1) {
+#ifdef LFS_EXTATTR
+ fstrans_start(vp->v_mount, FSTRANS_SHARED);
+ error = ulfs_setextattr(ap);
+ fstrans_done(vp->v_mount);
+#else
+ error = EOPNOTSUPP;
+#endif
+ return error;
+ }
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
+
+static int
+lfs_listextattr(void *v)
+{
+ struct vop_listextattr_args /* {
+ struct vnode *a_vp;
+ int a_attrnamespace;
+ struct uio *a_uio;
+ size_t *a_size;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct vnode *vp = ap->a_vp;
+ struct inode *ip = VTOI(vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct lfs *fs = ip->i_lfs;
+ int error;
+
+ if (ump->um_fstype == ULFS1) {
+#ifdef LFS_EXTATTR
+ fstrans_start(vp->v_mount, FSTRANS_SHARED);
+ error = ulfs_listextattr(ap);
+ fstrans_done(vp->v_mount);
+#else
+ error = EOPNOTSUPP;
+#endif
+ return error;
+ }
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
+
+static int
+lfs_deleteextattr(void *v)
+{
+ struct vop_deleteextattr_args /* {
+ struct vnode *a_vp;
+ int a_attrnamespace;
+ kauth_cred_t a_cred;
+ struct proc *a_p;
+ } */ *ap = v;
+ struct vnode *vp = ap->a_vp;
+ struct inode *ip = VTOI(vp);
+ struct ulfsmount *ump = ip->i_ump;
+ //struct fs *fs = ip->i_lfs;
+ int error;
+
+ if (ump->um_fstype == ULFS1) {
+#ifdef LFS_EXTATTR
+ fstrans_start(vp->v_mount, FSTRANS_SHARED);
+ error = ulfs_deleteextattr(ap);
+ fstrans_done(vp->v_mount);
+#else
+ error = EOPNOTSUPP;
+#endif
+ return error;
+ }
+
+ /* XXX Not implemented for ULFS2 file systems. */
+ return (EOPNOTSUPP);
+}
Home |
Main Index |
Thread Index |
Old Index