diff options
Diffstat (limited to 'fs/xfs/xfs_vfsops.c')
-rw-r--r-- | fs/xfs/xfs_vfsops.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index 8c0e02279249..1cf8f54d8aa9 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
@@ -326,6 +326,8 @@ xfs_start_flags( | |||
326 | if (ap->flags2 & XFSMNT2_FILESTREAMS) | 326 | if (ap->flags2 & XFSMNT2_FILESTREAMS) |
327 | mp->m_flags |= XFS_MOUNT_FILESTREAMS; | 327 | mp->m_flags |= XFS_MOUNT_FILESTREAMS; |
328 | 328 | ||
329 | if (ap->flags & XFSMNT_DMAPI) | ||
330 | vfs->vfs_flag |= VFS_DMI; | ||
329 | return 0; | 331 | return 0; |
330 | } | 332 | } |
331 | 333 | ||
@@ -430,11 +432,13 @@ xfs_mount( | |||
430 | ddev = vfsp->vfs_super->s_bdev; | 432 | ddev = vfsp->vfs_super->s_bdev; |
431 | logdev = rtdev = NULL; | 433 | logdev = rtdev = NULL; |
432 | 434 | ||
435 | error = xfs_dmops_get(mp, args); | ||
436 | if (error) | ||
437 | return error; | ||
438 | |||
433 | /* | 439 | /* |
434 | * Setup xfs_mount function vectors from available behaviors | 440 | * Setup xfs_mount function vectors from available behaviors |
435 | */ | 441 | */ |
436 | p = vfs_bhv_lookup(vfsp, VFS_POSITION_DM); | ||
437 | mp->m_dm_ops = p ? *(xfs_dmops_t *) vfs_bhv_custom(p) : xfs_dmcore_stub; | ||
438 | p = vfs_bhv_lookup(vfsp, VFS_POSITION_QM); | 442 | p = vfs_bhv_lookup(vfsp, VFS_POSITION_QM); |
439 | mp->m_qm_ops = p ? *(xfs_qmops_t *) vfs_bhv_custom(p) : xfs_qmcore_stub; | 443 | mp->m_qm_ops = p ? *(xfs_qmops_t *) vfs_bhv_custom(p) : xfs_qmcore_stub; |
440 | p = vfs_bhv_lookup(vfsp, VFS_POSITION_IO); | 444 | p = vfs_bhv_lookup(vfsp, VFS_POSITION_IO); |
@@ -537,6 +541,8 @@ xfs_mount( | |||
537 | if (error) | 541 | if (error) |
538 | goto error2; | 542 | goto error2; |
539 | 543 | ||
544 | XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); | ||
545 | |||
540 | return 0; | 546 | return 0; |
541 | 547 | ||
542 | error2: | 548 | error2: |
@@ -550,6 +556,7 @@ error1: | |||
550 | xfs_binval(mp->m_rtdev_targp); | 556 | xfs_binval(mp->m_rtdev_targp); |
551 | error0: | 557 | error0: |
552 | xfs_unmountfs_close(mp, credp); | 558 | xfs_unmountfs_close(mp, credp); |
559 | xfs_dmops_put(mp); | ||
553 | return error; | 560 | return error; |
554 | } | 561 | } |
555 | 562 | ||
@@ -640,6 +647,7 @@ out: | |||
640 | * and free the super block buffer & mount structures. | 647 | * and free the super block buffer & mount structures. |
641 | */ | 648 | */ |
642 | xfs_unmountfs(mp, credp); | 649 | xfs_unmountfs(mp, credp); |
650 | xfs_dmops_put(mp); | ||
643 | kmem_free(mp, sizeof(xfs_mount_t)); | 651 | kmem_free(mp, sizeof(xfs_mount_t)); |
644 | } | 652 | } |
645 | 653 | ||
@@ -1688,6 +1696,9 @@ xfs_vget( | |||
1688 | #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ | 1696 | #define MNTOPT_ATTR2 "attr2" /* do use attr2 attribute format */ |
1689 | #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ | 1697 | #define MNTOPT_NOATTR2 "noattr2" /* do not use attr2 attribute format */ |
1690 | #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ | 1698 | #define MNTOPT_FILESTREAM "filestreams" /* use filestreams allocator */ |
1699 | #define MNTOPT_DMAPI "dmapi" /* DMI enabled (DMAPI / XDSM) */ | ||
1700 | #define MNTOPT_XDSM "xdsm" /* DMI enabled (DMAPI / XDSM) */ | ||
1701 | #define MNTOPT_DMI "dmi" /* DMI enabled (DMAPI / XDSM) */ | ||
1691 | 1702 | ||
1692 | STATIC unsigned long | 1703 | STATIC unsigned long |
1693 | suffix_strtoul(char *s, char **endp, unsigned int base) | 1704 | suffix_strtoul(char *s, char **endp, unsigned int base) |
@@ -1878,6 +1889,12 @@ xfs_parseargs( | |||
1878 | args->flags &= ~XFSMNT_ATTR2; | 1889 | args->flags &= ~XFSMNT_ATTR2; |
1879 | } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { | 1890 | } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { |
1880 | args->flags2 |= XFSMNT2_FILESTREAMS; | 1891 | args->flags2 |= XFSMNT2_FILESTREAMS; |
1892 | } else if (!strcmp(this_char, MNTOPT_DMAPI)) { | ||
1893 | args->flags |= XFSMNT_DMAPI; | ||
1894 | } else if (!strcmp(this_char, MNTOPT_XDSM)) { | ||
1895 | args->flags |= XFSMNT_DMAPI; | ||
1896 | } else if (!strcmp(this_char, MNTOPT_DMI)) { | ||
1897 | args->flags |= XFSMNT_DMAPI; | ||
1881 | } else if (!strcmp(this_char, "ihashsize")) { | 1898 | } else if (!strcmp(this_char, "ihashsize")) { |
1882 | cmn_err(CE_WARN, | 1899 | cmn_err(CE_WARN, |
1883 | "XFS: ihashsize no longer used, option is deprecated."); | 1900 | "XFS: ihashsize no longer used, option is deprecated."); |
@@ -1909,6 +1926,12 @@ xfs_parseargs( | |||
1909 | return EINVAL; | 1926 | return EINVAL; |
1910 | } | 1927 | } |
1911 | 1928 | ||
1929 | if ((args->flags & XFSMNT_DMAPI) && *args->mtpt == '\0') { | ||
1930 | printk("XFS: %s option needs the mount point option as well\n", | ||
1931 | MNTOPT_DMAPI); | ||
1932 | return EINVAL; | ||
1933 | } | ||
1934 | |||
1912 | if ((dsunit && !dswidth) || (!dsunit && dswidth)) { | 1935 | if ((dsunit && !dswidth) || (!dsunit && dswidth)) { |
1913 | cmn_err(CE_WARN, | 1936 | cmn_err(CE_WARN, |
1914 | "XFS: sunit and swidth must be specified together"); | 1937 | "XFS: sunit and swidth must be specified together"); |
@@ -2002,6 +2025,9 @@ xfs_showargs( | |||
2002 | if (vfsp->vfs_flag & VFS_GRPID) | 2025 | if (vfsp->vfs_flag & VFS_GRPID) |
2003 | seq_printf(m, "," MNTOPT_GRPID); | 2026 | seq_printf(m, "," MNTOPT_GRPID); |
2004 | 2027 | ||
2028 | if (vfsp->vfs_flag & VFS_DMI) | ||
2029 | seq_puts(m, "," MNTOPT_DMAPI); | ||
2030 | |||
2005 | return 0; | 2031 | return 0; |
2006 | } | 2032 | } |
2007 | 2033 | ||
@@ -2032,7 +2058,6 @@ bhv_vfsops_t xfs_vfsops = { | |||
2032 | .vfs_statvfs = xfs_statvfs, | 2058 | .vfs_statvfs = xfs_statvfs, |
2033 | .vfs_sync = xfs_sync, | 2059 | .vfs_sync = xfs_sync, |
2034 | .vfs_vget = xfs_vget, | 2060 | .vfs_vget = xfs_vget, |
2035 | .vfs_dmapiops = (vfs_dmapiops_t)fs_nosys, | ||
2036 | .vfs_quotactl = (vfs_quotactl_t)fs_nosys, | 2061 | .vfs_quotactl = (vfs_quotactl_t)fs_nosys, |
2037 | .vfs_init_vnode = xfs_initialize_vnode, | 2062 | .vfs_init_vnode = xfs_initialize_vnode, |
2038 | .vfs_force_shutdown = xfs_do_force_shutdown, | 2063 | .vfs_force_shutdown = xfs_do_force_shutdown, |