Commit 293688ec authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Tim Shimmin

[XFS] remove dependency of the dmapi module on behaviors

Mount options are now parsed by the main XFS module and rejected if dmapi
support is not available, and there is a new dm operation to send the
mount event.

SGI-PV: 969608
SGI-Modid: xfs-linux-melb:xfs-kern:29502a
Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarDavid Chinner <dgc@sgi.com>
Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
parent f541d270
...@@ -155,19 +155,6 @@ vfs_vget( ...@@ -155,19 +155,6 @@ vfs_vget(
return ((*bhvtovfsops(next)->vfs_vget)(next, vpp, fidp)); return ((*bhvtovfsops(next)->vfs_vget)(next, vpp, fidp));
} }
int
vfs_dmapiops(
struct bhv_desc *bdp,
caddr_t addr)
{
struct bhv_desc *next = bdp;
ASSERT(next);
while (! (bhvtovfsops(next))->vfs_dmapiops)
next = BHV_NEXT(next);
return ((*bhvtovfsops(next)->vfs_dmapiops)(next, addr));
}
int int
vfs_quotactl( vfs_quotactl(
struct bhv_desc *bdp, struct bhv_desc *bdp,
...@@ -306,7 +293,6 @@ bhv_remove_all_vfsops( ...@@ -306,7 +293,6 @@ bhv_remove_all_vfsops(
struct xfs_mount *mp; struct xfs_mount *mp;
bhv_remove_vfsops(vfsp, VFS_POSITION_QM); bhv_remove_vfsops(vfsp, VFS_POSITION_QM);
bhv_remove_vfsops(vfsp, VFS_POSITION_DM);
if (!freebase) if (!freebase)
return; return;
mp = XFS_VFSTOM(vfsp); mp = XFS_VFSTOM(vfsp);
......
...@@ -66,14 +66,12 @@ typedef struct bhv_vfs { ...@@ -66,14 +66,12 @@ typedef struct bhv_vfs {
typedef enum { typedef enum {
VFS_BHV_UNKNOWN, /* not specified */ VFS_BHV_UNKNOWN, /* not specified */
VFS_BHV_XFS, /* xfs */ VFS_BHV_XFS, /* xfs */
VFS_BHV_DM, /* data migration */
VFS_BHV_QM, /* quota manager */ VFS_BHV_QM, /* quota manager */
VFS_BHV_IO, /* IO path */ VFS_BHV_IO, /* IO path */
VFS_BHV_END /* housekeeping end-of-range */ VFS_BHV_END /* housekeeping end-of-range */
} bhv_vfs_type_t; } bhv_vfs_type_t;
#define VFS_POSITION_XFS (BHV_POSITION_BASE) #define VFS_POSITION_XFS (BHV_POSITION_BASE)
#define VFS_POSITION_DM (VFS_POSITION_BASE+10)
#define VFS_POSITION_QM (VFS_POSITION_BASE+20) #define VFS_POSITION_QM (VFS_POSITION_BASE+20)
#define VFS_POSITION_IO (VFS_POSITION_BASE+30) #define VFS_POSITION_IO (VFS_POSITION_BASE+30)
...@@ -129,7 +127,6 @@ typedef int (*vfs_statvfs_t)(bhv_desc_t *, bhv_statvfs_t *, ...@@ -129,7 +127,6 @@ typedef int (*vfs_statvfs_t)(bhv_desc_t *, bhv_statvfs_t *,
struct inode *); struct inode *);
typedef int (*vfs_sync_t)(bhv_desc_t *, int, struct cred *); typedef int (*vfs_sync_t)(bhv_desc_t *, int, struct cred *);
typedef int (*vfs_vget_t)(bhv_desc_t *, struct inode **, struct fid *); typedef int (*vfs_vget_t)(bhv_desc_t *, struct inode **, struct fid *);
typedef int (*vfs_dmapiops_t)(bhv_desc_t *, caddr_t);
typedef int (*vfs_quotactl_t)(bhv_desc_t *, int, int, caddr_t); typedef int (*vfs_quotactl_t)(bhv_desc_t *, int, int, caddr_t);
typedef void (*vfs_init_vnode_t)(bhv_desc_t *, typedef void (*vfs_init_vnode_t)(bhv_desc_t *,
struct inode *, struct xfs_inode *, int); struct inode *, struct xfs_inode *, int);
...@@ -147,7 +144,6 @@ typedef struct bhv_vfsops { ...@@ -147,7 +144,6 @@ typedef struct bhv_vfsops {
vfs_statvfs_t vfs_statvfs; /* file system statistics */ vfs_statvfs_t vfs_statvfs; /* file system statistics */
vfs_sync_t vfs_sync; /* flush files */ vfs_sync_t vfs_sync; /* flush files */
vfs_vget_t vfs_vget; /* get vnode from fid */ vfs_vget_t vfs_vget; /* get vnode from fid */
vfs_dmapiops_t vfs_dmapiops; /* data migration */
vfs_quotactl_t vfs_quotactl; /* disk quota */ vfs_quotactl_t vfs_quotactl; /* disk quota */
vfs_init_vnode_t vfs_init_vnode; /* initialize a new vnode */ vfs_init_vnode_t vfs_init_vnode; /* initialize a new vnode */
vfs_force_shutdown_t vfs_force_shutdown; /* crash and burn */ vfs_force_shutdown_t vfs_force_shutdown; /* crash and burn */
...@@ -167,7 +163,6 @@ typedef struct bhv_vfsops { ...@@ -167,7 +163,6 @@ typedef struct bhv_vfsops {
#define bhv_vfs_statvfs(v, sp,vp) vfs_statvfs(VFSHEAD(v), sp,vp) #define bhv_vfs_statvfs(v, sp,vp) vfs_statvfs(VFSHEAD(v), sp,vp)
#define bhv_vfs_sync(v, flag,cr) vfs_sync(VFSHEAD(v), flag,cr) #define bhv_vfs_sync(v, flag,cr) vfs_sync(VFSHEAD(v), flag,cr)
#define bhv_vfs_vget(v, vpp,fidp) vfs_vget(VFSHEAD(v), vpp,fidp) #define bhv_vfs_vget(v, vpp,fidp) vfs_vget(VFSHEAD(v), vpp,fidp)
#define bhv_vfs_dmapiops(v, p) vfs_dmapiops(VFSHEAD(v), p)
#define bhv_vfs_quotactl(v, c,id,p) vfs_quotactl(VFSHEAD(v), c,id,p) #define bhv_vfs_quotactl(v, c,id,p) vfs_quotactl(VFSHEAD(v), c,id,p)
#define bhv_vfs_init_vnode(v, vp,b,ul) vfs_init_vnode(VFSHEAD(v), vp,b,ul) #define bhv_vfs_init_vnode(v, vp,b,ul) vfs_init_vnode(VFSHEAD(v), vp,b,ul)
#define bhv_vfs_force_shutdown(v,u,f,l) vfs_force_shutdown(VFSHEAD(v), u,f,l) #define bhv_vfs_force_shutdown(v,u,f,l) vfs_force_shutdown(VFSHEAD(v), u,f,l)
...@@ -185,7 +180,6 @@ typedef struct bhv_vfsops { ...@@ -185,7 +180,6 @@ typedef struct bhv_vfsops {
#define bhv_next_vfs_statvfs(b, sp,vp) vfs_statvfs(b, sp,vp) #define bhv_next_vfs_statvfs(b, sp,vp) vfs_statvfs(b, sp,vp)
#define bhv_next_vfs_sync(b, flag,cr) vfs_sync(b, flag,cr) #define bhv_next_vfs_sync(b, flag,cr) vfs_sync(b, flag,cr)
#define bhv_next_vfs_vget(b, vpp,fidp) vfs_vget(b, vpp,fidp) #define bhv_next_vfs_vget(b, vpp,fidp) vfs_vget(b, vpp,fidp)
#define bhv_next_vfs_dmapiops(b, p) vfs_dmapiops(b, p)
#define bhv_next_vfs_quotactl(b, c,id,p) vfs_quotactl(b, c,id,p) #define bhv_next_vfs_quotactl(b, c,id,p) vfs_quotactl(b, c,id,p)
#define bhv_next_vfs_init_vnode(b, vp,b2,ul) vfs_init_vnode(b, vp,b2,ul) #define bhv_next_vfs_init_vnode(b, vp,b2,ul) vfs_init_vnode(b, vp,b2,ul)
#define bhv_next_force_shutdown(b, fl,f,l) vfs_force_shutdown(b, fl,f,l) #define bhv_next_force_shutdown(b, fl,f,l) vfs_force_shutdown(b, fl,f,l)
...@@ -200,7 +194,6 @@ extern int vfs_root(bhv_desc_t *, struct inode **); ...@@ -200,7 +194,6 @@ extern int vfs_root(bhv_desc_t *, struct inode **);
extern int vfs_statvfs(bhv_desc_t *, bhv_statvfs_t *, struct inode *); extern int vfs_statvfs(bhv_desc_t *, bhv_statvfs_t *, struct inode *);
extern int vfs_sync(bhv_desc_t *, int, struct cred *); extern int vfs_sync(bhv_desc_t *, int, struct cred *);
extern int vfs_vget(bhv_desc_t *, struct inode **, struct fid *); extern int vfs_vget(bhv_desc_t *, struct inode **, struct fid *);
extern int vfs_dmapiops(bhv_desc_t *, caddr_t);
extern int vfs_quotactl(bhv_desc_t *, int, int, caddr_t); extern int vfs_quotactl(bhv_desc_t *, int, int, caddr_t);
extern void vfs_init_vnode(bhv_desc_t *, struct inode *, struct xfs_inode *, int); extern void vfs_init_vnode(bhv_desc_t *, struct inode *, struct xfs_inode *, int);
extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int); extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int);
......
...@@ -168,7 +168,4 @@ typedef enum { ...@@ -168,7 +168,4 @@ typedef enum {
DM_FLAGS_NDELAY : 0) DM_FLAGS_NDELAY : 0)
#define AT_DELAY_FLAG(f) ((f&ATTR_NONBLOCK) ? DM_FLAGS_NDELAY : 0) #define AT_DELAY_FLAG(f) ((f&ATTR_NONBLOCK) ? DM_FLAGS_NDELAY : 0)
extern struct bhv_module_vfsops xfs_dmops;
#endif /* __XFS_DMAPI_H__ */ #endif /* __XFS_DMAPI_H__ */
...@@ -19,18 +19,51 @@ ...@@ -19,18 +19,51 @@
#include "xfs_fs.h" #include "xfs_fs.h"
#include "xfs_types.h" #include "xfs_types.h"
#include "xfs_log.h" #include "xfs_log.h"
#include "xfs_inum.h"
#include "xfs_trans.h" #include "xfs_trans.h"
#include "xfs_sb.h" #include "xfs_sb.h"
#include "xfs_ag.h"
#include "xfs_dir2.h"
#include "xfs_dmapi.h" #include "xfs_dmapi.h"
#include "xfs_inum.h"
#include "xfs_ag.h"
#include "xfs_mount.h" #include "xfs_mount.h"
#include "xfs_clnt.h"
xfs_dmops_t xfs_dmcore_stub = { static struct xfs_dmops xfs_dmcore_stub = {
.xfs_send_data = (xfs_send_data_t)fs_nosys, .xfs_send_data = (xfs_send_data_t)fs_nosys,
.xfs_send_mmap = (xfs_send_mmap_t)fs_noerr, .xfs_send_mmap = (xfs_send_mmap_t)fs_noerr,
.xfs_send_destroy = (xfs_send_destroy_t)fs_nosys, .xfs_send_destroy = (xfs_send_destroy_t)fs_nosys,
.xfs_send_namesp = (xfs_send_namesp_t)fs_nosys, .xfs_send_namesp = (xfs_send_namesp_t)fs_nosys,
.xfs_send_unmount = (xfs_send_unmount_t)fs_noval, .xfs_send_mount = (xfs_send_mount_t)fs_nosys,
.xfs_send_unmount = (xfs_send_unmount_t)fs_noerr,
}; };
int
xfs_dmops_get(struct xfs_mount *mp, struct xfs_mount_args *args)
{
if (args->flags & XFSMNT_DMAPI) {
struct xfs_dmops *ops;
ops = symbol_get(xfs_dmcore_xfs);
if (!ops) {
request_module("xfs_dmapi");
ops = symbol_get(xfs_dmcore_xfs);
}
if (!ops) {
cmn_err(CE_WARN, "XFS: no dmapi support available.");
return EINVAL;
}
mp->m_dm_ops = ops;
} else {
mp->m_dm_ops = &xfs_dmcore_stub;
}
return 0;
}
void
xfs_dmops_put(struct xfs_mount *mp)
{
if (mp->m_dm_ops != &xfs_dmcore_stub)
symbol_put(xfs_dmcore_xfs);
}
...@@ -85,6 +85,8 @@ typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct bhv_vfs *, ...@@ -85,6 +85,8 @@ typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct bhv_vfs *,
bhv_vnode_t *, bhv_vnode_t *,
dm_right_t, bhv_vnode_t *, dm_right_t, dm_right_t, bhv_vnode_t *, dm_right_t,
char *, char *, mode_t, int, int); char *, char *, mode_t, int, int);
typedef int (*xfs_send_mount_t)(struct xfs_mount *, dm_right_t,
char *, char *);
typedef void (*xfs_send_unmount_t)(struct bhv_vfs *, bhv_vnode_t *, typedef void (*xfs_send_unmount_t)(struct bhv_vfs *, bhv_vnode_t *,
dm_right_t, mode_t, int, int); dm_right_t, mode_t, int, int);
...@@ -93,21 +95,24 @@ typedef struct xfs_dmops { ...@@ -93,21 +95,24 @@ typedef struct xfs_dmops {
xfs_send_mmap_t xfs_send_mmap; xfs_send_mmap_t xfs_send_mmap;
xfs_send_destroy_t xfs_send_destroy; xfs_send_destroy_t xfs_send_destroy;
xfs_send_namesp_t xfs_send_namesp; xfs_send_namesp_t xfs_send_namesp;
xfs_send_mount_t xfs_send_mount;
xfs_send_unmount_t xfs_send_unmount; xfs_send_unmount_t xfs_send_unmount;
} xfs_dmops_t; } xfs_dmops_t;
#define XFS_SEND_DATA(mp, ev,vp,off,len,fl,lock) \ #define XFS_SEND_DATA(mp, ev,vp,off,len,fl,lock) \
(*(mp)->m_dm_ops.xfs_send_data)(ev,vp,off,len,fl,lock) (*(mp)->m_dm_ops->xfs_send_data)(ev,vp,off,len,fl,lock)
#define XFS_SEND_MMAP(mp, vma,fl) \ #define XFS_SEND_MMAP(mp, vma,fl) \
(*(mp)->m_dm_ops.xfs_send_mmap)(vma,fl) (*(mp)->m_dm_ops->xfs_send_mmap)(vma,fl)
#define XFS_SEND_DESTROY(mp, vp,right) \ #define XFS_SEND_DESTROY(mp, vp,right) \
(*(mp)->m_dm_ops.xfs_send_destroy)(vp,right) (*(mp)->m_dm_ops->xfs_send_destroy)(vp,right)
#define XFS_SEND_NAMESP(mp, ev,b1,r1,b2,r2,n1,n2,mode,rval,fl) \ #define XFS_SEND_NAMESP(mp, ev,b1,r1,b2,r2,n1,n2,mode,rval,fl) \
(*(mp)->m_dm_ops.xfs_send_namesp)(ev,NULL,b1,r1,b2,r2,n1,n2,mode,rval,fl) (*(mp)->m_dm_ops->xfs_send_namesp)(ev,NULL,b1,r1,b2,r2,n1,n2,mode,rval,fl)
#define XFS_SEND_PREUNMOUNT(mp, vfs,b1,r1,b2,r2,n1,n2,mode,rval,fl) \ #define XFS_SEND_PREUNMOUNT(mp, vfs,b1,r1,b2,r2,n1,n2,mode,rval,fl) \
(*(mp)->m_dm_ops.xfs_send_namesp)(DM_EVENT_PREUNMOUNT,vfs,b1,r1,b2,r2,n1,n2,mode,rval,fl) (*(mp)->m_dm_ops->xfs_send_namesp)(DM_EVENT_PREUNMOUNT,vfs,b1,r1,b2,r2,n1,n2,mode,rval,fl)
#define XFS_SEND_MOUNT(mp,right,path,name) \
(*(mp)->m_dm_ops->xfs_send_mount)(mp,right,path,name)
#define XFS_SEND_UNMOUNT(mp, vfsp,vp,right,mode,rval,fl) \ #define XFS_SEND_UNMOUNT(mp, vfsp,vp,right,mode,rval,fl) \
(*(mp)->m_dm_ops.xfs_send_unmount)(vfsp,vp,right,mode,rval,fl) (*(mp)->m_dm_ops->xfs_send_unmount)(vfsp,vp,right,mode,rval,fl)
/* /*
...@@ -407,7 +412,7 @@ typedef struct xfs_mount { ...@@ -407,7 +412,7 @@ typedef struct xfs_mount {
uint m_chsize; /* size of next field */ uint m_chsize; /* size of next field */
struct xfs_chash *m_chash; /* fs private inode per-cluster struct xfs_chash *m_chash; /* fs private inode per-cluster
* hash table */ * hash table */
struct xfs_dmops m_dm_ops; /* vector of DMI ops */ struct xfs_dmops *m_dm_ops; /* vector of DMI ops */
struct xfs_qmops m_qm_ops; /* vector of XQM ops */ struct xfs_qmops m_qm_ops; /* vector of XQM ops */
struct xfs_ioops m_io_ops; /* vector of I/O ops */ struct xfs_ioops m_io_ops; /* vector of I/O ops */
atomic_t m_active_trans; /* number trans frozen */ atomic_t m_active_trans; /* number trans frozen */
...@@ -642,7 +647,10 @@ extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *); ...@@ -642,7 +647,10 @@ extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *);
extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t); extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t);
extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t); extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t);
extern struct xfs_dmops xfs_dmcore_stub; extern int xfs_dmops_get(struct xfs_mount *, struct xfs_mount_args *);
extern void xfs_dmops_put(struct xfs_mount *);
extern struct xfs_dmops xfs_dmcore_xfs;
extern struct xfs_qmops xfs_qmcore_stub; extern struct xfs_qmops xfs_qmcore_stub;
extern struct xfs_ioops xfs_iocore_xfs; extern struct xfs_ioops xfs_iocore_xfs;
......
...@@ -326,6 +326,8 @@ xfs_start_flags( ...@@ -326,6 +326,8 @@ xfs_start_flags(
if (ap->flags2 & XFSMNT2_FILESTREAMS) if (ap->flags2 & XFSMNT2_FILESTREAMS)
mp->m_flags |= XFS_MOUNT_FILESTREAMS; mp->m_flags |= XFS_MOUNT_FILESTREAMS;
if (ap->flags & XFSMNT_DMAPI)
vfs->vfs_flag |= VFS_DMI;
return 0; return 0;
} }
...@@ -430,11 +432,13 @@ xfs_mount( ...@@ -430,11 +432,13 @@ xfs_mount(
ddev = vfsp->vfs_super->s_bdev; ddev = vfsp->vfs_super->s_bdev;
logdev = rtdev = NULL; logdev = rtdev = NULL;
error = xfs_dmops_get(mp, args);
if (error)
return error;
/* /*
* Setup xfs_mount function vectors from available behaviors * Setup xfs_mount function vectors from available behaviors
*/ */
p = vfs_bhv_lookup(vfsp, VFS_POSITION_DM);
mp->m_dm_ops = p ? *(xfs_dmops_t *) vfs_bhv_custom(p) : xfs_dmcore_stub;
p = vfs_bhv_lookup(vfsp, VFS_POSITION_QM); p = vfs_bhv_lookup(vfsp, VFS_POSITION_QM);
mp->m_qm_ops = p ? *(xfs_qmops_t *) vfs_bhv_custom(p) : xfs_qmcore_stub; mp->m_qm_ops = p ? *(xfs_qmops_t *) vfs_bhv_custom(p) : xfs_qmcore_stub;
p = vfs_bhv_lookup(vfsp, VFS_POSITION_IO); p = vfs_bhv_lookup(vfsp, VFS_POSITION_IO);
...@@ -537,6 +541,8 @@ xfs_mount( ...@@ -537,6 +541,8 @@ xfs_mount(
if (error) if (error)
goto error2; goto error2;
XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname);
return 0; return 0;
error2: error2:
...@@ -550,6 +556,7 @@ error1: ...@@ -550,6 +556,7 @@ error1:
xfs_binval(mp->m_rtdev_targp); xfs_binval(mp->m_rtdev_targp);
error0: error0:
xfs_unmountfs_close(mp, credp); xfs_unmountfs_close(mp, credp);
xfs_dmops_put(mp);
return error; return error;
} }
...@@ -640,6 +647,7 @@ out: ...@@ -640,6 +647,7 @@ out:
* and free the super block buffer & mount structures. * and free the super block buffer & mount structures.
*/ */
xfs_unmountfs(mp, credp); xfs_unmountfs(mp, credp);
xfs_dmops_put(mp);
kmem_free(mp, sizeof(xfs_mount_t)); kmem_free(mp, sizeof(xfs_mount_t));
} }
...@@ -1688,6 +1696,9 @@ xfs_vget( ...@@ -1688,6 +1696,9 @@ xfs_vget(
#define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */
#define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */
#define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */
#define MNTOPT_DMAPI "dmapi" /* DMI enabled (DMAPI / XDSM) */
#define MNTOPT_XDSM "xdsm" /* DMI enabled (DMAPI / XDSM) */
#define MNTOPT_DMI "dmi" /* DMI enabled (DMAPI / XDSM) */
STATIC unsigned long STATIC unsigned long
suffix_strtoul(char *s, char **endp, unsigned int base) suffix_strtoul(char *s, char **endp, unsigned int base)
...@@ -1878,6 +1889,12 @@ xfs_parseargs( ...@@ -1878,6 +1889,12 @@ xfs_parseargs(
args->flags &= ~XFSMNT_ATTR2; args->flags &= ~XFSMNT_ATTR2;
} else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) {
args->flags2 |= XFSMNT2_FILESTREAMS; args->flags2 |= XFSMNT2_FILESTREAMS;
} else if (!strcmp(this_char, MNTOPT_DMAPI)) {
args->flags |= XFSMNT_DMAPI;
} else if (!strcmp(this_char, MNTOPT_XDSM)) {
args->flags |= XFSMNT_DMAPI;
} else if (!strcmp(this_char, MNTOPT_DMI)) {
args->flags |= XFSMNT_DMAPI;
} else if (!strcmp(this_char, "ihashsize")) { } else if (!strcmp(this_char, "ihashsize")) {
cmn_err(CE_WARN, cmn_err(CE_WARN,
"XFS: ihashsize no longer used, option is deprecated."); "XFS: ihashsize no longer used, option is deprecated.");
...@@ -1909,6 +1926,12 @@ xfs_parseargs( ...@@ -1909,6 +1926,12 @@ xfs_parseargs(
return EINVAL; return EINVAL;
} }
if ((args->flags & XFSMNT_DMAPI) && *args->mtpt == '\0') {
printk("XFS: %s option needs the mount point option as well\n",
MNTOPT_DMAPI);
return EINVAL;
}
if ((dsunit && !dswidth) || (!dsunit && dswidth)) { if ((dsunit && !dswidth) || (!dsunit && dswidth)) {
cmn_err(CE_WARN, cmn_err(CE_WARN,
"XFS: sunit and swidth must be specified together"); "XFS: sunit and swidth must be specified together");
...@@ -2002,6 +2025,9 @@ xfs_showargs( ...@@ -2002,6 +2025,9 @@ xfs_showargs(
if (vfsp->vfs_flag & VFS_GRPID) if (vfsp->vfs_flag & VFS_GRPID)
seq_printf(m, "," MNTOPT_GRPID); seq_printf(m, "," MNTOPT_GRPID);
if (vfsp->vfs_flag & VFS_DMI)
seq_puts(m, "," MNTOPT_DMAPI);
return 0; return 0;
} }
...@@ -2032,7 +2058,6 @@ bhv_vfsops_t xfs_vfsops = { ...@@ -2032,7 +2058,6 @@ bhv_vfsops_t xfs_vfsops = {
.vfs_statvfs = xfs_statvfs, .vfs_statvfs = xfs_statvfs,
.vfs_sync = xfs_sync, .vfs_sync = xfs_sync,
.vfs_vget = xfs_vget, .vfs_vget = xfs_vget,
.vfs_dmapiops = (vfs_dmapiops_t)fs_nosys,
.vfs_quotactl = (vfs_quotactl_t)fs_nosys, .vfs_quotactl = (vfs_quotactl_t)fs_nosys,
.vfs_init_vnode = xfs_initialize_vnode, .vfs_init_vnode = xfs_initialize_vnode,
.vfs_force_shutdown = xfs_do_force_shutdown, .vfs_force_shutdown = xfs_do_force_shutdown,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment