All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: xfs@oss.sgi.com
Subject: Re: [PATCH 13/17] xfs: get rid of indirections in the quotaops implementation
Date: Wed, 13 May 2009 04:11:02 -0400	[thread overview]
Message-ID: <20090513081102.GA21962@infradead.org> (raw)
In-Reply-To: <20090126073202.961302000@bombadil.infradead.org>

On Mon, Jan 26, 2009 at 02:31:49AM -0500, Christoph Hellwig wrote:
> Currently we call from the nicely abstracted linux quotaops into a ugly
> multiplexer just to split the calls out at the same boundary again.
> Rewrite the quota ops handling to remove that obfucation.

What's the chance of getting a full review for this one after almost
four month?

> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> 
> Index: xfs/fs/xfs/linux-2.6/xfs_super.c
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_super.c	2009-01-24 18:50:29.764553115 +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_super.c	2009-01-24 18:52:52.180428678 +0100
> @@ -68,7 +68,6 @@
>  #include <linux/freezer.h>
>  #include <linux/parser.h>
>  
> -static struct quotactl_ops xfs_quotactl_operations;
>  static struct super_operations xfs_super_operations;
>  static kmem_zone_t *xfs_ioend_zone;
>  mempool_t *xfs_ioend_pool;
> @@ -1333,57 +1332,6 @@ xfs_fs_show_options(
>  	return -xfs_showargs(XFS_M(mnt->mnt_sb), m);
>  }
>  
> -STATIC int
> -xfs_fs_quotasync(
> -	struct super_block	*sb,
> -	int			type)
> -{
> -	return -XFS_QM_QUOTACTL(XFS_M(sb), Q_XQUOTASYNC, 0, NULL);
> -}
> -
> -STATIC int
> -xfs_fs_getxstate(
> -	struct super_block	*sb,
> -	struct fs_quota_stat	*fqs)
> -{
> -	return -XFS_QM_QUOTACTL(XFS_M(sb), Q_XGETQSTAT, 0, (caddr_t)fqs);
> -}
> -
> -STATIC int
> -xfs_fs_setxstate(
> -	struct super_block	*sb,
> -	unsigned int		flags,
> -	int			op)
> -{
> -	return -XFS_QM_QUOTACTL(XFS_M(sb), op, 0, (caddr_t)&flags);
> -}
> -
> -STATIC int
> -xfs_fs_getxquota(
> -	struct super_block	*sb,
> -	int			type,
> -	qid_t			id,
> -	struct fs_disk_quota	*fdq)
> -{
> -	return -XFS_QM_QUOTACTL(XFS_M(sb),
> -				 (type == USRQUOTA) ? Q_XGETQUOTA :
> -				  ((type == GRPQUOTA) ? Q_XGETGQUOTA :
> -				   Q_XGETPQUOTA), id, (caddr_t)fdq);
> -}
> -
> -STATIC int
> -xfs_fs_setxquota(
> -	struct super_block	*sb,
> -	int			type,
> -	qid_t			id,
> -	struct fs_disk_quota	*fdq)
> -{
> -	return -XFS_QM_QUOTACTL(XFS_M(sb),
> -				 (type == USRQUOTA) ? Q_XSETQLIM :
> -				  ((type == GRPQUOTA) ? Q_XSETGQLIM :
> -				   Q_XSETPQLIM), id, (caddr_t)fdq);
> -}
> -
>  /*
>   * This function fills in xfs_mount_t fields based on mount args.
>   * Note: the superblock _has_ now been read in.
> @@ -1466,7 +1414,9 @@ xfs_fs_fill_super(
>  	sb_min_blocksize(sb, BBSIZE);
>  	sb->s_xattr = xfs_xattr_handlers;
>  	sb->s_export_op = &xfs_export_operations;
> +#ifdef CONFIG_XFS_QUOTA
>  	sb->s_qcop = &xfs_quotactl_operations;
> +#endif
>  	sb->s_op = &xfs_super_operations;
>  
>  	error = xfs_dmops_get(mp);
> @@ -1609,14 +1559,6 @@ static struct super_operations xfs_super
>  	.show_options		= xfs_fs_show_options,
>  };
>  
> -static struct quotactl_ops xfs_quotactl_operations = {
> -	.quota_sync		= xfs_fs_quotasync,
> -	.get_xstate		= xfs_fs_getxstate,
> -	.set_xstate		= xfs_fs_setxstate,
> -	.get_xquota		= xfs_fs_getxquota,
> -	.set_xquota		= xfs_fs_setxquota,
> -};
> -
>  static struct file_system_type xfs_fs_type = {
>  	.owner			= THIS_MODULE,
>  	.name			= "xfs",
> Index: xfs/fs/xfs/Makefile
> ===================================================================
> --- xfs.orig/fs/xfs/Makefile	2009-01-21 21:03:27.824295159 +0100
> +++ xfs/fs/xfs/Makefile	2009-01-24 18:52:52.184428210 +0100
> @@ -33,6 +33,7 @@ xfs-$(CONFIG_XFS_QUOTA)		+= $(addprefix 
>  				   xfs_qm_syscalls.o \
>  				   xfs_qm_bhv.o \
>  				   xfs_qm.o)
> +xfs-$(CONFIG_XFS_QUOTA)		+= linux-2.6/xfs_quotaops.o
>  
>  ifeq ($(CONFIG_XFS_QUOTA),y)
>  xfs-$(CONFIG_PROC_FS)		+= quota/xfs_qm_stats.o
> Index: xfs/fs/xfs/linux-2.6/xfs_linux.h
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_linux.h	2009-01-21 21:03:27.828295110 +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_linux.h	2009-01-24 18:52:52.191428473 +0100
> @@ -147,17 +147,6 @@
>  #define SYNCHRONIZE()	barrier()
>  #define __return_address __builtin_return_address(0)
>  
> -/*
> - * IRIX (BSD) quotactl makes use of separate commands for user/group,
> - * whereas on Linux the syscall encodes this information into the cmd
> - * field (see the QCMD macro in quota.h).  These macros help keep the
> - * code portable - they are not visible from the syscall interface.
> - */
> -#define Q_XSETGQLIM	XQM_CMD(8)	/* set groups disk limits */
> -#define Q_XGETGQUOTA	XQM_CMD(9)	/* get groups disk limits */
> -#define Q_XSETPQLIM	XQM_CMD(10)	/* set projects disk limits */
> -#define Q_XGETPQUOTA	XQM_CMD(11)	/* get projects disk limits */
> -
>  #define dfltprid	0
>  #define MAXPATHLEN	1024
>  
> Index: xfs/fs/xfs/linux-2.6/xfs_quotaops.c
> ===================================================================
> --- /dev/null	1970-01-01 00:00:00.000000000 +0000
> +++ xfs/fs/xfs/linux-2.6/xfs_quotaops.c	2009-01-24 18:52:52.192428740 +0100
> @@ -0,0 +1,157 @@
> +/*
> + * Copyright (c) 2008, Christoph Hellwig
> + * All Rights Reserved.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it would be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write the Free Software Foundation,
> + * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +#include "xfs.h"
> +#include "xfs_dmapi.h"
> +#include "xfs_sb.h"
> +#include "xfs_inum.h"
> +#include "xfs_ag.h"
> +#include "xfs_mount.h"
> +#include "xfs_quota.h"
> +#include "xfs_log.h"
> +#include "xfs_trans.h"
> +#include "xfs_bmap_btree.h"
> +#include "xfs_inode.h"
> +#include "quota/xfs_qm.h"
> +#include <linux/quota.h>
> +
> +
> +STATIC int
> +xfs_quota_type(int type)
> +{
> +	switch (type) {
> +	case USRQUOTA:
> +		return XFS_DQ_USER;
> +	case GRPQUOTA:
> +		return XFS_DQ_GROUP;
> +	default:
> +		return XFS_DQ_PROJ;
> +	}
> +}
> +
> +STATIC int
> +xfs_fs_quota_sync(
> +	struct super_block	*sb,
> +	int			type)
> +{
> +	struct xfs_mount	*mp = XFS_M(sb);
> +
> +	if (!XFS_IS_QUOTA_RUNNING(mp))
> +		return -ENOSYS;
> +	return -xfs_sync_inodes(mp, SYNC_DELWRI);
> +}
> +
> +STATIC int
> +xfs_fs_get_xstate(
> +	struct super_block	*sb,
> +	struct fs_quota_stat	*fqs)
> +{
> +	struct xfs_mount	*mp = XFS_M(sb);
> +
> +	if (!XFS_IS_QUOTA_RUNNING(mp))
> +		return -ENOSYS;
> +	return xfs_qm_scall_getqstat(mp, fqs);
> +}
> +
> +STATIC int
> +xfs_fs_set_xstate(
> +	struct super_block	*sb,
> +	unsigned int		uflags,
> +	int			op)
> +{
> +	struct xfs_mount	*mp = XFS_M(sb);
> +	unsigned int		flags = 0;
> +
> +	if (sb->s_flags & MS_RDONLY)
> +		return -EROFS;
> +	if (!XFS_IS_QUOTA_RUNNING(mp))
> +		return -ENOSYS;
> +	if (!capable(CAP_SYS_ADMIN))
> +		return -EPERM;
> +
> +	if (uflags & XFS_QUOTA_UDQ_ACCT)
> +		flags |= XFS_UQUOTA_ACCT;
> +	if (uflags & XFS_QUOTA_PDQ_ACCT)
> +		flags |= XFS_PQUOTA_ACCT;
> +	if (uflags & XFS_QUOTA_GDQ_ACCT)
> +		flags |= XFS_GQUOTA_ACCT;
> +	if (uflags & XFS_QUOTA_UDQ_ENFD)
> +		flags |= XFS_UQUOTA_ENFD;
> +	if (uflags & (XFS_QUOTA_PDQ_ENFD|XFS_QUOTA_GDQ_ENFD))
> +		flags |= XFS_OQUOTA_ENFD;
> +
> +	switch (op) {
> +	case Q_XQUOTAON:
> +		return -xfs_qm_scall_quotaon(mp, flags);
> +	case Q_XQUOTAOFF:
> +		if (!XFS_IS_QUOTA_ON(mp))
> +			return -EINVAL;
> +		return -xfs_qm_scall_quotaoff(mp, flags);
> +	case Q_XQUOTARM:
> +		if (XFS_IS_QUOTA_ON(mp))
> +			return -EINVAL;
> +		return -xfs_qm_scall_trunc_qfiles(mp, flags);
> +	}
> +
> +	return -EINVAL;
> +}
> +
> +STATIC int
> +xfs_fs_get_xquota(
> +	struct super_block	*sb,
> +	int			type,
> +	qid_t			id,
> +	struct fs_disk_quota	*fdq)
> +{
> +	struct xfs_mount	*mp = XFS_M(sb);
> +
> +	if (!XFS_IS_QUOTA_RUNNING(mp))
> +		return -ENOSYS;
> +	if (!XFS_IS_QUOTA_ON(mp))
> +		return -ESRCH;
> +
> +	return -xfs_qm_scall_getquota(mp, id, xfs_quota_type(type), fdq);
> +}
> +
> +STATIC int
> +xfs_fs_set_xquota(
> +	struct super_block	*sb,
> +	int			type,
> +	qid_t			id,
> +	struct fs_disk_quota	*fdq)
> +{
> +	struct xfs_mount	*mp = XFS_M(sb);
> +
> +	if (sb->s_flags & MS_RDONLY)
> +		return -EROFS;
> +	if (!XFS_IS_QUOTA_RUNNING(mp))
> +		return -ENOSYS;
> +	if (!XFS_IS_QUOTA_ON(mp))
> +		return -ESRCH;
> +	if (!capable(CAP_SYS_ADMIN))
> +		return -EPERM;
> +
> +	return xfs_qm_scall_setqlim(mp, id, xfs_quota_type(type), fdq);
> +}
> +
> +struct quotactl_ops xfs_quotactl_operations = {
> +	.quota_sync		= xfs_fs_quota_sync,
> +	.get_xstate		= xfs_fs_get_xstate,
> +	.set_xstate		= xfs_fs_set_xstate,
> +	.get_xquota		= xfs_fs_get_xquota,
> +	.set_xquota		= xfs_fs_set_xquota,
> +};
> Index: xfs/fs/xfs/linux-2.6/xfs_super.h
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_super.h	2009-01-21 21:03:27.831294794 +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_super.h	2009-01-24 18:52:52.192428740 +0100
> @@ -93,6 +93,7 @@ extern void xfs_blkdev_issue_flush(struc
>  
>  extern const struct export_operations xfs_export_operations;
>  extern struct xattr_handler *xfs_xattr_handlers[];
> +extern struct quotactl_ops xfs_quotactl_operations;
>  
>  #define XFS_M(sb)		((struct xfs_mount *)((sb)->s_fs_info))
>  
> Index: xfs/fs/xfs/linux-2.6/xfs_sync.h
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h	2009-01-24 17:58:49.029903800 +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_sync.h	2009-01-24 18:52:52.203535043 +0100
> @@ -19,6 +19,7 @@
>  #define XFS_SYNC_H 1
>  
>  struct xfs_mount;
> +struct xfs_perag;
>  
>  typedef struct bhv_vfs_sync_work {
>  	struct list_head	w_list;
> Index: xfs/fs/xfs/quota/xfs_qm.h
> ===================================================================
> --- xfs.orig/fs/xfs/quota/xfs_qm.h	2009-01-21 21:03:27.835294745 +0100
> +++ xfs/fs/xfs/quota/xfs_qm.h	2009-01-24 18:52:52.206583965 +0100
> @@ -178,6 +178,16 @@ extern void		xfs_qm_dqdetach(xfs_inode_t
>  extern int		xfs_qm_dqpurge_all(xfs_mount_t *, uint);
>  extern void		xfs_qm_dqrele_all_inodes(xfs_mount_t *, uint);
>  
> +/* quota ops */
> +extern int		xfs_qm_scall_trunc_qfiles(xfs_mount_t *, uint);
> +extern int		xfs_qm_scall_getquota(xfs_mount_t *, xfs_dqid_t, uint,
> +					fs_disk_quota_t *);
> +extern int		xfs_qm_scall_setqlim(xfs_mount_t *, xfs_dqid_t, uint,
> +					fs_disk_quota_t *);
> +extern int		xfs_qm_scall_getqstat(xfs_mount_t *, fs_quota_stat_t *);
> +extern int		xfs_qm_scall_quotaon(xfs_mount_t *, uint);
> +extern int		xfs_qm_scall_quotaoff(xfs_mount_t *, uint);
> +
>  /* vop stuff */
>  extern int		xfs_qm_vop_dqalloc(xfs_mount_t *, xfs_inode_t *,
>  					uid_t, gid_t, prid_t, uint,
> @@ -196,10 +206,6 @@ extern void		xfs_qm_freelist_append(xfs_
>  extern void		xfs_qm_freelist_unlink(xfs_dquot_t *);
>  extern int		xfs_qm_freelist_lock_nowait(xfs_qm_t *);
>  
> -/* system call interface */
> -extern int		xfs_qm_quotactl(struct xfs_mount *, int, int,
> -				xfs_caddr_t);
> -
>  #ifdef DEBUG
>  extern int		xfs_qm_internalqcheck(xfs_mount_t *);
>  #else
> Index: xfs/fs/xfs/quota/xfs_qm_bhv.c
> ===================================================================
> --- xfs.orig/fs/xfs/quota/xfs_qm_bhv.c	2009-01-21 21:03:27.836295012 +0100
> +++ xfs/fs/xfs/quota/xfs_qm_bhv.c	2009-01-24 18:52:52.206583965 +0100
> @@ -235,7 +235,6 @@ struct xfs_qmops xfs_qmcore_xfs = {
>  	.xfs_dqvopchownresv	= xfs_qm_vop_chown_reserve,
>  	.xfs_dqstatvfs		= xfs_qm_statvfs,
>  	.xfs_dqsync		= xfs_qm_sync,
> -	.xfs_quotactl		= xfs_qm_quotactl,
>  	.xfs_dqtrxops		= &xfs_trans_dquot_ops,
>  };
>  EXPORT_SYMBOL(xfs_qmcore_xfs);
> Index: xfs/fs/xfs/quota/xfs_qm_syscalls.c
> ===================================================================
> --- xfs.orig/fs/xfs/quota/xfs_qm_syscalls.c	2009-01-21 21:03:27.836295012 +0100
> +++ xfs/fs/xfs/quota/xfs_qm_syscalls.c	2009-01-24 18:52:52.207553991 +0100
> @@ -57,135 +57,16 @@
>  # define qdprintk(s, args...)	do { } while (0)
>  #endif
>  
> -STATIC int	xfs_qm_scall_trunc_qfiles(xfs_mount_t *, uint);
> -STATIC int	xfs_qm_scall_getquota(xfs_mount_t *, xfs_dqid_t, uint,
> -					fs_disk_quota_t *);
> -STATIC int	xfs_qm_scall_getqstat(xfs_mount_t *, fs_quota_stat_t *);
> -STATIC int	xfs_qm_scall_setqlim(xfs_mount_t *, xfs_dqid_t, uint,
> -					fs_disk_quota_t *);
> -STATIC int	xfs_qm_scall_quotaon(xfs_mount_t *, uint);
> -STATIC int	xfs_qm_scall_quotaoff(xfs_mount_t *, uint, boolean_t);
>  STATIC int	xfs_qm_log_quotaoff(xfs_mount_t *, xfs_qoff_logitem_t **, uint);
>  STATIC int	xfs_qm_log_quotaoff_end(xfs_mount_t *, xfs_qoff_logitem_t *,
>  					uint);
> -STATIC uint	xfs_qm_import_flags(uint);
>  STATIC uint	xfs_qm_export_flags(uint);
> -STATIC uint	xfs_qm_import_qtype_flags(uint);
>  STATIC uint	xfs_qm_export_qtype_flags(uint);
>  STATIC void	xfs_qm_export_dquot(xfs_mount_t *, xfs_disk_dquot_t *,
>  					fs_disk_quota_t *);
>  
>  
>  /*
> - * The main distribution switch of all XFS quotactl system calls.
> - */
> -int
> -xfs_qm_quotactl(
> -	xfs_mount_t	*mp,
> -	int		cmd,
> -	int		id,
> -	xfs_caddr_t	addr)
> -{
> -	int		error;
> -
> -	ASSERT(addr != NULL || cmd == Q_XQUOTASYNC);
> -
> -	/*
> -	 * The following commands are valid even when quotaoff.
> -	 */
> -	switch (cmd) {
> -	case Q_XQUOTARM:
> -		/*
> -		 * Truncate quota files. quota must be off.
> -		 */
> -		if (XFS_IS_QUOTA_ON(mp))
> -			return XFS_ERROR(EINVAL);
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		return (xfs_qm_scall_trunc_qfiles(mp,
> -			       xfs_qm_import_qtype_flags(*(uint *)addr)));
> -
> -	case Q_XGETQSTAT:
> -		/*
> -		 * Get quota status information.
> -		 */
> -		return (xfs_qm_scall_getqstat(mp, (fs_quota_stat_t *)addr));
> -
> -	case Q_XQUOTAON:
> -		/*
> -		 * QUOTAON - enabling quota enforcement.
> -		 * Quota accounting must be turned on at mount time.
> -		 */
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		return (xfs_qm_scall_quotaon(mp,
> -					  xfs_qm_import_flags(*(uint *)addr)));
> -
> -	case Q_XQUOTAOFF:
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		break;
> -
> -	case Q_XQUOTASYNC:
> -		return xfs_sync_inodes(mp, SYNC_DELWRI);
> -
> -	default:
> -		break;
> -	}
> -
> -	if (! XFS_IS_QUOTA_ON(mp))
> -		return XFS_ERROR(ESRCH);
> -
> -	switch (cmd) {
> -	case Q_XQUOTAOFF:
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		error = xfs_qm_scall_quotaoff(mp,
> -					    xfs_qm_import_flags(*(uint *)addr),
> -					    B_FALSE);
> -		break;
> -
> -	case Q_XGETQUOTA:
> -		error = xfs_qm_scall_getquota(mp, (xfs_dqid_t)id, XFS_DQ_USER,
> -					(fs_disk_quota_t *)addr);
> -		break;
> -	case Q_XGETGQUOTA:
> -		error = xfs_qm_scall_getquota(mp, (xfs_dqid_t)id, XFS_DQ_GROUP,
> -					(fs_disk_quota_t *)addr);
> -		break;
> -	case Q_XGETPQUOTA:
> -		error = xfs_qm_scall_getquota(mp, (xfs_dqid_t)id, XFS_DQ_PROJ,
> -					(fs_disk_quota_t *)addr);
> -		break;
> -
> -	case Q_XSETQLIM:
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_USER,
> -					     (fs_disk_quota_t *)addr);
> -		break;
> -	case Q_XSETGQLIM:
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_GROUP,
> -					     (fs_disk_quota_t *)addr);
> -		break;
> -	case Q_XSETPQLIM:
> -		if (mp->m_flags & XFS_MOUNT_RDONLY)
> -			return XFS_ERROR(EROFS);
> -		error = xfs_qm_scall_setqlim(mp, (xfs_dqid_t)id, XFS_DQ_PROJ,
> -					     (fs_disk_quota_t *)addr);
> -		break;
> -
> -	default:
> -		error = XFS_ERROR(EINVAL);
> -		break;
> -	}
> -
> -	return (error);
> -}
> -
> -/*
>   * Turn off quota accounting and/or enforcement for all udquots and/or
>   * gdquots. Called only at unmount time.
>   *
> @@ -193,11 +74,10 @@ xfs_qm_quotactl(
>   * incore, and modifies the ondisk dquot directly. Therefore, for example,
>   * it is an error to call this twice, without purging the cache.
>   */
> -STATIC int
> +int
>  xfs_qm_scall_quotaoff(
>  	xfs_mount_t		*mp,
> -	uint			flags,
> -	boolean_t		force)
> +	uint			flags)
>  {
>  	uint			dqtype;
>  	int			error;
> @@ -205,8 +85,6 @@ xfs_qm_scall_quotaoff(
>  	xfs_qoff_logitem_t	*qoffstart;
>  	int			nculprits;
>  
> -	if (!force && !capable(CAP_SYS_ADMIN))
> -		return XFS_ERROR(EPERM);
>  	/*
>  	 * No file system can have quotas enabled on disk but not in core.
>  	 * Note that quota utilities (like quotaoff) _expect_
> @@ -375,7 +253,7 @@ out_error:
>  	return (error);
>  }
>  
> -STATIC int
> +int
>  xfs_qm_scall_trunc_qfiles(
>  	xfs_mount_t	*mp,
>  	uint		flags)
> @@ -383,8 +261,6 @@ xfs_qm_scall_trunc_qfiles(
>  	int		error = 0, error2 = 0;
>  	xfs_inode_t	*qip;
>  
> -	if (!capable(CAP_SYS_ADMIN))
> -		return XFS_ERROR(EPERM);
>  	if (!xfs_sb_version_hasquota(&mp->m_sb) || flags == 0) {
>  		qdprintk("qtrunc flags=%x m_qflags=%x\n", flags, mp->m_qflags);
>  		return XFS_ERROR(EINVAL);
> @@ -416,7 +292,7 @@ xfs_qm_scall_trunc_qfiles(
>   * effect immediately.
>   * (Switching on quota accounting must be done at mount time.)
>   */
> -STATIC int
> +int
>  xfs_qm_scall_quotaon(
>  	xfs_mount_t	*mp,
>  	uint		flags)
> @@ -426,9 +302,6 @@ xfs_qm_scall_quotaon(
>  	uint		accflags;
>  	__int64_t	sbflags;
>  
> -	if (!capable(CAP_SYS_ADMIN))
> -		return XFS_ERROR(EPERM);
> -
>  	flags &= (XFS_ALL_QUOTA_ACCT | XFS_ALL_QUOTA_ENFD);
>  	/*
>  	 * Switching on quota accounting must be done at mount time.
> @@ -517,7 +390,7 @@ xfs_qm_scall_quotaon(
>  /*
>   * Return quota status information, such as uquota-off, enforcements, etc.
>   */
> -STATIC int
> +int
>  xfs_qm_scall_getqstat(
>  	xfs_mount_t	*mp,
>  	fs_quota_stat_t *out)
> @@ -582,7 +455,7 @@ xfs_qm_scall_getqstat(
>  /*
>   * Adjust quota limits, and start/stop timers accordingly.
>   */
> -STATIC int
> +int
>  xfs_qm_scall_setqlim(
>  	xfs_mount_t		*mp,
>  	xfs_dqid_t		id,
> @@ -595,9 +468,6 @@ xfs_qm_scall_setqlim(
>  	int			error;
>  	xfs_qcnt_t		hard, soft;
>  
> -	if (!capable(CAP_SYS_ADMIN))
> -		return XFS_ERROR(EPERM);
> -
>  	if ((newlim->d_fieldmask &
>  	    (FS_DQ_LIMIT_MASK|FS_DQ_TIMER_MASK|FS_DQ_WARNS_MASK)) == 0)
>  		return (0);
> @@ -742,7 +612,7 @@ xfs_qm_scall_setqlim(
>  	return error;
>  }
>  
> -STATIC int
> +int
>  xfs_qm_scall_getquota(
>  	xfs_mount_t	*mp,
>  	xfs_dqid_t	id,
> @@ -935,30 +805,6 @@ xfs_qm_export_dquot(
>  }
>  
>  STATIC uint
> -xfs_qm_import_qtype_flags(
> -	uint		uflags)
> -{
> -	uint		oflags = 0;
> -
> -	/*
> -	 * Can't be more than one, or none.
> -	 */
> -	if (((uflags & (XFS_GROUP_QUOTA | XFS_USER_QUOTA)) ==
> -			(XFS_GROUP_QUOTA | XFS_USER_QUOTA)) ||
> -	    ((uflags & (XFS_GROUP_QUOTA | XFS_PROJ_QUOTA)) ==
> -			(XFS_GROUP_QUOTA | XFS_PROJ_QUOTA)) ||
> -	    ((uflags & (XFS_USER_QUOTA | XFS_PROJ_QUOTA)) ==
> -			(XFS_USER_QUOTA | XFS_PROJ_QUOTA)) ||
> -	    ((uflags & (XFS_GROUP_QUOTA|XFS_USER_QUOTA|XFS_PROJ_QUOTA)) == 0))
> -		return (0);
> -
> -	oflags |= (uflags & XFS_USER_QUOTA) ? XFS_DQ_USER : 0;
> -	oflags |= (uflags & XFS_PROJ_QUOTA) ? XFS_DQ_PROJ : 0;
> -	oflags |= (uflags & XFS_GROUP_QUOTA) ? XFS_DQ_GROUP: 0;
> -	return oflags;
> -}
> -
> -STATIC uint
>  xfs_qm_export_qtype_flags(
>  	uint flags)
>  {
> @@ -979,26 +825,6 @@ xfs_qm_export_qtype_flags(
>  }
>  
>  STATIC uint
> -xfs_qm_import_flags(
> -	uint uflags)
> -{
> -	uint flags = 0;
> -
> -	if (uflags & XFS_QUOTA_UDQ_ACCT)
> -		flags |= XFS_UQUOTA_ACCT;
> -	if (uflags & XFS_QUOTA_PDQ_ACCT)
> -		flags |= XFS_PQUOTA_ACCT;
> -	if (uflags & XFS_QUOTA_GDQ_ACCT)
> -		flags |= XFS_GQUOTA_ACCT;
> -	if (uflags & XFS_QUOTA_UDQ_ENFD)
> -		flags |= XFS_UQUOTA_ENFD;
> -	if (uflags & (XFS_QUOTA_PDQ_ENFD|XFS_QUOTA_GDQ_ENFD))
> -		flags |= XFS_OQUOTA_ENFD;
> -	return (flags);
> -}
> -
> -
> -STATIC uint
>  xfs_qm_export_flags(
>  	uint flags)
>  {
> Index: xfs/fs/xfs/xfs_mount.h
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_mount.h	2009-01-24 18:32:57.980458591 +0100
> +++ xfs/fs/xfs/xfs_mount.h	2009-01-24 18:52:52.208554118 +0100
> @@ -136,7 +136,6 @@ typedef int	(*xfs_dqvopchownresv_t)(stru
>  			struct xfs_dquot *, struct xfs_dquot *, uint);
>  typedef void	(*xfs_dqstatvfs_t)(struct xfs_inode *, struct kstatfs *);
>  typedef int	(*xfs_dqsync_t)(struct xfs_mount *, int flags);
> -typedef int	(*xfs_quotactl_t)(struct xfs_mount *, int, int, xfs_caddr_t);
>  
>  typedef struct xfs_qmops {
>  	xfs_qminit_t		xfs_qminit;
> @@ -154,7 +153,6 @@ typedef struct xfs_qmops {
>  	xfs_dqvopchownresv_t	xfs_dqvopchownresv;
>  	xfs_dqstatvfs_t		xfs_dqstatvfs;
>  	xfs_dqsync_t		xfs_dqsync;
> -	xfs_quotactl_t		xfs_quotactl;
>  	struct xfs_dqtrxops	*xfs_dqtrxops;
>  } xfs_qmops_t;
>  
> @@ -188,8 +186,6 @@ typedef struct xfs_qmops {
>  	(*(ip)->i_mount->m_qm_ops->xfs_dqstatvfs)(ip, statp)
>  #define XFS_QM_DQSYNC(mp, flags) \
>  	(*(mp)->m_qm_ops->xfs_dqsync)(mp, flags)
> -#define XFS_QM_QUOTACTL(mp, cmd, id, addr) \
> -	(*(mp)->m_qm_ops->xfs_quotactl)(mp, cmd, id, addr)
>  
>  #ifdef HAVE_PERCPU_SB
>  
> Index: xfs/fs/xfs/xfs_qmops.c
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_qmops.c	2009-01-21 21:03:27.866294994 +0100
> +++ xfs/fs/xfs/xfs_qmops.c	2009-01-24 18:52:52.208554118 +0100
> @@ -126,7 +126,6 @@ static struct xfs_qmops xfs_qmcore_stub 
>  	.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
> Index: xfs/fs/xfs/xfs_quota.h
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_quota.h	2009-01-21 21:03:27.866294994 +0100
> +++ xfs/fs/xfs/xfs_quota.h	2009-01-24 18:52:52.211583834 +0100
> @@ -18,6 +18,8 @@
>  #ifndef __XFS_QUOTA_H__
>  #define __XFS_QUOTA_H__
>  
> +struct xfs_trans;
> +
>  /*
>   * The ondisk form of a dquot structure.
>   */
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
---end quoted text---

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2009-05-13  8:10 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-26  7:31 [PATCH 00/17] 2.6.30 queue Christoph Hellwig
2009-01-26  7:31 ` [PATCH 01/17] xfs: cleanup error handling in xfs_mountfs: Christoph Hellwig
2009-01-26 21:39   ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 02/17] xfs: make sure to free the real-time inodes in the mount error path Christoph Hellwig
2009-01-26 22:02   ` Felix Blyakher
2009-01-28 20:24   ` Martin Steigerwald
2009-01-26  7:31 ` [PATCH 03/17] xfs: cleanup handling in xfs_swap_extents Christoph Hellwig
2009-01-26  7:55   ` Christoph Hellwig
2009-01-27  0:27     ` [PATCH] xfs: cleanup error " Josef 'Jeff' Sipek
2009-01-28 20:25       ` Martin Steigerwald
2009-01-26 22:13   ` [PATCH 03/17] xfs: cleanup " Felix Blyakher
2009-05-08  0:45   ` Eric Sandeen
2009-01-26  7:31 ` [PATCH 04/17] xfs: tiny cleanup for xfs_link Christoph Hellwig
2009-01-26 22:23   ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 05/17] xfs: remove unused XFS_MOUNT_ILOCK/XFS_MOUNT_IUNLOCK Christoph Hellwig
2009-01-26 23:43   ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 06/17] xfs: remove iclog calculation special cases Christoph Hellwig
2009-02-09  2:15   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 07/17] xfs: remove superflous inobt macros Christoph Hellwig
2009-02-09  2:16   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 08/17] xfs: remove uchar_t/ushort_t/uint_t/ulong_t types Christoph Hellwig
2009-02-09  2:18   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 09/17] xfs: cleanup xfs_find_handle Christoph Hellwig
2009-02-06  5:20   ` Felix Blyakher
2009-02-06  7:17     ` Christoph Hellwig
2009-02-06 20:31       ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 10/17] xfs: factor out attr fork reset handling Christoph Hellwig
2009-01-27 16:53   ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 11/17] xfs: merge xfs_inode_flush into xfs_fs_write_inode Christoph Hellwig
2009-01-27 17:37   ` Felix Blyakher
2009-02-01  0:54   ` Dave Chinner
2009-02-15  6:42   ` Dave Chinner
2009-02-15 20:13     ` Christoph Hellwig
2009-02-16  3:06       ` Dave Chinner
2009-01-26  7:31 ` [PATCH 12/17] xfs: merge xfs_mkdir into xfs_create Christoph Hellwig
2009-02-09  2:28   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 13/17] xfs: get rid of indirections in the quotaops implementation Christoph Hellwig
2009-02-09  2:41   ` Dave Chinner
2009-02-09  7:46     ` Christoph Hellwig
2009-05-13  8:11   ` Christoph Hellwig [this message]
2009-01-26  7:31 ` [PATCH 14/17] xfs: remove the unused XFS_QMOPT_DQLOCK flag Christoph Hellwig
2009-02-08  0:35   ` Felix Blyakher
2009-01-26  7:31 ` [PATCH 15/17] xfs: remove XFS_QM_LOCK/XFS_QM_UNLOCK/XFS_QM_HOLD/XFS_QM_RELE Christoph Hellwig
2009-02-09  2:42   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 16/17] xfs: use mutex_is_locked in XFS_DQ_IS_LOCKED Christoph Hellwig
2009-02-09  2:42   ` Dave Chinner
2009-01-26  7:31 ` [PATCH 17/17] xfs: sanitize qh_lock wrappers Christoph Hellwig
2009-02-09  2:45   ` Dave Chinner
2009-02-04 19:37 ` [PATCH 00/17] 2.6.30 queue Christoph Hellwig
2009-02-08 21:12   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090513081102.GA21962@infradead.org \
    --to=hch@infradead.org \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.