@ -2614,26 +2614,39 @@ out:
EXPORT_SYMBOL ( dquot_set_dqblk ) ;
/* Generic routine for getting common part of quota file information */
int dquot_get_dqinfo ( struct super_block * sb , int type , struct if_dqinfo * ii )
int dquot_get_state ( struct super_block * sb , struct qc_state * state )
{
struct mem_dqinfo * mi ;
struct qc_type_state * tstate ;
struct quota_info * dqopt = sb_dqopt ( sb ) ;
int type ;
mutex_lock ( & sb_dqopt ( sb ) - > dqonoff_mutex ) ;
if ( ! sb_has_quota_active ( sb , type ) ) {
mutex_unlock ( & sb_dqopt ( sb ) - > dqonoff_mutex ) ;
return - ESRCH ;
memset ( state , 0 , sizeof ( * state ) ) ;
for ( type = 0 ; type < MAXQUOTAS ; type + + ) {
if ( ! sb_has_quota_active ( sb , type ) )
continue ;
tstate = state - > s_state + type ;
mi = sb_dqopt ( sb ) - > info + type ;
tstate - > flags = QCI_ACCT_ENABLED ;
spin_lock ( & dq_data_lock ) ;
if ( mi - > dqi_flags & DQF_SYS_FILE )
tstate - > flags | = QCI_SYSFILE ;
if ( mi - > dqi_flags & DQF_ROOT_SQUASH )
tstate - > flags | = QCI_ROOT_SQUASH ;
if ( sb_has_quota_limits_enabled ( sb , type ) )
tstate - > flags | = QCI_LIMITS_ENFORCED ;
tstate - > spc_timelimit = mi - > dqi_bgrace ;
tstate - > ino_timelimit = mi - > dqi_igrace ;
tstate - > ino = dqopt - > files [ type ] - > i_ino ;
tstate - > blocks = dqopt - > files [ type ] - > i_blocks ;
tstate - > nextents = 1 ; /* We don't know... */
spin_unlock ( & dq_data_lock ) ;
}
mi = sb_dqopt ( sb ) - > info + type ;
spin_lock ( & dq_data_lock ) ;
ii - > dqi_bgrace = mi - > dqi_bgrace ;
ii - > dqi_igrace = mi - > dqi_igrace ;
ii - > dqi_flags = mi - > dqi_flags & DQF_GETINFO_MASK ;
ii - > dqi_valid = IIF_ALL ;
spin_unlock ( & dq_data_lock ) ;
mutex_unlock ( & sb_dqopt ( sb ) - > dqonoff_mutex ) ;
return 0 ;
}
EXPORT_SYMBOL ( dquot_get_dqinfo ) ;
EXPORT_SYMBOL ( dquot_get_state ) ;
/* Generic routine for setting common part of quota file information */
int dquot_set_dqinfo ( struct super_block * sb , int type , struct if_dqinfo * ii )
@ -2677,7 +2690,7 @@ const struct quotactl_ops dquot_quotactl_ops = {
. quota_on = dquot_quota_on ,
. quota_off = dquot_quota_off ,
. quota_sync = dquot_quota_sync ,
. get_info = dquot_get_dqinfo ,
. get_state = dquot_get_state ,
. set_info = dquot_set_dqinfo ,
. get_dqblk = dquot_get_dqblk ,
. set_dqblk = dquot_set_dqblk
@ -2688,7 +2701,7 @@ const struct quotactl_ops dquot_quotactl_sysfile_ops = {
. quota_enable = dquot_quota_enable ,
. quota_disable = dquot_quota_disable ,
. quota_sync = dquot_quota_sync ,
. get_info = dquot_get_dqinfo ,
. get_state = dquot_get_state ,
. set_info = dquot_set_dqinfo ,
. get_dqblk = dquot_get_dqblk ,
. set_dqblk = dquot_set_dqblk