[XFS] remove dependency of the quota module on behaviors
Mount options are now parsed by the main XFS module and rejected if quota support is not available, and there are some new quota operation for the quotactl syscall and calls to quote in the mount, unmount and sync callchains. SGI-PV: 969608 SGI-Modid: xfs-linux-melb:xfs-kern:29503a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Tim Shimmin <tes@sgi.com>
This commit is contained in:
committed by
Tim Shimmin
parent
293688ec42
commit
b09cc77109
@ -28,6 +28,8 @@
|
||||
#include "xfs_mount.h"
|
||||
#include "xfs_quota.h"
|
||||
#include "xfs_error.h"
|
||||
#include "xfs_clnt.h"
|
||||
|
||||
|
||||
STATIC struct xfs_dquot *
|
||||
xfs_dqvopchown_default(
|
||||
@ -110,7 +112,7 @@ xfs_noquota_init(
|
||||
return error;
|
||||
}
|
||||
|
||||
xfs_qmops_t xfs_qmcore_stub = {
|
||||
static struct xfs_qmops xfs_qmcore_stub = {
|
||||
.xfs_qminit = (xfs_qminit_t) xfs_noquota_init,
|
||||
.xfs_qmdone = (xfs_qmdone_t) fs_noerr,
|
||||
.xfs_qmmount = (xfs_qmmount_t) fs_noerr,
|
||||
@ -124,4 +126,38 @@ xfs_qmops_t xfs_qmcore_stub = {
|
||||
.xfs_dqvoprename = (xfs_dqvoprename_t) fs_noerr,
|
||||
.xfs_dqvopchown = xfs_dqvopchown_default,
|
||||
.xfs_dqvopchownresv = (xfs_dqvopchownresv_t) fs_noerr,
|
||||
.xfs_dqstatvfs = (xfs_dqstatvfs_t) fs_noval,
|
||||
.xfs_dqsync = (xfs_dqsync_t) fs_noerr,
|
||||
.xfs_quotactl = (xfs_quotactl_t) fs_nosys,
|
||||
};
|
||||
|
||||
int
|
||||
xfs_qmops_get(struct xfs_mount *mp, struct xfs_mount_args *args)
|
||||
{
|
||||
if (args->flags & (XFSMNT_UQUOTA | XFSMNT_PQUOTA | XFSMNT_GQUOTA)) {
|
||||
struct xfs_qmops *ops;
|
||||
|
||||
ops = symbol_get(xfs_qmcore_xfs);
|
||||
if (!ops) {
|
||||
request_module("xfs_quota");
|
||||
ops = symbol_get(xfs_qmcore_xfs);
|
||||
}
|
||||
|
||||
if (!ops) {
|
||||
cmn_err(CE_WARN, "XFS: no quota support available.");
|
||||
return EINVAL;
|
||||
}
|
||||
mp->m_qm_ops = ops;
|
||||
} else {
|
||||
mp->m_qm_ops = &xfs_qmcore_stub;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
xfs_qmops_put(struct xfs_mount *mp)
|
||||
{
|
||||
if (mp->m_qm_ops != &xfs_qmcore_stub)
|
||||
symbol_put(xfs_qmcore_xfs);
|
||||
}
|
||||
|
Reference in New Issue
Block a user