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 --- |