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