aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dquot.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2008-10-02 10:48:10 -0400
committerMark Fasheh <mfasheh@suse.com>2009-01-05 11:40:22 -0500
commit4d59bce4f9eaf26d6d9046b56a2f1c0c7f20981d (patch)
tree8acb07cd2bf0ab360e6397dfa816feb009fc49af /fs/dquot.c
parentdb49d2df489f727096438706a5428115e84a3f0d (diff)
quota: Keep which entries were set by SETQUOTA quotactl
Quota in a clustered environment needs to synchronize quota information among cluster nodes. This means we have to occasionally update some information in dquot from disk / network. On the other hand we have to be careful not to overwrite changes administrator did via SETQUOTA. So indicate in dquot->dq_flags which entries have been set by SETQUOTA and quota format can clear these flags when it properly propagated the changes. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/dquot.c')
-rw-r--r--fs/dquot.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/dquot.c b/fs/dquot.c
index 9c78ffe1aad2..89226726daa8 100644
--- a/fs/dquot.c
+++ b/fs/dquot.c
@@ -2010,25 +2010,33 @@ static int do_set_dqblk(struct dquot *dquot, struct if_dqblk *di)
2010 if (di->dqb_valid & QIF_SPACE) { 2010 if (di->dqb_valid & QIF_SPACE) {
2011 dm->dqb_curspace = di->dqb_curspace; 2011 dm->dqb_curspace = di->dqb_curspace;
2012 check_blim = 1; 2012 check_blim = 1;
2013 __set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
2013 } 2014 }
2014 if (di->dqb_valid & QIF_BLIMITS) { 2015 if (di->dqb_valid & QIF_BLIMITS) {
2015 dm->dqb_bsoftlimit = qbtos(di->dqb_bsoftlimit); 2016 dm->dqb_bsoftlimit = qbtos(di->dqb_bsoftlimit);
2016 dm->dqb_bhardlimit = qbtos(di->dqb_bhardlimit); 2017 dm->dqb_bhardlimit = qbtos(di->dqb_bhardlimit);
2017 check_blim = 1; 2018 check_blim = 1;
2019 __set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
2018 } 2020 }
2019 if (di->dqb_valid & QIF_INODES) { 2021 if (di->dqb_valid & QIF_INODES) {
2020 dm->dqb_curinodes = di->dqb_curinodes; 2022 dm->dqb_curinodes = di->dqb_curinodes;
2021 check_ilim = 1; 2023 check_ilim = 1;
2024 __set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
2022 } 2025 }
2023 if (di->dqb_valid & QIF_ILIMITS) { 2026 if (di->dqb_valid & QIF_ILIMITS) {
2024 dm->dqb_isoftlimit = di->dqb_isoftlimit; 2027 dm->dqb_isoftlimit = di->dqb_isoftlimit;
2025 dm->dqb_ihardlimit = di->dqb_ihardlimit; 2028 dm->dqb_ihardlimit = di->dqb_ihardlimit;
2026 check_ilim = 1; 2029 check_ilim = 1;
2030 __set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
2027 } 2031 }
2028 if (di->dqb_valid & QIF_BTIME) 2032 if (di->dqb_valid & QIF_BTIME) {
2029 dm->dqb_btime = di->dqb_btime; 2033 dm->dqb_btime = di->dqb_btime;
2030 if (di->dqb_valid & QIF_ITIME) 2034 __set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
2035 }
2036 if (di->dqb_valid & QIF_ITIME) {
2031 dm->dqb_itime = di->dqb_itime; 2037 dm->dqb_itime = di->dqb_itime;
2038 __set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
2039 }
2032 2040
2033 if (check_blim) { 2041 if (check_blim) {
2034 if (!dm->dqb_bsoftlimit || dm->dqb_curspace < dm->dqb_bsoftlimit) { 2042 if (!dm->dqb_bsoftlimit || dm->dqb_curspace < dm->dqb_bsoftlimit) {