mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
d82661d969
This patch streamlines the quota checking in the "no quota" case by making the check inline in the calling function, thus reducing the number of function calls. Eventually we might be able to remove the checks from the gfs2_quota_lock() and gfs2_quota_check() functions, but currently we can't as there are a very few places in the code which need to call these functions directly still. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com> Cc: Abhijith Das <adas@redhat.com>
53 lines
1.5 KiB
C
53 lines
1.5 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)
|
|
|
|
int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
void gfs2_quota_unhold(struct gfs2_inode *ip);
|
|
|
|
int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
void gfs2_quota_unlock(struct gfs2_inode *ip);
|
|
|
|
int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid);
|
|
void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
|
|
u32 uid, u32 gid);
|
|
|
|
int gfs2_quota_sync(struct gfs2_sbd *sdp);
|
|
int gfs2_quota_refresh(struct gfs2_sbd *sdp, int user, u32 id);
|
|
|
|
int gfs2_quota_init(struct gfs2_sbd *sdp);
|
|
void gfs2_quota_scan(struct gfs2_sbd *sdp);
|
|
void gfs2_quota_cleanup(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;
|
|
}
|
|
|
|
#endif /* __QUOTA_DOT_H__ */
|