mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 01:49:36 +00:00
![Christoph Hellwig](/assets/img/avatar_default.png)
Currenly sync_quota_sb does a lot of sync and truncate action that only applies to "VFS" style quotas and is actively harmful for the sync performance in XFS. Move it into vfs_quota_sync and add a wait parameter to ->quota_sync to tell if we need it or not. My audit of the GFS2 code says it's also not needed given the way GFS2 implements quotas, but I'd be happy if this can get a detailed review. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
57 lines
1.8 KiB
C
57 lines
1.8 KiB
C
/*
|
|
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the GNU General Public License version 2.
|
|
*/
|
|
|
|
#ifndef __QUOTA_DOT_H__
|
|
#define __QUOTA_DOT_H__
|
|
|
|
struct gfs2_inode;
|
|
struct gfs2_sbd;
|
|
|
|
#define NO_QUOTA_CHANGE ((u32)-1)
|
|
|
|
extern int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
extern void gfs2_quota_unhold(struct gfs2_inode *ip);
|
|
|
|
extern int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
extern void gfs2_quota_unlock(struct gfs2_inode *ip);
|
|
|
|
extern int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
extern void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
|
|
u32 uid, u32 gid);
|
|
|
|
extern int gfs2_quota_sync(struct super_block *sb, int type, int wait);
|
|
extern int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, u32 id);
|
|
|
|
extern int gfs2_quota_init(struct gfs2_sbd *sdp);
|
|
extern void gfs2_quota_cleanup(struct gfs2_sbd *sdp);
|
|
extern int gfs2_quotad(void *data);
|
|
|
|
extern void gfs2_wake_up_statfs(struct gfs2_sbd *sdp);
|
|
|
|
static inline int gfs2_quota_lock_check(struct gfs2_inode *ip)
|
|
{
|
|
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
|
int ret;
|
|
if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
|
|
return 0;
|
|
ret = gfs2_quota_lock(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
|
if (ret)
|
|
return ret;
|
|
if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
|
|
return 0;
|
|
ret = gfs2_quota_check(ip, ip->i_inode.i_uid, ip->i_inode.i_gid);
|
|
if (ret)
|
|
gfs2_quota_unlock(ip);
|
|
return ret;
|
|
}
|
|
|
|
extern int gfs2_shrink_qd_memory(int nr, gfp_t gfp_mask);
|
|
extern const struct quotactl_ops gfs2_quotactl_ops;
|
|
|
|
#endif /* __QUOTA_DOT_H__ */
|