quota.c (cc9263874b42bf98209dce0afe698b550648e770) quota.c (3cd0126dca82ecba8b2a6bf5aca91454da0a0776)
1/*
2 * Quota code necessary even when VFS quota support is not compiled
3 * into the kernel. The interesting stuff is over in dquot.c, here
4 * we have symbols for initial quotactl(2) handling, the sysctl(2)
5 * variables, etc - things needed even when quota support disabled.
6 */
7
8#include <linux/fs.h>

--- 327 unchanged lines hidden (view full) ---

336}
337
338static int quota_getstate(struct super_block *sb, struct fs_quota_stat *fqs)
339{
340 int type;
341 struct qc_state state;
342 int ret;
343
1/*
2 * Quota code necessary even when VFS quota support is not compiled
3 * into the kernel. The interesting stuff is over in dquot.c, here
4 * we have symbols for initial quotactl(2) handling, the sysctl(2)
5 * variables, etc - things needed even when quota support disabled.
6 */
7
8#include <linux/fs.h>

--- 327 unchanged lines hidden (view full) ---

336}
337
338static int quota_getstate(struct super_block *sb, struct fs_quota_stat *fqs)
339{
340 int type;
341 struct qc_state state;
342 int ret;
343
344 memset(&state, 0, sizeof (struct qc_state));
344 ret = sb->s_qcop->get_state(sb, &state);
345 if (ret < 0)
346 return ret;
347
348 memset(fqs, 0, sizeof(*fqs));
349 fqs->qs_version = FS_QSTAT_VERSION;
350 fqs->qs_flags = quota_state_to_flags(&state);
351 /* No quota enabled? */

--- 8 unchanged lines hidden (view full) ---

360 if (state.s_state[type].flags & QCI_ACCT_ENABLED)
361 break;
362 BUG_ON(type == XQM_MAXQUOTAS);
363 fqs->qs_btimelimit = state.s_state[type].spc_timelimit;
364 fqs->qs_itimelimit = state.s_state[type].ino_timelimit;
365 fqs->qs_rtbtimelimit = state.s_state[type].rt_spc_timelimit;
366 fqs->qs_bwarnlimit = state.s_state[type].spc_warnlimit;
367 fqs->qs_iwarnlimit = state.s_state[type].ino_warnlimit;
345 ret = sb->s_qcop->get_state(sb, &state);
346 if (ret < 0)
347 return ret;
348
349 memset(fqs, 0, sizeof(*fqs));
350 fqs->qs_version = FS_QSTAT_VERSION;
351 fqs->qs_flags = quota_state_to_flags(&state);
352 /* No quota enabled? */

--- 8 unchanged lines hidden (view full) ---

361 if (state.s_state[type].flags & QCI_ACCT_ENABLED)
362 break;
363 BUG_ON(type == XQM_MAXQUOTAS);
364 fqs->qs_btimelimit = state.s_state[type].spc_timelimit;
365 fqs->qs_itimelimit = state.s_state[type].ino_timelimit;
366 fqs->qs_rtbtimelimit = state.s_state[type].rt_spc_timelimit;
367 fqs->qs_bwarnlimit = state.s_state[type].spc_warnlimit;
368 fqs->qs_iwarnlimit = state.s_state[type].ino_warnlimit;
368 if (state.s_state[USRQUOTA].flags & QCI_ACCT_ENABLED) {
369
370 /* Inodes may be allocated even if inactive; copy out if present */
371 if (state.s_state[USRQUOTA].ino) {
369 fqs->qs_uquota.qfs_ino = state.s_state[USRQUOTA].ino;
370 fqs->qs_uquota.qfs_nblks = state.s_state[USRQUOTA].blocks;
371 fqs->qs_uquota.qfs_nextents = state.s_state[USRQUOTA].nextents;
372 }
372 fqs->qs_uquota.qfs_ino = state.s_state[USRQUOTA].ino;
373 fqs->qs_uquota.qfs_nblks = state.s_state[USRQUOTA].blocks;
374 fqs->qs_uquota.qfs_nextents = state.s_state[USRQUOTA].nextents;
375 }
373 if (state.s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED) {
376 if (state.s_state[GRPQUOTA].ino) {
374 fqs->qs_gquota.qfs_ino = state.s_state[GRPQUOTA].ino;
375 fqs->qs_gquota.qfs_nblks = state.s_state[GRPQUOTA].blocks;
376 fqs->qs_gquota.qfs_nextents = state.s_state[GRPQUOTA].nextents;
377 }
377 fqs->qs_gquota.qfs_ino = state.s_state[GRPQUOTA].ino;
378 fqs->qs_gquota.qfs_nblks = state.s_state[GRPQUOTA].blocks;
379 fqs->qs_gquota.qfs_nextents = state.s_state[GRPQUOTA].nextents;
380 }
378 if (state.s_state[PRJQUOTA].flags & QCI_ACCT_ENABLED) {
381 if (state.s_state[PRJQUOTA].ino) {
379 /*
380 * Q_XGETQSTAT doesn't have room for both group and project
381 * quotas. So, allow the project quota values to be copied out
382 * only if there is no group quota information available.
383 */
384 if (!(state.s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED)) {
385 fqs->qs_gquota.qfs_ino = state.s_state[PRJQUOTA].ino;
386 fqs->qs_gquota.qfs_nblks =

--- 19 unchanged lines hidden (view full) ---

406}
407
408static int quota_getstatev(struct super_block *sb, struct fs_quota_statv *fqs)
409{
410 int type;
411 struct qc_state state;
412 int ret;
413
382 /*
383 * Q_XGETQSTAT doesn't have room for both group and project
384 * quotas. So, allow the project quota values to be copied out
385 * only if there is no group quota information available.
386 */
387 if (!(state.s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED)) {
388 fqs->qs_gquota.qfs_ino = state.s_state[PRJQUOTA].ino;
389 fqs->qs_gquota.qfs_nblks =

--- 19 unchanged lines hidden (view full) ---

409}
410
411static int quota_getstatev(struct super_block *sb, struct fs_quota_statv *fqs)
412{
413 int type;
414 struct qc_state state;
415 int ret;
416
417 memset(&state, 0, sizeof (struct qc_state));
414 ret = sb->s_qcop->get_state(sb, &state);
415 if (ret < 0)
416 return ret;
417
418 memset(fqs, 0, sizeof(*fqs));
419 fqs->qs_version = FS_QSTAT_VERSION;
420 fqs->qs_flags = quota_state_to_flags(&state);
421 /* No quota enabled? */

--- 8 unchanged lines hidden (view full) ---

430 if (state.s_state[type].flags & QCI_ACCT_ENABLED)
431 break;
432 BUG_ON(type == XQM_MAXQUOTAS);
433 fqs->qs_btimelimit = state.s_state[type].spc_timelimit;
434 fqs->qs_itimelimit = state.s_state[type].ino_timelimit;
435 fqs->qs_rtbtimelimit = state.s_state[type].rt_spc_timelimit;
436 fqs->qs_bwarnlimit = state.s_state[type].spc_warnlimit;
437 fqs->qs_iwarnlimit = state.s_state[type].ino_warnlimit;
418 ret = sb->s_qcop->get_state(sb, &state);
419 if (ret < 0)
420 return ret;
421
422 memset(fqs, 0, sizeof(*fqs));
423 fqs->qs_version = FS_QSTAT_VERSION;
424 fqs->qs_flags = quota_state_to_flags(&state);
425 /* No quota enabled? */

--- 8 unchanged lines hidden (view full) ---

434 if (state.s_state[type].flags & QCI_ACCT_ENABLED)
435 break;
436 BUG_ON(type == XQM_MAXQUOTAS);
437 fqs->qs_btimelimit = state.s_state[type].spc_timelimit;
438 fqs->qs_itimelimit = state.s_state[type].ino_timelimit;
439 fqs->qs_rtbtimelimit = state.s_state[type].rt_spc_timelimit;
440 fqs->qs_bwarnlimit = state.s_state[type].spc_warnlimit;
441 fqs->qs_iwarnlimit = state.s_state[type].ino_warnlimit;
438 if (state.s_state[USRQUOTA].flags & QCI_ACCT_ENABLED) {
442
443 /* Inodes may be allocated even if inactive; copy out if present */
444 if (state.s_state[USRQUOTA].ino) {
439 fqs->qs_uquota.qfs_ino = state.s_state[USRQUOTA].ino;
440 fqs->qs_uquota.qfs_nblks = state.s_state[USRQUOTA].blocks;
441 fqs->qs_uquota.qfs_nextents = state.s_state[USRQUOTA].nextents;
442 }
445 fqs->qs_uquota.qfs_ino = state.s_state[USRQUOTA].ino;
446 fqs->qs_uquota.qfs_nblks = state.s_state[USRQUOTA].blocks;
447 fqs->qs_uquota.qfs_nextents = state.s_state[USRQUOTA].nextents;
448 }
443 if (state.s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED) {
449 if (state.s_state[GRPQUOTA].ino) {
444 fqs->qs_gquota.qfs_ino = state.s_state[GRPQUOTA].ino;
445 fqs->qs_gquota.qfs_nblks = state.s_state[GRPQUOTA].blocks;
446 fqs->qs_gquota.qfs_nextents = state.s_state[GRPQUOTA].nextents;
447 }
450 fqs->qs_gquota.qfs_ino = state.s_state[GRPQUOTA].ino;
451 fqs->qs_gquota.qfs_nblks = state.s_state[GRPQUOTA].blocks;
452 fqs->qs_gquota.qfs_nextents = state.s_state[GRPQUOTA].nextents;
453 }
448 if (state.s_state[PRJQUOTA].flags & QCI_ACCT_ENABLED) {
454 if (state.s_state[PRJQUOTA].ino) {
449 fqs->qs_pquota.qfs_ino = state.s_state[PRJQUOTA].ino;
450 fqs->qs_pquota.qfs_nblks = state.s_state[PRJQUOTA].blocks;
451 fqs->qs_pquota.qfs_nextents = state.s_state[PRJQUOTA].nextents;
452 }
453 return 0;
454}
455
456static int quota_getxstatev(struct super_block *sb, void __user *addr)

--- 418 unchanged lines hidden ---
455 fqs->qs_pquota.qfs_ino = state.s_state[PRJQUOTA].ino;
456 fqs->qs_pquota.qfs_nblks = state.s_state[PRJQUOTA].blocks;
457 fqs->qs_pquota.qfs_nextents = state.s_state[PRJQUOTA].nextents;
458 }
459 return 0;
460}
461
462static int quota_getxstatev(struct super_block *sb, void __user *addr)

--- 418 unchanged lines hidden ---