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...
This commit is contained in:
parent
1c11495e64
commit
ba91b8b1fa
|
@ -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 @@ __KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.253 2013/07/28 01:10:49 dholland Exp
|
|||
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 @@ const struct vnodeopv_entry_desc lfs_vnodeop_entries[] = {
|
|||
{ &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 @@ const struct vnodeopv_entry_desc lfs_specop_entries[] = {
|
|||
{ &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 @@ const struct vnodeopv_entry_desc lfs_fifoop_entries[] = {
|
|||
{ &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 @@ lfs_mmap(void *v)
|
|||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue