2006-01-16 16:50:04 +00:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2006-05-18 15:09:15 -04:00
* Copyright ( C ) 2004 - 2006 Red Hat , Inc . All rights reserved .
2006-01-16 16:50:04 +00:00
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2006-09-01 11:05:15 -04:00
* of the GNU General Public License version 2.
2006-01-16 16:50:04 +00:00
*/
# ifndef __QUOTA_DOT_H__
# define __QUOTA_DOT_H__
2013-11-04 10:15:08 +00:00
# include <linux/list_lru.h>
2006-09-05 10:39:21 -04:00
struct gfs2_inode ;
struct gfs2_sbd ;
2013-01-31 17:49:26 -08:00
# define NO_UID_QUOTA_CHANGE INVALID_UID
# define NO_GID_QUOTA_CHANGE INVALID_GID
2006-01-16 16:50:04 +00:00
2015-10-26 10:40:28 -05:00
extern int gfs2_qa_alloc ( struct gfs2_inode * ip ) ;
2015-07-16 08:28:04 -05:00
extern void gfs2_qa_delete ( struct gfs2_inode * ip , atomic_t * wcount ) ;
2013-01-31 20:27:54 -08:00
extern int gfs2_quota_hold ( struct gfs2_inode * ip , kuid_t uid , kgid_t gid ) ;
2008-11-19 10:08:22 +00:00
extern void gfs2_quota_unhold ( struct gfs2_inode * ip ) ;
2006-01-16 16:50:04 +00:00
2013-01-31 20:27:54 -08:00
extern int gfs2_quota_lock ( struct gfs2_inode * ip , kuid_t uid , kgid_t gid ) ;
2008-11-19 10:08:22 +00:00
extern void gfs2_quota_unlock ( struct gfs2_inode * ip ) ;
2006-01-16 16:50:04 +00:00
2015-03-18 12:03:41 -05:00
extern int gfs2_quota_check ( struct gfs2_inode * ip , kuid_t uid , kgid_t gid ,
struct gfs2_alloc_parms * ap ) ;
2008-11-19 10:08:22 +00:00
extern void gfs2_quota_change ( struct gfs2_inode * ip , s64 change ,
2013-01-31 20:27:54 -08:00
kuid_t uid , kgid_t gid ) ;
2006-01-16 16:50:04 +00:00
2012-07-03 16:45:28 +02:00
extern int gfs2_quota_sync ( struct super_block * sb , int type ) ;
2013-01-31 19:42:40 -08:00
extern int gfs2_quota_refresh ( struct gfs2_sbd * sdp , struct kqid qid ) ;
2006-01-16 16:50:04 +00:00
2008-11-19 10:08:22 +00:00
extern int gfs2_quota_init ( struct gfs2_sbd * sdp ) ;
extern void gfs2_quota_cleanup ( struct gfs2_sbd * sdp ) ;
extern int gfs2_quotad ( void * data ) ;
2006-01-16 16:50:04 +00:00
2009-10-20 02:39:44 -05:00
extern void gfs2_wake_up_statfs ( struct gfs2_sbd * sdp ) ;
2015-03-18 12:03:41 -05:00
static inline int gfs2_quota_lock_check ( struct gfs2_inode * ip ,
struct gfs2_alloc_parms * ap )
2008-03-10 15:34:50 +00:00
{
struct gfs2_sbd * sdp = GFS2_SB ( & ip - > i_inode ) ;
int ret ;
if ( sdp - > sd_args . ar_quota = = GFS2_QUOTA_OFF )
return 0 ;
2013-01-31 17:49:26 -08:00
ret = gfs2_quota_lock ( ip , NO_UID_QUOTA_CHANGE , NO_GID_QUOTA_CHANGE ) ;
2008-03-10 15:34:50 +00:00
if ( ret )
return ret ;
if ( sdp - > sd_args . ar_quota ! = GFS2_QUOTA_ON )
return 0 ;
2015-03-18 12:03:41 -05:00
ret = gfs2_quota_check ( ip , ip - > i_inode . i_uid , ip - > i_inode . i_gid , ap ) ;
2008-03-10 15:34:50 +00:00
if ( ret )
gfs2_quota_unlock ( ip ) ;
return ret ;
}
2009-09-15 09:59:02 +01:00
extern const struct quotactl_ops gfs2_quotactl_ops ;
2013-11-04 10:15:08 +00:00
extern struct shrinker gfs2_qd_shrinker ;
extern struct list_lru gfs2_qd_lru ;
2013-12-12 10:47:59 +00:00
extern void __init gfs2_quota_hash_init ( void ) ;
2009-01-07 16:03:37 -06:00
2006-01-16 16:50:04 +00:00
# endif /* __QUOTA_DOT_H__ */