OSDN Git Service

5e77c4da69a63f40063ce4545e5b1216b06ef4a9
[uclinux-h8/linux.git] / fs / quota / dquot.c
1 /*
2  * Implementation of the diskquota system for the LINUX operating system. QUOTA
3  * is implemented using the BSD system call interface as the means of
4  * communication with the user level. This file contains the generic routines
5  * called by the different filesystems on allocation of an inode or block.
6  * These routines take care of the administration needed to have a consistent
7  * diskquota tracking system. The ideas of both user and group quotas are based
8  * on the Melbourne quota system as used on BSD derived systems. The internal
9  * implementation is based on one of the several variants of the LINUX
10  * inode-subsystem with added complexity of the diskquota system.
11  * 
12  * Author:      Marco van Wieringen <mvw@planets.elm.net>
13  *
14  * Fixes:   Dmitry Gorodchanin <pgmdsg@ibi.com>, 11 Feb 96
15  *
16  *              Revised list management to avoid races
17  *              -- Bill Hawes, <whawes@star.net>, 9/98
18  *
19  *              Fixed races in dquot_transfer(), dqget() and dquot_alloc_...().
20  *              As the consequence the locking was moved from dquot_decr_...(),
21  *              dquot_incr_...() to calling functions.
22  *              invalidate_dquots() now writes modified dquots.
23  *              Serialized quota_off() and quota_on() for mount point.
24  *              Fixed a few bugs in grow_dquots().
25  *              Fixed deadlock in write_dquot() - we no longer account quotas on
26  *              quota files
27  *              remove_dquot_ref() moved to inode.c - it now traverses through inodes
28  *              add_dquot_ref() restarts after blocking
29  *              Added check for bogus uid and fixed check for group in quotactl.
30  *              Jan Kara, <jack@suse.cz>, sponsored by SuSE CR, 10-11/99
31  *
32  *              Used struct list_head instead of own list struct
33  *              Invalidation of referenced dquots is no longer possible
34  *              Improved free_dquots list management
35  *              Quota and i_blocks are now updated in one place to avoid races
36  *              Warnings are now delayed so we won't block in critical section
37  *              Write updated not to require dquot lock
38  *              Jan Kara, <jack@suse.cz>, 9/2000
39  *
40  *              Added dynamic quota structure allocation
41  *              Jan Kara <jack@suse.cz> 12/2000
42  *
43  *              Rewritten quota interface. Implemented new quota format and
44  *              formats registering.
45  *              Jan Kara, <jack@suse.cz>, 2001,2002
46  *
47  *              New SMP locking.
48  *              Jan Kara, <jack@suse.cz>, 10/2002
49  *
50  *              Added journalled quota support, fix lock inversion problems
51  *              Jan Kara, <jack@suse.cz>, 2003,2004
52  *
53  * (C) Copyright 1994 - 1997 Marco van Wieringen 
54  */
55
56 #include <linux/errno.h>
57 #include <linux/kernel.h>
58 #include <linux/fs.h>
59 #include <linux/mount.h>
60 #include <linux/mm.h>
61 #include <linux/time.h>
62 #include <linux/types.h>
63 #include <linux/string.h>
64 #include <linux/fcntl.h>
65 #include <linux/stat.h>
66 #include <linux/tty.h>
67 #include <linux/file.h>
68 #include <linux/slab.h>
69 #include <linux/sysctl.h>
70 #include <linux/init.h>
71 #include <linux/module.h>
72 #include <linux/proc_fs.h>
73 #include <linux/security.h>
74 #include <linux/sched.h>
75 #include <linux/cred.h>
76 #include <linux/kmod.h>
77 #include <linux/namei.h>
78 #include <linux/capability.h>
79 #include <linux/quotaops.h>
80 #include "../internal.h" /* ugh */
81
82 #include <linux/uaccess.h>
83
84 /*
85  * There are three quota SMP locks. dq_list_lock protects all lists with quotas
86  * and quota formats.
87  * dq_data_lock protects data from dq_dqb and also mem_dqinfo structures and
88  * also guards consistency of dquot->dq_dqb with inode->i_blocks, i_bytes.
89  * i_blocks and i_bytes updates itself are guarded by i_lock acquired directly
90  * in inode_add_bytes() and inode_sub_bytes(). dq_state_lock protects
91  * modifications of quota state (on quotaon and quotaoff) and readers who care
92  * about latest values take it as well.
93  *
94  * The spinlock ordering is hence: dq_data_lock > dq_list_lock > i_lock,
95  *   dq_list_lock > dq_state_lock
96  *
97  * Note that some things (eg. sb pointer, type, id) doesn't change during
98  * the life of the dquot structure and so needn't to be protected by a lock
99  *
100  * Operation accessing dquots via inode pointers are protected by dquot_srcu.
101  * Operation of reading pointer needs srcu_read_lock(&dquot_srcu), and
102  * synchronize_srcu(&dquot_srcu) is called after clearing pointers from
103  * inode and before dropping dquot references to avoid use of dquots after
104  * they are freed. dq_data_lock is used to serialize the pointer setting and
105  * clearing operations.
106  * Special care needs to be taken about S_NOQUOTA inode flag (marking that
107  * inode is a quota file). Functions adding pointers from inode to dquots have
108  * to check this flag under dq_data_lock and then (if S_NOQUOTA is not set) they
109  * have to do all pointer modifications before dropping dq_data_lock. This makes
110  * sure they cannot race with quotaon which first sets S_NOQUOTA flag and
111  * then drops all pointers to dquots from an inode.
112  *
113  * Each dquot has its dq_lock mutex.  Dquot is locked when it is being read to
114  * memory (or space for it is being allocated) on the first dqget(), when it is
115  * being written out, and when it is being released on the last dqput(). The
116  * allocation and release operations are serialized by the dq_lock and by
117  * checking the use count in dquot_release().
118  *
119  * Lock ordering (including related VFS locks) is the following:
120  *   s_umount > i_mutex > journal_lock > dquot->dq_lock > dqio_sem
121  */
122
123 static __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_list_lock);
124 static __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_state_lock);
125 __cacheline_aligned_in_smp DEFINE_SPINLOCK(dq_data_lock);
126 EXPORT_SYMBOL(dq_data_lock);
127 DEFINE_STATIC_SRCU(dquot_srcu);
128
129 void __quota_error(struct super_block *sb, const char *func,
130                    const char *fmt, ...)
131 {
132         if (printk_ratelimit()) {
133                 va_list args;
134                 struct va_format vaf;
135
136                 va_start(args, fmt);
137
138                 vaf.fmt = fmt;
139                 vaf.va = &args;
140
141                 printk(KERN_ERR "Quota error (device %s): %s: %pV\n",
142                        sb->s_id, func, &vaf);
143
144                 va_end(args);
145         }
146 }
147 EXPORT_SYMBOL(__quota_error);
148
149 #if defined(CONFIG_QUOTA_DEBUG) || defined(CONFIG_PRINT_QUOTA_WARNING)
150 static char *quotatypes[] = INITQFNAMES;
151 #endif
152 static struct quota_format_type *quota_formats; /* List of registered formats */
153 static struct quota_module_name module_names[] = INIT_QUOTA_MODULE_NAMES;
154
155 /* SLAB cache for dquot structures */
156 static struct kmem_cache *dquot_cachep;
157
158 int register_quota_format(struct quota_format_type *fmt)
159 {
160         spin_lock(&dq_list_lock);
161         fmt->qf_next = quota_formats;
162         quota_formats = fmt;
163         spin_unlock(&dq_list_lock);
164         return 0;
165 }
166 EXPORT_SYMBOL(register_quota_format);
167
168 void unregister_quota_format(struct quota_format_type *fmt)
169 {
170         struct quota_format_type **actqf;
171
172         spin_lock(&dq_list_lock);
173         for (actqf = &quota_formats; *actqf && *actqf != fmt;
174              actqf = &(*actqf)->qf_next)
175                 ;
176         if (*actqf)
177                 *actqf = (*actqf)->qf_next;
178         spin_unlock(&dq_list_lock);
179 }
180 EXPORT_SYMBOL(unregister_quota_format);
181
182 static struct quota_format_type *find_quota_format(int id)
183 {
184         struct quota_format_type *actqf;
185
186         spin_lock(&dq_list_lock);
187         for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id;
188              actqf = actqf->qf_next)
189                 ;
190         if (!actqf || !try_module_get(actqf->qf_owner)) {
191                 int qm;
192
193                 spin_unlock(&dq_list_lock);
194                 
195                 for (qm = 0; module_names[qm].qm_fmt_id &&
196                              module_names[qm].qm_fmt_id != id; qm++)
197                         ;
198                 if (!module_names[qm].qm_fmt_id ||
199                     request_module(module_names[qm].qm_mod_name))
200                         return NULL;
201
202                 spin_lock(&dq_list_lock);
203                 for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id;
204                      actqf = actqf->qf_next)
205                         ;
206                 if (actqf && !try_module_get(actqf->qf_owner))
207                         actqf = NULL;
208         }
209         spin_unlock(&dq_list_lock);
210         return actqf;
211 }
212
213 static void put_quota_format(struct quota_format_type *fmt)
214 {
215         module_put(fmt->qf_owner);
216 }
217
218 /*
219  * Dquot List Management:
220  * The quota code uses three lists for dquot management: the inuse_list,
221  * free_dquots, and dquot_hash[] array. A single dquot structure may be
222  * on all three lists, depending on its current state.
223  *
224  * All dquots are placed to the end of inuse_list when first created, and this
225  * list is used for invalidate operation, which must look at every dquot.
226  *
227  * Unused dquots (dq_count == 0) are added to the free_dquots list when freed,
228  * and this list is searched whenever we need an available dquot.  Dquots are
229  * removed from the list as soon as they are used again, and
230  * dqstats.free_dquots gives the number of dquots on the list. When
231  * dquot is invalidated it's completely released from memory.
232  *
233  * Dquots with a specific identity (device, type and id) are placed on
234  * one of the dquot_hash[] hash chains. The provides an efficient search
235  * mechanism to locate a specific dquot.
236  */
237
238 static LIST_HEAD(inuse_list);
239 static LIST_HEAD(free_dquots);
240 static unsigned int dq_hash_bits, dq_hash_mask;
241 static struct hlist_head *dquot_hash;
242
243 struct dqstats dqstats;
244 EXPORT_SYMBOL(dqstats);
245
246 static qsize_t inode_get_rsv_space(struct inode *inode);
247 static int __dquot_initialize(struct inode *inode, int type);
248
249 static inline unsigned int
250 hashfn(const struct super_block *sb, struct kqid qid)
251 {
252         unsigned int id = from_kqid(&init_user_ns, qid);
253         int type = qid.type;
254         unsigned long tmp;
255
256         tmp = (((unsigned long)sb>>L1_CACHE_SHIFT) ^ id) * (MAXQUOTAS - type);
257         return (tmp + (tmp >> dq_hash_bits)) & dq_hash_mask;
258 }
259
260 /*
261  * Following list functions expect dq_list_lock to be held
262  */
263 static inline void insert_dquot_hash(struct dquot *dquot)
264 {
265         struct hlist_head *head;
266         head = dquot_hash + hashfn(dquot->dq_sb, dquot->dq_id);
267         hlist_add_head(&dquot->dq_hash, head);
268 }
269
270 static inline void remove_dquot_hash(struct dquot *dquot)
271 {
272         hlist_del_init(&dquot->dq_hash);
273 }
274
275 static struct dquot *find_dquot(unsigned int hashent, struct super_block *sb,
276                                 struct kqid qid)
277 {
278         struct hlist_node *node;
279         struct dquot *dquot;
280
281         hlist_for_each (node, dquot_hash+hashent) {
282                 dquot = hlist_entry(node, struct dquot, dq_hash);
283                 if (dquot->dq_sb == sb && qid_eq(dquot->dq_id, qid))
284                         return dquot;
285         }
286         return NULL;
287 }
288
289 /* Add a dquot to the tail of the free list */
290 static inline void put_dquot_last(struct dquot *dquot)
291 {
292         list_add_tail(&dquot->dq_free, &free_dquots);
293         dqstats_inc(DQST_FREE_DQUOTS);
294 }
295
296 static inline void remove_free_dquot(struct dquot *dquot)
297 {
298         if (list_empty(&dquot->dq_free))
299                 return;
300         list_del_init(&dquot->dq_free);
301         dqstats_dec(DQST_FREE_DQUOTS);
302 }
303
304 static inline void put_inuse(struct dquot *dquot)
305 {
306         /* We add to the back of inuse list so we don't have to restart
307          * when traversing this list and we block */
308         list_add_tail(&dquot->dq_inuse, &inuse_list);
309         dqstats_inc(DQST_ALLOC_DQUOTS);
310 }
311
312 static inline void remove_inuse(struct dquot *dquot)
313 {
314         dqstats_dec(DQST_ALLOC_DQUOTS);
315         list_del(&dquot->dq_inuse);
316 }
317 /*
318  * End of list functions needing dq_list_lock
319  */
320
321 static void wait_on_dquot(struct dquot *dquot)
322 {
323         mutex_lock(&dquot->dq_lock);
324         mutex_unlock(&dquot->dq_lock);
325 }
326
327 static inline int dquot_dirty(struct dquot *dquot)
328 {
329         return test_bit(DQ_MOD_B, &dquot->dq_flags);
330 }
331
332 static inline int mark_dquot_dirty(struct dquot *dquot)
333 {
334         return dquot->dq_sb->dq_op->mark_dirty(dquot);
335 }
336
337 /* Mark dquot dirty in atomic manner, and return it's old dirty flag state */
338 int dquot_mark_dquot_dirty(struct dquot *dquot)
339 {
340         int ret = 1;
341
342         /* If quota is dirty already, we don't have to acquire dq_list_lock */
343         if (test_bit(DQ_MOD_B, &dquot->dq_flags))
344                 return 1;
345
346         spin_lock(&dq_list_lock);
347         if (!test_and_set_bit(DQ_MOD_B, &dquot->dq_flags)) {
348                 list_add(&dquot->dq_dirty, &sb_dqopt(dquot->dq_sb)->
349                                 info[dquot->dq_id.type].dqi_dirty_list);
350                 ret = 0;
351         }
352         spin_unlock(&dq_list_lock);
353         return ret;
354 }
355 EXPORT_SYMBOL(dquot_mark_dquot_dirty);
356
357 /* Dirtify all the dquots - this can block when journalling */
358 static inline int mark_all_dquot_dirty(struct dquot * const *dquot)
359 {
360         int ret, err, cnt;
361
362         ret = err = 0;
363         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
364                 if (dquot[cnt])
365                         /* Even in case of error we have to continue */
366                         ret = mark_dquot_dirty(dquot[cnt]);
367                 if (!err)
368                         err = ret;
369         }
370         return err;
371 }
372
373 static inline void dqput_all(struct dquot **dquot)
374 {
375         unsigned int cnt;
376
377         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
378                 dqput(dquot[cnt]);
379 }
380
381 /* This function needs dq_list_lock */
382 static inline int clear_dquot_dirty(struct dquot *dquot)
383 {
384         if (!test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags))
385                 return 0;
386         list_del_init(&dquot->dq_dirty);
387         return 1;
388 }
389
390 void mark_info_dirty(struct super_block *sb, int type)
391 {
392         set_bit(DQF_INFO_DIRTY_B, &sb_dqopt(sb)->info[type].dqi_flags);
393 }
394 EXPORT_SYMBOL(mark_info_dirty);
395
396 /*
397  *      Read dquot from disk and alloc space for it
398  */
399
400 int dquot_acquire(struct dquot *dquot)
401 {
402         int ret = 0, ret2 = 0;
403         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
404
405         mutex_lock(&dquot->dq_lock);
406         if (!test_bit(DQ_READ_B, &dquot->dq_flags))
407                 ret = dqopt->ops[dquot->dq_id.type]->read_dqblk(dquot);
408         if (ret < 0)
409                 goto out_iolock;
410         /* Make sure flags update is visible after dquot has been filled */
411         smp_mb__before_atomic();
412         set_bit(DQ_READ_B, &dquot->dq_flags);
413         /* Instantiate dquot if needed */
414         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && !dquot->dq_off) {
415                 ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
416                 /* Write the info if needed */
417                 if (info_dirty(&dqopt->info[dquot->dq_id.type])) {
418                         ret2 = dqopt->ops[dquot->dq_id.type]->write_file_info(
419                                         dquot->dq_sb, dquot->dq_id.type);
420                 }
421                 if (ret < 0)
422                         goto out_iolock;
423                 if (ret2 < 0) {
424                         ret = ret2;
425                         goto out_iolock;
426                 }
427         }
428         /*
429          * Make sure flags update is visible after on-disk struct has been
430          * allocated. Paired with smp_rmb() in dqget().
431          */
432         smp_mb__before_atomic();
433         set_bit(DQ_ACTIVE_B, &dquot->dq_flags);
434 out_iolock:
435         mutex_unlock(&dquot->dq_lock);
436         return ret;
437 }
438 EXPORT_SYMBOL(dquot_acquire);
439
440 /*
441  *      Write dquot to disk
442  */
443 int dquot_commit(struct dquot *dquot)
444 {
445         int ret = 0;
446         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
447
448         mutex_lock(&dquot->dq_lock);
449         spin_lock(&dq_list_lock);
450         if (!clear_dquot_dirty(dquot)) {
451                 spin_unlock(&dq_list_lock);
452                 goto out_lock;
453         }
454         spin_unlock(&dq_list_lock);
455         /* Inactive dquot can be only if there was error during read/init
456          * => we have better not writing it */
457         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
458                 ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
459         else
460                 ret = -EIO;
461 out_lock:
462         mutex_unlock(&dquot->dq_lock);
463         return ret;
464 }
465 EXPORT_SYMBOL(dquot_commit);
466
467 /*
468  *      Release dquot
469  */
470 int dquot_release(struct dquot *dquot)
471 {
472         int ret = 0, ret2 = 0;
473         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
474
475         mutex_lock(&dquot->dq_lock);
476         /* Check whether we are not racing with some other dqget() */
477         if (atomic_read(&dquot->dq_count) > 1)
478                 goto out_dqlock;
479         if (dqopt->ops[dquot->dq_id.type]->release_dqblk) {
480                 ret = dqopt->ops[dquot->dq_id.type]->release_dqblk(dquot);
481                 /* Write the info */
482                 if (info_dirty(&dqopt->info[dquot->dq_id.type])) {
483                         ret2 = dqopt->ops[dquot->dq_id.type]->write_file_info(
484                                                 dquot->dq_sb, dquot->dq_id.type);
485                 }
486                 if (ret >= 0)
487                         ret = ret2;
488         }
489         clear_bit(DQ_ACTIVE_B, &dquot->dq_flags);
490 out_dqlock:
491         mutex_unlock(&dquot->dq_lock);
492         return ret;
493 }
494 EXPORT_SYMBOL(dquot_release);
495
496 void dquot_destroy(struct dquot *dquot)
497 {
498         kmem_cache_free(dquot_cachep, dquot);
499 }
500 EXPORT_SYMBOL(dquot_destroy);
501
502 static inline void do_destroy_dquot(struct dquot *dquot)
503 {
504         dquot->dq_sb->dq_op->destroy_dquot(dquot);
505 }
506
507 /* Invalidate all dquots on the list. Note that this function is called after
508  * quota is disabled and pointers from inodes removed so there cannot be new
509  * quota users. There can still be some users of quotas due to inodes being
510  * just deleted or pruned by prune_icache() (those are not attached to any
511  * list) or parallel quotactl call. We have to wait for such users.
512  */
513 static void invalidate_dquots(struct super_block *sb, int type)
514 {
515         struct dquot *dquot, *tmp;
516
517 restart:
518         spin_lock(&dq_list_lock);
519         list_for_each_entry_safe(dquot, tmp, &inuse_list, dq_inuse) {
520                 if (dquot->dq_sb != sb)
521                         continue;
522                 if (dquot->dq_id.type != type)
523                         continue;
524                 /* Wait for dquot users */
525                 if (atomic_read(&dquot->dq_count)) {
526                         DEFINE_WAIT(wait);
527
528                         dqgrab(dquot);
529                         prepare_to_wait(&dquot->dq_wait_unused, &wait,
530                                         TASK_UNINTERRUPTIBLE);
531                         spin_unlock(&dq_list_lock);
532                         /* Once dqput() wakes us up, we know it's time to free
533                          * the dquot.
534                          * IMPORTANT: we rely on the fact that there is always
535                          * at most one process waiting for dquot to free.
536                          * Otherwise dq_count would be > 1 and we would never
537                          * wake up.
538                          */
539                         if (atomic_read(&dquot->dq_count) > 1)
540                                 schedule();
541                         finish_wait(&dquot->dq_wait_unused, &wait);
542                         dqput(dquot);
543                         /* At this moment dquot() need not exist (it could be
544                          * reclaimed by prune_dqcache(). Hence we must
545                          * restart. */
546                         goto restart;
547                 }
548                 /*
549                  * Quota now has no users and it has been written on last
550                  * dqput()
551                  */
552                 remove_dquot_hash(dquot);
553                 remove_free_dquot(dquot);
554                 remove_inuse(dquot);
555                 do_destroy_dquot(dquot);
556         }
557         spin_unlock(&dq_list_lock);
558 }
559
560 /* Call callback for every active dquot on given filesystem */
561 int dquot_scan_active(struct super_block *sb,
562                       int (*fn)(struct dquot *dquot, unsigned long priv),
563                       unsigned long priv)
564 {
565         struct dquot *dquot, *old_dquot = NULL;
566         int ret = 0;
567
568         WARN_ON_ONCE(!rwsem_is_locked(&sb->s_umount));
569
570         spin_lock(&dq_list_lock);
571         list_for_each_entry(dquot, &inuse_list, dq_inuse) {
572                 if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
573                         continue;
574                 if (dquot->dq_sb != sb)
575                         continue;
576                 /* Now we have active dquot so we can just increase use count */
577                 atomic_inc(&dquot->dq_count);
578                 spin_unlock(&dq_list_lock);
579                 dqstats_inc(DQST_LOOKUPS);
580                 dqput(old_dquot);
581                 old_dquot = dquot;
582                 /*
583                  * ->release_dquot() can be racing with us. Our reference
584                  * protects us from new calls to it so just wait for any
585                  * outstanding call and recheck the DQ_ACTIVE_B after that.
586                  */
587                 wait_on_dquot(dquot);
588                 if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
589                         ret = fn(dquot, priv);
590                         if (ret < 0)
591                                 goto out;
592                 }
593                 spin_lock(&dq_list_lock);
594                 /* We are safe to continue now because our dquot could not
595                  * be moved out of the inuse list while we hold the reference */
596         }
597         spin_unlock(&dq_list_lock);
598 out:
599         dqput(old_dquot);
600         return ret;
601 }
602 EXPORT_SYMBOL(dquot_scan_active);
603
604 /* Write all dquot structures to quota files */
605 int dquot_writeback_dquots(struct super_block *sb, int type)
606 {
607         struct list_head *dirty;
608         struct dquot *dquot;
609         struct quota_info *dqopt = sb_dqopt(sb);
610         int cnt;
611         int err, ret = 0;
612
613         WARN_ON_ONCE(!rwsem_is_locked(&sb->s_umount));
614
615         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
616                 if (type != -1 && cnt != type)
617                         continue;
618                 if (!sb_has_quota_active(sb, cnt))
619                         continue;
620                 spin_lock(&dq_list_lock);
621                 dirty = &dqopt->info[cnt].dqi_dirty_list;
622                 while (!list_empty(dirty)) {
623                         dquot = list_first_entry(dirty, struct dquot,
624                                                  dq_dirty);
625                         /* Dirty and inactive can be only bad dquot... */
626                         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
627                                 clear_dquot_dirty(dquot);
628                                 continue;
629                         }
630                         /* Now we have active dquot from which someone is
631                          * holding reference so we can safely just increase
632                          * use count */
633                         dqgrab(dquot);
634                         spin_unlock(&dq_list_lock);
635                         dqstats_inc(DQST_LOOKUPS);
636                         err = sb->dq_op->write_dquot(dquot);
637                         if (!ret && err)
638                                 ret = err;
639                         dqput(dquot);
640                         spin_lock(&dq_list_lock);
641                 }
642                 spin_unlock(&dq_list_lock);
643         }
644
645         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
646                 if ((cnt == type || type == -1) && sb_has_quota_active(sb, cnt)
647                     && info_dirty(&dqopt->info[cnt]))
648                         sb->dq_op->write_info(sb, cnt);
649         dqstats_inc(DQST_SYNCS);
650
651         return ret;
652 }
653 EXPORT_SYMBOL(dquot_writeback_dquots);
654
655 /* Write all dquot structures to disk and make them visible from userspace */
656 int dquot_quota_sync(struct super_block *sb, int type)
657 {
658         struct quota_info *dqopt = sb_dqopt(sb);
659         int cnt;
660         int ret;
661
662         ret = dquot_writeback_dquots(sb, type);
663         if (ret)
664                 return ret;
665         if (dqopt->flags & DQUOT_QUOTA_SYS_FILE)
666                 return 0;
667
668         /* This is not very clever (and fast) but currently I don't know about
669          * any other simple way of getting quota data to disk and we must get
670          * them there for userspace to be visible... */
671         if (sb->s_op->sync_fs)
672                 sb->s_op->sync_fs(sb, 1);
673         sync_blockdev(sb->s_bdev);
674
675         /*
676          * Now when everything is written we can discard the pagecache so
677          * that userspace sees the changes.
678          */
679         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
680                 if (type != -1 && cnt != type)
681                         continue;
682                 if (!sb_has_quota_active(sb, cnt))
683                         continue;
684                 inode_lock(dqopt->files[cnt]);
685                 truncate_inode_pages(&dqopt->files[cnt]->i_data, 0);
686                 inode_unlock(dqopt->files[cnt]);
687         }
688
689         return 0;
690 }
691 EXPORT_SYMBOL(dquot_quota_sync);
692
693 static unsigned long
694 dqcache_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
695 {
696         struct list_head *head;
697         struct dquot *dquot;
698         unsigned long freed = 0;
699
700         spin_lock(&dq_list_lock);
701         head = free_dquots.prev;
702         while (head != &free_dquots && sc->nr_to_scan) {
703                 dquot = list_entry(head, struct dquot, dq_free);
704                 remove_dquot_hash(dquot);
705                 remove_free_dquot(dquot);
706                 remove_inuse(dquot);
707                 do_destroy_dquot(dquot);
708                 sc->nr_to_scan--;
709                 freed++;
710                 head = free_dquots.prev;
711         }
712         spin_unlock(&dq_list_lock);
713         return freed;
714 }
715
716 static unsigned long
717 dqcache_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
718 {
719         return vfs_pressure_ratio(
720         percpu_counter_read_positive(&dqstats.counter[DQST_FREE_DQUOTS]));
721 }
722
723 static struct shrinker dqcache_shrinker = {
724         .count_objects = dqcache_shrink_count,
725         .scan_objects = dqcache_shrink_scan,
726         .seeks = DEFAULT_SEEKS,
727 };
728
729 /*
730  * Put reference to dquot
731  */
732 void dqput(struct dquot *dquot)
733 {
734         int ret;
735
736         if (!dquot)
737                 return;
738 #ifdef CONFIG_QUOTA_DEBUG
739         if (!atomic_read(&dquot->dq_count)) {
740                 quota_error(dquot->dq_sb, "trying to free free dquot of %s %d",
741                             quotatypes[dquot->dq_id.type],
742                             from_kqid(&init_user_ns, dquot->dq_id));
743                 BUG();
744         }
745 #endif
746         dqstats_inc(DQST_DROPS);
747 we_slept:
748         spin_lock(&dq_list_lock);
749         if (atomic_read(&dquot->dq_count) > 1) {
750                 /* We have more than one user... nothing to do */
751                 atomic_dec(&dquot->dq_count);
752                 /* Releasing dquot during quotaoff phase? */
753                 if (!sb_has_quota_active(dquot->dq_sb, dquot->dq_id.type) &&
754                     atomic_read(&dquot->dq_count) == 1)
755                         wake_up(&dquot->dq_wait_unused);
756                 spin_unlock(&dq_list_lock);
757                 return;
758         }
759         /* Need to release dquot? */
760         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) {
761                 spin_unlock(&dq_list_lock);
762                 /* Commit dquot before releasing */
763                 ret = dquot->dq_sb->dq_op->write_dquot(dquot);
764                 if (ret < 0) {
765                         quota_error(dquot->dq_sb, "Can't write quota structure"
766                                     " (error %d). Quota may get out of sync!",
767                                     ret);
768                         /*
769                          * We clear dirty bit anyway, so that we avoid
770                          * infinite loop here
771                          */
772                         spin_lock(&dq_list_lock);
773                         clear_dquot_dirty(dquot);
774                         spin_unlock(&dq_list_lock);
775                 }
776                 goto we_slept;
777         }
778         /* Clear flag in case dquot was inactive (something bad happened) */
779         clear_dquot_dirty(dquot);
780         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
781                 spin_unlock(&dq_list_lock);
782                 dquot->dq_sb->dq_op->release_dquot(dquot);
783                 goto we_slept;
784         }
785         atomic_dec(&dquot->dq_count);
786 #ifdef CONFIG_QUOTA_DEBUG
787         /* sanity check */
788         BUG_ON(!list_empty(&dquot->dq_free));
789 #endif
790         put_dquot_last(dquot);
791         spin_unlock(&dq_list_lock);
792 }
793 EXPORT_SYMBOL(dqput);
794
795 struct dquot *dquot_alloc(struct super_block *sb, int type)
796 {
797         return kmem_cache_zalloc(dquot_cachep, GFP_NOFS);
798 }
799 EXPORT_SYMBOL(dquot_alloc);
800
801 static struct dquot *get_empty_dquot(struct super_block *sb, int type)
802 {
803         struct dquot *dquot;
804
805         dquot = sb->dq_op->alloc_dquot(sb, type);
806         if(!dquot)
807                 return NULL;
808
809         mutex_init(&dquot->dq_lock);
810         INIT_LIST_HEAD(&dquot->dq_free);
811         INIT_LIST_HEAD(&dquot->dq_inuse);
812         INIT_HLIST_NODE(&dquot->dq_hash);
813         INIT_LIST_HEAD(&dquot->dq_dirty);
814         init_waitqueue_head(&dquot->dq_wait_unused);
815         dquot->dq_sb = sb;
816         dquot->dq_id = make_kqid_invalid(type);
817         atomic_set(&dquot->dq_count, 1);
818
819         return dquot;
820 }
821
822 /*
823  * Get reference to dquot
824  *
825  * Locking is slightly tricky here. We are guarded from parallel quotaoff()
826  * destroying our dquot by:
827  *   a) checking for quota flags under dq_list_lock and
828  *   b) getting a reference to dquot before we release dq_list_lock
829  */
830 struct dquot *dqget(struct super_block *sb, struct kqid qid)
831 {
832         unsigned int hashent = hashfn(sb, qid);
833         struct dquot *dquot, *empty = NULL;
834
835         if (!qid_has_mapping(sb->s_user_ns, qid))
836                 return ERR_PTR(-EINVAL);
837
838         if (!sb_has_quota_active(sb, qid.type))
839                 return ERR_PTR(-ESRCH);
840 we_slept:
841         spin_lock(&dq_list_lock);
842         spin_lock(&dq_state_lock);
843         if (!sb_has_quota_active(sb, qid.type)) {
844                 spin_unlock(&dq_state_lock);
845                 spin_unlock(&dq_list_lock);
846                 dquot = ERR_PTR(-ESRCH);
847                 goto out;
848         }
849         spin_unlock(&dq_state_lock);
850
851         dquot = find_dquot(hashent, sb, qid);
852         if (!dquot) {
853                 if (!empty) {
854                         spin_unlock(&dq_list_lock);
855                         empty = get_empty_dquot(sb, qid.type);
856                         if (!empty)
857                                 schedule();     /* Try to wait for a moment... */
858                         goto we_slept;
859                 }
860                 dquot = empty;
861                 empty = NULL;
862                 dquot->dq_id = qid;
863                 /* all dquots go on the inuse_list */
864                 put_inuse(dquot);
865                 /* hash it first so it can be found */
866                 insert_dquot_hash(dquot);
867                 spin_unlock(&dq_list_lock);
868                 dqstats_inc(DQST_LOOKUPS);
869         } else {
870                 if (!atomic_read(&dquot->dq_count))
871                         remove_free_dquot(dquot);
872                 atomic_inc(&dquot->dq_count);
873                 spin_unlock(&dq_list_lock);
874                 dqstats_inc(DQST_CACHE_HITS);
875                 dqstats_inc(DQST_LOOKUPS);
876         }
877         /* Wait for dq_lock - after this we know that either dquot_release() is
878          * already finished or it will be canceled due to dq_count > 1 test */
879         wait_on_dquot(dquot);
880         /* Read the dquot / allocate space in quota file */
881         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
882                 int err;
883
884                 err = sb->dq_op->acquire_dquot(dquot);
885                 if (err < 0) {
886                         dqput(dquot);
887                         dquot = ERR_PTR(err);
888                         goto out;
889                 }
890         }
891         /*
892          * Make sure following reads see filled structure - paired with
893          * smp_mb__before_atomic() in dquot_acquire().
894          */
895         smp_rmb();
896 #ifdef CONFIG_QUOTA_DEBUG
897         BUG_ON(!dquot->dq_sb);  /* Has somebody invalidated entry under us? */
898 #endif
899 out:
900         if (empty)
901                 do_destroy_dquot(empty);
902
903         return dquot;
904 }
905 EXPORT_SYMBOL(dqget);
906
907 static inline struct dquot **i_dquot(struct inode *inode)
908 {
909         return inode->i_sb->s_op->get_dquots(inode);
910 }
911
912 static int dqinit_needed(struct inode *inode, int type)
913 {
914         struct dquot * const *dquots;
915         int cnt;
916
917         if (IS_NOQUOTA(inode))
918                 return 0;
919
920         dquots = i_dquot(inode);
921         if (type != -1)
922                 return !dquots[type];
923         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
924                 if (!dquots[cnt])
925                         return 1;
926         return 0;
927 }
928
929 /* This routine is guarded by s_umount semaphore */
930 static void add_dquot_ref(struct super_block *sb, int type)
931 {
932         struct inode *inode, *old_inode = NULL;
933 #ifdef CONFIG_QUOTA_DEBUG
934         int reserved = 0;
935 #endif
936
937         spin_lock(&sb->s_inode_list_lock);
938         list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
939                 spin_lock(&inode->i_lock);
940                 if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) ||
941                     !atomic_read(&inode->i_writecount) ||
942                     !dqinit_needed(inode, type)) {
943                         spin_unlock(&inode->i_lock);
944                         continue;
945                 }
946                 __iget(inode);
947                 spin_unlock(&inode->i_lock);
948                 spin_unlock(&sb->s_inode_list_lock);
949
950 #ifdef CONFIG_QUOTA_DEBUG
951                 if (unlikely(inode_get_rsv_space(inode) > 0))
952                         reserved = 1;
953 #endif
954                 iput(old_inode);
955                 __dquot_initialize(inode, type);
956
957                 /*
958                  * We hold a reference to 'inode' so it couldn't have been
959                  * removed from s_inodes list while we dropped the
960                  * s_inode_list_lock. We cannot iput the inode now as we can be
961                  * holding the last reference and we cannot iput it under
962                  * s_inode_list_lock. So we keep the reference and iput it
963                  * later.
964                  */
965                 old_inode = inode;
966                 spin_lock(&sb->s_inode_list_lock);
967         }
968         spin_unlock(&sb->s_inode_list_lock);
969         iput(old_inode);
970
971 #ifdef CONFIG_QUOTA_DEBUG
972         if (reserved) {
973                 quota_error(sb, "Writes happened before quota was turned on "
974                         "thus quota information is probably inconsistent. "
975                         "Please run quotacheck(8)");
976         }
977 #endif
978 }
979
980 /*
981  * Remove references to dquots from inode and add dquot to list for freeing
982  * if we have the last reference to dquot
983  */
984 static void remove_inode_dquot_ref(struct inode *inode, int type,
985                                    struct list_head *tofree_head)
986 {
987         struct dquot **dquots = i_dquot(inode);
988         struct dquot *dquot = dquots[type];
989
990         if (!dquot)
991                 return;
992
993         dquots[type] = NULL;
994         if (list_empty(&dquot->dq_free)) {
995                 /*
996                  * The inode still has reference to dquot so it can't be in the
997                  * free list
998                  */
999                 spin_lock(&dq_list_lock);
1000                 list_add(&dquot->dq_free, tofree_head);
1001                 spin_unlock(&dq_list_lock);
1002         } else {
1003                 /*
1004                  * Dquot is already in a list to put so we won't drop the last
1005                  * reference here.
1006                  */
1007                 dqput(dquot);
1008         }
1009 }
1010
1011 /*
1012  * Free list of dquots
1013  * Dquots are removed from inodes and no new references can be got so we are
1014  * the only ones holding reference
1015  */
1016 static void put_dquot_list(struct list_head *tofree_head)
1017 {
1018         struct list_head *act_head;
1019         struct dquot *dquot;
1020
1021         act_head = tofree_head->next;
1022         while (act_head != tofree_head) {
1023                 dquot = list_entry(act_head, struct dquot, dq_free);
1024                 act_head = act_head->next;
1025                 /* Remove dquot from the list so we won't have problems... */
1026                 list_del_init(&dquot->dq_free);
1027                 dqput(dquot);
1028         }
1029 }
1030
1031 static void remove_dquot_ref(struct super_block *sb, int type,
1032                 struct list_head *tofree_head)
1033 {
1034         struct inode *inode;
1035         int reserved = 0;
1036
1037         spin_lock(&sb->s_inode_list_lock);
1038         list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
1039                 /*
1040                  *  We have to scan also I_NEW inodes because they can already
1041                  *  have quota pointer initialized. Luckily, we need to touch
1042                  *  only quota pointers and these have separate locking
1043                  *  (dq_data_lock).
1044                  */
1045                 spin_lock(&dq_data_lock);
1046                 if (!IS_NOQUOTA(inode)) {
1047                         if (unlikely(inode_get_rsv_space(inode) > 0))
1048                                 reserved = 1;
1049                         remove_inode_dquot_ref(inode, type, tofree_head);
1050                 }
1051                 spin_unlock(&dq_data_lock);
1052         }
1053         spin_unlock(&sb->s_inode_list_lock);
1054 #ifdef CONFIG_QUOTA_DEBUG
1055         if (reserved) {
1056                 printk(KERN_WARNING "VFS (%s): Writes happened after quota"
1057                         " was disabled thus quota information is probably "
1058                         "inconsistent. Please run quotacheck(8).\n", sb->s_id);
1059         }
1060 #endif
1061 }
1062
1063 /* Gather all references from inodes and drop them */
1064 static void drop_dquot_ref(struct super_block *sb, int type)
1065 {
1066         LIST_HEAD(tofree_head);
1067
1068         if (sb->dq_op) {
1069                 remove_dquot_ref(sb, type, &tofree_head);
1070                 synchronize_srcu(&dquot_srcu);
1071                 put_dquot_list(&tofree_head);
1072         }
1073 }
1074
1075 static inline void dquot_incr_inodes(struct dquot *dquot, qsize_t number)
1076 {
1077         dquot->dq_dqb.dqb_curinodes += number;
1078 }
1079
1080 static inline void dquot_incr_space(struct dquot *dquot, qsize_t number)
1081 {
1082         dquot->dq_dqb.dqb_curspace += number;
1083 }
1084
1085 static inline void dquot_resv_space(struct dquot *dquot, qsize_t number)
1086 {
1087         dquot->dq_dqb.dqb_rsvspace += number;
1088 }
1089
1090 /*
1091  * Claim reserved quota space
1092  */
1093 static void dquot_claim_reserved_space(struct dquot *dquot, qsize_t number)
1094 {
1095         if (dquot->dq_dqb.dqb_rsvspace < number) {
1096                 WARN_ON_ONCE(1);
1097                 number = dquot->dq_dqb.dqb_rsvspace;
1098         }
1099         dquot->dq_dqb.dqb_curspace += number;
1100         dquot->dq_dqb.dqb_rsvspace -= number;
1101 }
1102
1103 static void dquot_reclaim_reserved_space(struct dquot *dquot, qsize_t number)
1104 {
1105         if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number))
1106                 number = dquot->dq_dqb.dqb_curspace;
1107         dquot->dq_dqb.dqb_rsvspace += number;
1108         dquot->dq_dqb.dqb_curspace -= number;
1109 }
1110
1111 static inline
1112 void dquot_free_reserved_space(struct dquot *dquot, qsize_t number)
1113 {
1114         if (dquot->dq_dqb.dqb_rsvspace >= number)
1115                 dquot->dq_dqb.dqb_rsvspace -= number;
1116         else {
1117                 WARN_ON_ONCE(1);
1118                 dquot->dq_dqb.dqb_rsvspace = 0;
1119         }
1120 }
1121
1122 static void dquot_decr_inodes(struct dquot *dquot, qsize_t number)
1123 {
1124         if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NEGATIVE_USAGE ||
1125             dquot->dq_dqb.dqb_curinodes >= number)
1126                 dquot->dq_dqb.dqb_curinodes -= number;
1127         else
1128                 dquot->dq_dqb.dqb_curinodes = 0;
1129         if (dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit)
1130                 dquot->dq_dqb.dqb_itime = (time64_t) 0;
1131         clear_bit(DQ_INODES_B, &dquot->dq_flags);
1132 }
1133
1134 static void dquot_decr_space(struct dquot *dquot, qsize_t number)
1135 {
1136         if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NEGATIVE_USAGE ||
1137             dquot->dq_dqb.dqb_curspace >= number)
1138                 dquot->dq_dqb.dqb_curspace -= number;
1139         else
1140                 dquot->dq_dqb.dqb_curspace = 0;
1141         if (dquot->dq_dqb.dqb_curspace <= dquot->dq_dqb.dqb_bsoftlimit)
1142                 dquot->dq_dqb.dqb_btime = (time64_t) 0;
1143         clear_bit(DQ_BLKS_B, &dquot->dq_flags);
1144 }
1145
1146 struct dquot_warn {
1147         struct super_block *w_sb;
1148         struct kqid w_dq_id;
1149         short w_type;
1150 };
1151
1152 static int warning_issued(struct dquot *dquot, const int warntype)
1153 {
1154         int flag = (warntype == QUOTA_NL_BHARDWARN ||
1155                 warntype == QUOTA_NL_BSOFTLONGWARN) ? DQ_BLKS_B :
1156                 ((warntype == QUOTA_NL_IHARDWARN ||
1157                 warntype == QUOTA_NL_ISOFTLONGWARN) ? DQ_INODES_B : 0);
1158
1159         if (!flag)
1160                 return 0;
1161         return test_and_set_bit(flag, &dquot->dq_flags);
1162 }
1163
1164 #ifdef CONFIG_PRINT_QUOTA_WARNING
1165 static int flag_print_warnings = 1;
1166
1167 static int need_print_warning(struct dquot_warn *warn)
1168 {
1169         if (!flag_print_warnings)
1170                 return 0;
1171
1172         switch (warn->w_dq_id.type) {
1173                 case USRQUOTA:
1174                         return uid_eq(current_fsuid(), warn->w_dq_id.uid);
1175                 case GRPQUOTA:
1176                         return in_group_p(warn->w_dq_id.gid);
1177                 case PRJQUOTA:
1178                         return 1;
1179         }
1180         return 0;
1181 }
1182
1183 /* Print warning to user which exceeded quota */
1184 static void print_warning(struct dquot_warn *warn)
1185 {
1186         char *msg = NULL;
1187         struct tty_struct *tty;
1188         int warntype = warn->w_type;
1189
1190         if (warntype == QUOTA_NL_IHARDBELOW ||
1191             warntype == QUOTA_NL_ISOFTBELOW ||
1192             warntype == QUOTA_NL_BHARDBELOW ||
1193             warntype == QUOTA_NL_BSOFTBELOW || !need_print_warning(warn))
1194                 return;
1195
1196         tty = get_current_tty();
1197         if (!tty)
1198                 return;
1199         tty_write_message(tty, warn->w_sb->s_id);
1200         if (warntype == QUOTA_NL_ISOFTWARN || warntype == QUOTA_NL_BSOFTWARN)
1201                 tty_write_message(tty, ": warning, ");
1202         else
1203                 tty_write_message(tty, ": write failed, ");
1204         tty_write_message(tty, quotatypes[warn->w_dq_id.type]);
1205         switch (warntype) {
1206                 case QUOTA_NL_IHARDWARN:
1207                         msg = " file limit reached.\r\n";
1208                         break;
1209                 case QUOTA_NL_ISOFTLONGWARN:
1210                         msg = " file quota exceeded too long.\r\n";
1211                         break;
1212                 case QUOTA_NL_ISOFTWARN:
1213                         msg = " file quota exceeded.\r\n";
1214                         break;
1215                 case QUOTA_NL_BHARDWARN:
1216                         msg = " block limit reached.\r\n";
1217                         break;
1218                 case QUOTA_NL_BSOFTLONGWARN:
1219                         msg = " block quota exceeded too long.\r\n";
1220                         break;
1221                 case QUOTA_NL_BSOFTWARN:
1222                         msg = " block quota exceeded.\r\n";
1223                         break;
1224         }
1225         tty_write_message(tty, msg);
1226         tty_kref_put(tty);
1227 }
1228 #endif
1229
1230 static void prepare_warning(struct dquot_warn *warn, struct dquot *dquot,
1231                             int warntype)
1232 {
1233         if (warning_issued(dquot, warntype))
1234                 return;
1235         warn->w_type = warntype;
1236         warn->w_sb = dquot->dq_sb;
1237         warn->w_dq_id = dquot->dq_id;
1238 }
1239
1240 /*
1241  * Write warnings to the console and send warning messages over netlink.
1242  *
1243  * Note that this function can call into tty and networking code.
1244  */
1245 static void flush_warnings(struct dquot_warn *warn)
1246 {
1247         int i;
1248
1249         for (i = 0; i < MAXQUOTAS; i++) {
1250                 if (warn[i].w_type == QUOTA_NL_NOWARN)
1251                         continue;
1252 #ifdef CONFIG_PRINT_QUOTA_WARNING
1253                 print_warning(&warn[i]);
1254 #endif
1255                 quota_send_warning(warn[i].w_dq_id,
1256                                    warn[i].w_sb->s_dev, warn[i].w_type);
1257         }
1258 }
1259
1260 static int ignore_hardlimit(struct dquot *dquot)
1261 {
1262         struct mem_dqinfo *info = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type];
1263
1264         return capable(CAP_SYS_RESOURCE) &&
1265                (info->dqi_format->qf_fmt_id != QFMT_VFS_OLD ||
1266                 !(info->dqi_flags & DQF_ROOT_SQUASH));
1267 }
1268
1269 /* needs dq_data_lock */
1270 static int check_idq(struct dquot *dquot, qsize_t inodes,
1271                      struct dquot_warn *warn)
1272 {
1273         qsize_t newinodes = dquot->dq_dqb.dqb_curinodes + inodes;
1274
1275         if (!sb_has_quota_limits_enabled(dquot->dq_sb, dquot->dq_id.type) ||
1276             test_bit(DQ_FAKE_B, &dquot->dq_flags))
1277                 return 0;
1278
1279         if (dquot->dq_dqb.dqb_ihardlimit &&
1280             newinodes > dquot->dq_dqb.dqb_ihardlimit &&
1281             !ignore_hardlimit(dquot)) {
1282                 prepare_warning(warn, dquot, QUOTA_NL_IHARDWARN);
1283                 return -EDQUOT;
1284         }
1285
1286         if (dquot->dq_dqb.dqb_isoftlimit &&
1287             newinodes > dquot->dq_dqb.dqb_isoftlimit &&
1288             dquot->dq_dqb.dqb_itime &&
1289             ktime_get_real_seconds() >= dquot->dq_dqb.dqb_itime &&
1290             !ignore_hardlimit(dquot)) {
1291                 prepare_warning(warn, dquot, QUOTA_NL_ISOFTLONGWARN);
1292                 return -EDQUOT;
1293         }
1294
1295         if (dquot->dq_dqb.dqb_isoftlimit &&
1296             newinodes > dquot->dq_dqb.dqb_isoftlimit &&
1297             dquot->dq_dqb.dqb_itime == 0) {
1298                 prepare_warning(warn, dquot, QUOTA_NL_ISOFTWARN);
1299                 dquot->dq_dqb.dqb_itime = ktime_get_real_seconds() +
1300                     sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type].dqi_igrace;
1301         }
1302
1303         return 0;
1304 }
1305
1306 /* needs dq_data_lock */
1307 static int check_bdq(struct dquot *dquot, qsize_t space, int prealloc,
1308                      struct dquot_warn *warn)
1309 {
1310         qsize_t tspace;
1311         struct super_block *sb = dquot->dq_sb;
1312
1313         if (!sb_has_quota_limits_enabled(sb, dquot->dq_id.type) ||
1314             test_bit(DQ_FAKE_B, &dquot->dq_flags))
1315                 return 0;
1316
1317         tspace = dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace
1318                 + space;
1319
1320         if (dquot->dq_dqb.dqb_bhardlimit &&
1321             tspace > dquot->dq_dqb.dqb_bhardlimit &&
1322             !ignore_hardlimit(dquot)) {
1323                 if (!prealloc)
1324                         prepare_warning(warn, dquot, QUOTA_NL_BHARDWARN);
1325                 return -EDQUOT;
1326         }
1327
1328         if (dquot->dq_dqb.dqb_bsoftlimit &&
1329             tspace > dquot->dq_dqb.dqb_bsoftlimit &&
1330             dquot->dq_dqb.dqb_btime &&
1331             ktime_get_real_seconds() >= dquot->dq_dqb.dqb_btime &&
1332             !ignore_hardlimit(dquot)) {
1333                 if (!prealloc)
1334                         prepare_warning(warn, dquot, QUOTA_NL_BSOFTLONGWARN);
1335                 return -EDQUOT;
1336         }
1337
1338         if (dquot->dq_dqb.dqb_bsoftlimit &&
1339             tspace > dquot->dq_dqb.dqb_bsoftlimit &&
1340             dquot->dq_dqb.dqb_btime == 0) {
1341                 if (!prealloc) {
1342                         prepare_warning(warn, dquot, QUOTA_NL_BSOFTWARN);
1343                         dquot->dq_dqb.dqb_btime = ktime_get_real_seconds() +
1344                             sb_dqopt(sb)->info[dquot->dq_id.type].dqi_bgrace;
1345                 }
1346                 else
1347                         /*
1348                          * We don't allow preallocation to exceed softlimit so exceeding will
1349                          * be always printed
1350                          */
1351                         return -EDQUOT;
1352         }
1353
1354         return 0;
1355 }
1356
1357 static int info_idq_free(struct dquot *dquot, qsize_t inodes)
1358 {
1359         qsize_t newinodes;
1360
1361         if (test_bit(DQ_FAKE_B, &dquot->dq_flags) ||
1362             dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit ||
1363             !sb_has_quota_limits_enabled(dquot->dq_sb, dquot->dq_id.type))
1364                 return QUOTA_NL_NOWARN;
1365
1366         newinodes = dquot->dq_dqb.dqb_curinodes - inodes;
1367         if (newinodes <= dquot->dq_dqb.dqb_isoftlimit)
1368                 return QUOTA_NL_ISOFTBELOW;
1369         if (dquot->dq_dqb.dqb_curinodes >= dquot->dq_dqb.dqb_ihardlimit &&
1370             newinodes < dquot->dq_dqb.dqb_ihardlimit)
1371                 return QUOTA_NL_IHARDBELOW;
1372         return QUOTA_NL_NOWARN;
1373 }
1374
1375 static int info_bdq_free(struct dquot *dquot, qsize_t space)
1376 {
1377         if (test_bit(DQ_FAKE_B, &dquot->dq_flags) ||
1378             dquot->dq_dqb.dqb_curspace <= dquot->dq_dqb.dqb_bsoftlimit)
1379                 return QUOTA_NL_NOWARN;
1380
1381         if (dquot->dq_dqb.dqb_curspace - space <= dquot->dq_dqb.dqb_bsoftlimit)
1382                 return QUOTA_NL_BSOFTBELOW;
1383         if (dquot->dq_dqb.dqb_curspace >= dquot->dq_dqb.dqb_bhardlimit &&
1384             dquot->dq_dqb.dqb_curspace - space < dquot->dq_dqb.dqb_bhardlimit)
1385                 return QUOTA_NL_BHARDBELOW;
1386         return QUOTA_NL_NOWARN;
1387 }
1388
1389 static int dquot_active(const struct inode *inode)
1390 {
1391         struct super_block *sb = inode->i_sb;
1392
1393         if (IS_NOQUOTA(inode))
1394                 return 0;
1395         return sb_any_quota_loaded(sb) & ~sb_any_quota_suspended(sb);
1396 }
1397
1398 /*
1399  * Initialize quota pointers in inode
1400  *
1401  * It is better to call this function outside of any transaction as it
1402  * might need a lot of space in journal for dquot structure allocation.
1403  */
1404 static int __dquot_initialize(struct inode *inode, int type)
1405 {
1406         int cnt, init_needed = 0;
1407         struct dquot **dquots, *got[MAXQUOTAS] = {};
1408         struct super_block *sb = inode->i_sb;
1409         qsize_t rsv;
1410         int ret = 0;
1411
1412         if (!dquot_active(inode))
1413                 return 0;
1414
1415         dquots = i_dquot(inode);
1416
1417         /* First get references to structures we might need. */
1418         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1419                 struct kqid qid;
1420                 kprojid_t projid;
1421                 int rc;
1422                 struct dquot *dquot;
1423
1424                 if (type != -1 && cnt != type)
1425                         continue;
1426                 /*
1427                  * The i_dquot should have been initialized in most cases,
1428                  * we check it without locking here to avoid unnecessary
1429                  * dqget()/dqput() calls.
1430                  */
1431                 if (dquots[cnt])
1432                         continue;
1433
1434                 if (!sb_has_quota_active(sb, cnt))
1435                         continue;
1436
1437                 init_needed = 1;
1438
1439                 switch (cnt) {
1440                 case USRQUOTA:
1441                         qid = make_kqid_uid(inode->i_uid);
1442                         break;
1443                 case GRPQUOTA:
1444                         qid = make_kqid_gid(inode->i_gid);
1445                         break;
1446                 case PRJQUOTA:
1447                         rc = inode->i_sb->dq_op->get_projid(inode, &projid);
1448                         if (rc)
1449                                 continue;
1450                         qid = make_kqid_projid(projid);
1451                         break;
1452                 }
1453                 dquot = dqget(sb, qid);
1454                 if (IS_ERR(dquot)) {
1455                         /* We raced with somebody turning quotas off... */
1456                         if (PTR_ERR(dquot) != -ESRCH) {
1457                                 ret = PTR_ERR(dquot);
1458                                 goto out_put;
1459                         }
1460                         dquot = NULL;
1461                 }
1462                 got[cnt] = dquot;
1463         }
1464
1465         /* All required i_dquot has been initialized */
1466         if (!init_needed)
1467                 return 0;
1468
1469         spin_lock(&dq_data_lock);
1470         if (IS_NOQUOTA(inode))
1471                 goto out_lock;
1472         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1473                 if (type != -1 && cnt != type)
1474                         continue;
1475                 /* Avoid races with quotaoff() */
1476                 if (!sb_has_quota_active(sb, cnt))
1477                         continue;
1478                 /* We could race with quotaon or dqget() could have failed */
1479                 if (!got[cnt])
1480                         continue;
1481                 if (!dquots[cnt]) {
1482                         dquots[cnt] = got[cnt];
1483                         got[cnt] = NULL;
1484                         /*
1485                          * Make quota reservation system happy if someone
1486                          * did a write before quota was turned on
1487                          */
1488                         rsv = inode_get_rsv_space(inode);
1489                         if (unlikely(rsv))
1490                                 dquot_resv_space(dquots[cnt], rsv);
1491                 }
1492         }
1493 out_lock:
1494         spin_unlock(&dq_data_lock);
1495 out_put:
1496         /* Drop unused references */
1497         dqput_all(got);
1498
1499         return ret;
1500 }
1501
1502 int dquot_initialize(struct inode *inode)
1503 {
1504         return __dquot_initialize(inode, -1);
1505 }
1506 EXPORT_SYMBOL(dquot_initialize);
1507
1508 bool dquot_initialize_needed(struct inode *inode)
1509 {
1510         struct dquot **dquots;
1511         int i;
1512
1513         if (!dquot_active(inode))
1514                 return false;
1515
1516         dquots = i_dquot(inode);
1517         for (i = 0; i < MAXQUOTAS; i++)
1518                 if (!dquots[i] && sb_has_quota_active(inode->i_sb, i))
1519                         return true;
1520         return false;
1521 }
1522 EXPORT_SYMBOL(dquot_initialize_needed);
1523
1524 /*
1525  * Release all quotas referenced by inode.
1526  *
1527  * This function only be called on inode free or converting
1528  * a file to quota file, no other users for the i_dquot in
1529  * both cases, so we needn't call synchronize_srcu() after
1530  * clearing i_dquot.
1531  */
1532 static void __dquot_drop(struct inode *inode)
1533 {
1534         int cnt;
1535         struct dquot **dquots = i_dquot(inode);
1536         struct dquot *put[MAXQUOTAS];
1537
1538         spin_lock(&dq_data_lock);
1539         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1540                 put[cnt] = dquots[cnt];
1541                 dquots[cnt] = NULL;
1542         }
1543         spin_unlock(&dq_data_lock);
1544         dqput_all(put);
1545 }
1546
1547 void dquot_drop(struct inode *inode)
1548 {
1549         struct dquot * const *dquots;
1550         int cnt;
1551
1552         if (IS_NOQUOTA(inode))
1553                 return;
1554
1555         /*
1556          * Test before calling to rule out calls from proc and such
1557          * where we are not allowed to block. Note that this is
1558          * actually reliable test even without the lock - the caller
1559          * must assure that nobody can come after the DQUOT_DROP and
1560          * add quota pointers back anyway.
1561          */
1562         dquots = i_dquot(inode);
1563         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1564                 if (dquots[cnt])
1565                         break;
1566         }
1567
1568         if (cnt < MAXQUOTAS)
1569                 __dquot_drop(inode);
1570 }
1571 EXPORT_SYMBOL(dquot_drop);
1572
1573 /*
1574  * inode_reserved_space is managed internally by quota, and protected by
1575  * i_lock similar to i_blocks+i_bytes.
1576  */
1577 static qsize_t *inode_reserved_space(struct inode * inode)
1578 {
1579         /* Filesystem must explicitly define it's own method in order to use
1580          * quota reservation interface */
1581         BUG_ON(!inode->i_sb->dq_op->get_reserved_space);
1582         return inode->i_sb->dq_op->get_reserved_space(inode);
1583 }
1584
1585 void inode_add_rsv_space(struct inode *inode, qsize_t number)
1586 {
1587         spin_lock(&inode->i_lock);
1588         *inode_reserved_space(inode) += number;
1589         spin_unlock(&inode->i_lock);
1590 }
1591 EXPORT_SYMBOL(inode_add_rsv_space);
1592
1593 void inode_claim_rsv_space(struct inode *inode, qsize_t number)
1594 {
1595         spin_lock(&inode->i_lock);
1596         *inode_reserved_space(inode) -= number;
1597         __inode_add_bytes(inode, number);
1598         spin_unlock(&inode->i_lock);
1599 }
1600 EXPORT_SYMBOL(inode_claim_rsv_space);
1601
1602 void inode_reclaim_rsv_space(struct inode *inode, qsize_t number)
1603 {
1604         spin_lock(&inode->i_lock);
1605         *inode_reserved_space(inode) += number;
1606         __inode_sub_bytes(inode, number);
1607         spin_unlock(&inode->i_lock);
1608 }
1609 EXPORT_SYMBOL(inode_reclaim_rsv_space);
1610
1611 void inode_sub_rsv_space(struct inode *inode, qsize_t number)
1612 {
1613         spin_lock(&inode->i_lock);
1614         *inode_reserved_space(inode) -= number;
1615         spin_unlock(&inode->i_lock);
1616 }
1617 EXPORT_SYMBOL(inode_sub_rsv_space);
1618
1619 static qsize_t inode_get_rsv_space(struct inode *inode)
1620 {
1621         qsize_t ret;
1622
1623         if (!inode->i_sb->dq_op->get_reserved_space)
1624                 return 0;
1625         spin_lock(&inode->i_lock);
1626         ret = *inode_reserved_space(inode);
1627         spin_unlock(&inode->i_lock);
1628         return ret;
1629 }
1630
1631 static void inode_incr_space(struct inode *inode, qsize_t number,
1632                                 int reserve)
1633 {
1634         if (reserve)
1635                 inode_add_rsv_space(inode, number);
1636         else
1637                 inode_add_bytes(inode, number);
1638 }
1639
1640 static void inode_decr_space(struct inode *inode, qsize_t number, int reserve)
1641 {
1642         if (reserve)
1643                 inode_sub_rsv_space(inode, number);
1644         else
1645                 inode_sub_bytes(inode, number);
1646 }
1647
1648 /*
1649  * This functions updates i_blocks+i_bytes fields and quota information
1650  * (together with appropriate checks).
1651  *
1652  * NOTE: We absolutely rely on the fact that caller dirties the inode
1653  * (usually helpers in quotaops.h care about this) and holds a handle for
1654  * the current transaction so that dquot write and inode write go into the
1655  * same transaction.
1656  */
1657
1658 /*
1659  * This operation can block, but only after everything is updated
1660  */
1661 int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
1662 {
1663         int cnt, ret = 0, index;
1664         struct dquot_warn warn[MAXQUOTAS];
1665         int reserve = flags & DQUOT_SPACE_RESERVE;
1666         struct dquot **dquots;
1667
1668         if (!dquot_active(inode)) {
1669                 inode_incr_space(inode, number, reserve);
1670                 goto out;
1671         }
1672
1673         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
1674                 warn[cnt].w_type = QUOTA_NL_NOWARN;
1675
1676         dquots = i_dquot(inode);
1677         index = srcu_read_lock(&dquot_srcu);
1678         spin_lock(&dq_data_lock);
1679         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1680                 if (!dquots[cnt])
1681                         continue;
1682                 ret = check_bdq(dquots[cnt], number,
1683                                 !(flags & DQUOT_SPACE_WARN), &warn[cnt]);
1684                 if (ret && !(flags & DQUOT_SPACE_NOFAIL)) {
1685                         spin_unlock(&dq_data_lock);
1686                         goto out_flush_warn;
1687                 }
1688         }
1689         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1690                 if (!dquots[cnt])
1691                         continue;
1692                 if (reserve)
1693                         dquot_resv_space(dquots[cnt], number);
1694                 else
1695                         dquot_incr_space(dquots[cnt], number);
1696         }
1697         inode_incr_space(inode, number, reserve);
1698         spin_unlock(&dq_data_lock);
1699
1700         if (reserve)
1701                 goto out_flush_warn;
1702         mark_all_dquot_dirty(dquots);
1703 out_flush_warn:
1704         srcu_read_unlock(&dquot_srcu, index);
1705         flush_warnings(warn);
1706 out:
1707         return ret;
1708 }
1709 EXPORT_SYMBOL(__dquot_alloc_space);
1710
1711 /*
1712  * This operation can block, but only after everything is updated
1713  */
1714 int dquot_alloc_inode(struct inode *inode)
1715 {
1716         int cnt, ret = 0, index;
1717         struct dquot_warn warn[MAXQUOTAS];
1718         struct dquot * const *dquots;
1719
1720         if (!dquot_active(inode))
1721                 return 0;
1722         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
1723                 warn[cnt].w_type = QUOTA_NL_NOWARN;
1724
1725         dquots = i_dquot(inode);
1726         index = srcu_read_lock(&dquot_srcu);
1727         spin_lock(&dq_data_lock);
1728         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1729                 if (!dquots[cnt])
1730                         continue;
1731                 ret = check_idq(dquots[cnt], 1, &warn[cnt]);
1732                 if (ret)
1733                         goto warn_put_all;
1734         }
1735
1736         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1737                 if (!dquots[cnt])
1738                         continue;
1739                 dquot_incr_inodes(dquots[cnt], 1);
1740         }
1741
1742 warn_put_all:
1743         spin_unlock(&dq_data_lock);
1744         if (ret == 0)
1745                 mark_all_dquot_dirty(dquots);
1746         srcu_read_unlock(&dquot_srcu, index);
1747         flush_warnings(warn);
1748         return ret;
1749 }
1750 EXPORT_SYMBOL(dquot_alloc_inode);
1751
1752 /*
1753  * Convert in-memory reserved quotas to real consumed quotas
1754  */
1755 int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
1756 {
1757         struct dquot **dquots;
1758         int cnt, index;
1759
1760         if (!dquot_active(inode)) {
1761                 inode_claim_rsv_space(inode, number);
1762                 return 0;
1763         }
1764
1765         dquots = i_dquot(inode);
1766         index = srcu_read_lock(&dquot_srcu);
1767         spin_lock(&dq_data_lock);
1768         /* Claim reserved quotas to allocated quotas */
1769         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1770                 if (dquots[cnt])
1771                         dquot_claim_reserved_space(dquots[cnt], number);
1772         }
1773         /* Update inode bytes */
1774         inode_claim_rsv_space(inode, number);
1775         spin_unlock(&dq_data_lock);
1776         mark_all_dquot_dirty(dquots);
1777         srcu_read_unlock(&dquot_srcu, index);
1778         return 0;
1779 }
1780 EXPORT_SYMBOL(dquot_claim_space_nodirty);
1781
1782 /*
1783  * Convert allocated space back to in-memory reserved quotas
1784  */
1785 void dquot_reclaim_space_nodirty(struct inode *inode, qsize_t number)
1786 {
1787         struct dquot **dquots;
1788         int cnt, index;
1789
1790         if (!dquot_active(inode)) {
1791                 inode_reclaim_rsv_space(inode, number);
1792                 return;
1793         }
1794
1795         dquots = i_dquot(inode);
1796         index = srcu_read_lock(&dquot_srcu);
1797         spin_lock(&dq_data_lock);
1798         /* Claim reserved quotas to allocated quotas */
1799         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1800                 if (dquots[cnt])
1801                         dquot_reclaim_reserved_space(dquots[cnt], number);
1802         }
1803         /* Update inode bytes */
1804         inode_reclaim_rsv_space(inode, number);
1805         spin_unlock(&dq_data_lock);
1806         mark_all_dquot_dirty(dquots);
1807         srcu_read_unlock(&dquot_srcu, index);
1808         return;
1809 }
1810 EXPORT_SYMBOL(dquot_reclaim_space_nodirty);
1811
1812 /*
1813  * This operation can block, but only after everything is updated
1814  */
1815 void __dquot_free_space(struct inode *inode, qsize_t number, int flags)
1816 {
1817         unsigned int cnt;
1818         struct dquot_warn warn[MAXQUOTAS];
1819         struct dquot **dquots;
1820         int reserve = flags & DQUOT_SPACE_RESERVE, index;
1821
1822         if (!dquot_active(inode)) {
1823                 inode_decr_space(inode, number, reserve);
1824                 return;
1825         }
1826
1827         dquots = i_dquot(inode);
1828         index = srcu_read_lock(&dquot_srcu);
1829         spin_lock(&dq_data_lock);
1830         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1831                 int wtype;
1832
1833                 warn[cnt].w_type = QUOTA_NL_NOWARN;
1834                 if (!dquots[cnt])
1835                         continue;
1836                 wtype = info_bdq_free(dquots[cnt], number);
1837                 if (wtype != QUOTA_NL_NOWARN)
1838                         prepare_warning(&warn[cnt], dquots[cnt], wtype);
1839                 if (reserve)
1840                         dquot_free_reserved_space(dquots[cnt], number);
1841                 else
1842                         dquot_decr_space(dquots[cnt], number);
1843         }
1844         inode_decr_space(inode, number, reserve);
1845         spin_unlock(&dq_data_lock);
1846
1847         if (reserve)
1848                 goto out_unlock;
1849         mark_all_dquot_dirty(dquots);
1850 out_unlock:
1851         srcu_read_unlock(&dquot_srcu, index);
1852         flush_warnings(warn);
1853 }
1854 EXPORT_SYMBOL(__dquot_free_space);
1855
1856 /*
1857  * This operation can block, but only after everything is updated
1858  */
1859 void dquot_free_inode(struct inode *inode)
1860 {
1861         unsigned int cnt;
1862         struct dquot_warn warn[MAXQUOTAS];
1863         struct dquot * const *dquots;
1864         int index;
1865
1866         if (!dquot_active(inode))
1867                 return;
1868
1869         dquots = i_dquot(inode);
1870         index = srcu_read_lock(&dquot_srcu);
1871         spin_lock(&dq_data_lock);
1872         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1873                 int wtype;
1874
1875                 warn[cnt].w_type = QUOTA_NL_NOWARN;
1876                 if (!dquots[cnt])
1877                         continue;
1878                 wtype = info_idq_free(dquots[cnt], 1);
1879                 if (wtype != QUOTA_NL_NOWARN)
1880                         prepare_warning(&warn[cnt], dquots[cnt], wtype);
1881                 dquot_decr_inodes(dquots[cnt], 1);
1882         }
1883         spin_unlock(&dq_data_lock);
1884         mark_all_dquot_dirty(dquots);
1885         srcu_read_unlock(&dquot_srcu, index);
1886         flush_warnings(warn);
1887 }
1888 EXPORT_SYMBOL(dquot_free_inode);
1889
1890 /*
1891  * Transfer the number of inode and blocks from one diskquota to an other.
1892  * On success, dquot references in transfer_to are consumed and references
1893  * to original dquots that need to be released are placed there. On failure,
1894  * references are kept untouched.
1895  *
1896  * This operation can block, but only after everything is updated
1897  * A transaction must be started when entering this function.
1898  *
1899  * We are holding reference on transfer_from & transfer_to, no need to
1900  * protect them by srcu_read_lock().
1901  */
1902 int __dquot_transfer(struct inode *inode, struct dquot **transfer_to)
1903 {
1904         qsize_t space, cur_space;
1905         qsize_t rsv_space = 0;
1906         qsize_t inode_usage = 1;
1907         struct dquot *transfer_from[MAXQUOTAS] = {};
1908         int cnt, ret = 0;
1909         char is_valid[MAXQUOTAS] = {};
1910         struct dquot_warn warn_to[MAXQUOTAS];
1911         struct dquot_warn warn_from_inodes[MAXQUOTAS];
1912         struct dquot_warn warn_from_space[MAXQUOTAS];
1913
1914         if (IS_NOQUOTA(inode))
1915                 return 0;
1916
1917         if (inode->i_sb->dq_op->get_inode_usage) {
1918                 ret = inode->i_sb->dq_op->get_inode_usage(inode, &inode_usage);
1919                 if (ret)
1920                         return ret;
1921         }
1922
1923         /* Initialize the arrays */
1924         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1925                 warn_to[cnt].w_type = QUOTA_NL_NOWARN;
1926                 warn_from_inodes[cnt].w_type = QUOTA_NL_NOWARN;
1927                 warn_from_space[cnt].w_type = QUOTA_NL_NOWARN;
1928         }
1929
1930         spin_lock(&dq_data_lock);
1931         if (IS_NOQUOTA(inode)) {        /* File without quota accounting? */
1932                 spin_unlock(&dq_data_lock);
1933                 return 0;
1934         }
1935         cur_space = inode_get_bytes(inode);
1936         rsv_space = inode_get_rsv_space(inode);
1937         space = cur_space + rsv_space;
1938         /* Build the transfer_from list and check the limits */
1939         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1940                 /*
1941                  * Skip changes for same uid or gid or for turned off quota-type.
1942                  */
1943                 if (!transfer_to[cnt])
1944                         continue;
1945                 /* Avoid races with quotaoff() */
1946                 if (!sb_has_quota_active(inode->i_sb, cnt))
1947                         continue;
1948                 is_valid[cnt] = 1;
1949                 transfer_from[cnt] = i_dquot(inode)[cnt];
1950                 ret = check_idq(transfer_to[cnt], inode_usage, &warn_to[cnt]);
1951                 if (ret)
1952                         goto over_quota;
1953                 ret = check_bdq(transfer_to[cnt], space, 0, &warn_to[cnt]);
1954                 if (ret)
1955                         goto over_quota;
1956         }
1957
1958         /*
1959          * Finally perform the needed transfer from transfer_from to transfer_to
1960          */
1961         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1962                 if (!is_valid[cnt])
1963                         continue;
1964                 /* Due to IO error we might not have transfer_from[] structure */
1965                 if (transfer_from[cnt]) {
1966                         int wtype;
1967                         wtype = info_idq_free(transfer_from[cnt], inode_usage);
1968                         if (wtype != QUOTA_NL_NOWARN)
1969                                 prepare_warning(&warn_from_inodes[cnt],
1970                                                 transfer_from[cnt], wtype);
1971                         wtype = info_bdq_free(transfer_from[cnt], space);
1972                         if (wtype != QUOTA_NL_NOWARN)
1973                                 prepare_warning(&warn_from_space[cnt],
1974                                                 transfer_from[cnt], wtype);
1975                         dquot_decr_inodes(transfer_from[cnt], inode_usage);
1976                         dquot_decr_space(transfer_from[cnt], cur_space);
1977                         dquot_free_reserved_space(transfer_from[cnt],
1978                                                   rsv_space);
1979                 }
1980
1981                 dquot_incr_inodes(transfer_to[cnt], inode_usage);
1982                 dquot_incr_space(transfer_to[cnt], cur_space);
1983                 dquot_resv_space(transfer_to[cnt], rsv_space);
1984
1985                 i_dquot(inode)[cnt] = transfer_to[cnt];
1986         }
1987         spin_unlock(&dq_data_lock);
1988
1989         mark_all_dquot_dirty(transfer_from);
1990         mark_all_dquot_dirty(transfer_to);
1991         flush_warnings(warn_to);
1992         flush_warnings(warn_from_inodes);
1993         flush_warnings(warn_from_space);
1994         /* Pass back references to put */
1995         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
1996                 if (is_valid[cnt])
1997                         transfer_to[cnt] = transfer_from[cnt];
1998         return 0;
1999 over_quota:
2000         spin_unlock(&dq_data_lock);
2001         flush_warnings(warn_to);
2002         return ret;
2003 }
2004 EXPORT_SYMBOL(__dquot_transfer);
2005
2006 /* Wrapper for transferring ownership of an inode for uid/gid only
2007  * Called from FSXXX_setattr()
2008  */
2009 int dquot_transfer(struct inode *inode, struct iattr *iattr)
2010 {
2011         struct dquot *transfer_to[MAXQUOTAS] = {};
2012         struct dquot *dquot;
2013         struct super_block *sb = inode->i_sb;
2014         int ret;
2015
2016         if (!dquot_active(inode))
2017                 return 0;
2018
2019         if (iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)){
2020                 dquot = dqget(sb, make_kqid_uid(iattr->ia_uid));
2021                 if (IS_ERR(dquot)) {
2022                         if (PTR_ERR(dquot) != -ESRCH) {
2023                                 ret = PTR_ERR(dquot);
2024                                 goto out_put;
2025                         }
2026                         dquot = NULL;
2027                 }
2028                 transfer_to[USRQUOTA] = dquot;
2029         }
2030         if (iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid)){
2031                 dquot = dqget(sb, make_kqid_gid(iattr->ia_gid));
2032                 if (IS_ERR(dquot)) {
2033                         if (PTR_ERR(dquot) != -ESRCH) {
2034                                 ret = PTR_ERR(dquot);
2035                                 goto out_put;
2036                         }
2037                         dquot = NULL;
2038                 }
2039                 transfer_to[GRPQUOTA] = dquot;
2040         }
2041         ret = __dquot_transfer(inode, transfer_to);
2042 out_put:
2043         dqput_all(transfer_to);
2044         return ret;
2045 }
2046 EXPORT_SYMBOL(dquot_transfer);
2047
2048 /*
2049  * Write info of quota file to disk
2050  */
2051 int dquot_commit_info(struct super_block *sb, int type)
2052 {
2053         struct quota_info *dqopt = sb_dqopt(sb);
2054
2055         return dqopt->ops[type]->write_file_info(sb, type);
2056 }
2057 EXPORT_SYMBOL(dquot_commit_info);
2058
2059 int dquot_get_next_id(struct super_block *sb, struct kqid *qid)
2060 {
2061         struct quota_info *dqopt = sb_dqopt(sb);
2062
2063         if (!sb_has_quota_active(sb, qid->type))
2064                 return -ESRCH;
2065         if (!dqopt->ops[qid->type]->get_next_id)
2066                 return -ENOSYS;
2067         return dqopt->ops[qid->type]->get_next_id(sb, qid);
2068 }
2069 EXPORT_SYMBOL(dquot_get_next_id);
2070
2071 /*
2072  * Definitions of diskquota operations.
2073  */
2074 const struct dquot_operations dquot_operations = {
2075         .write_dquot    = dquot_commit,
2076         .acquire_dquot  = dquot_acquire,
2077         .release_dquot  = dquot_release,
2078         .mark_dirty     = dquot_mark_dquot_dirty,
2079         .write_info     = dquot_commit_info,
2080         .alloc_dquot    = dquot_alloc,
2081         .destroy_dquot  = dquot_destroy,
2082         .get_next_id    = dquot_get_next_id,
2083 };
2084 EXPORT_SYMBOL(dquot_operations);
2085
2086 /*
2087  * Generic helper for ->open on filesystems supporting disk quotas.
2088  */
2089 int dquot_file_open(struct inode *inode, struct file *file)
2090 {
2091         int error;
2092
2093         error = generic_file_open(inode, file);
2094         if (!error && (file->f_mode & FMODE_WRITE))
2095                 dquot_initialize(inode);
2096         return error;
2097 }
2098 EXPORT_SYMBOL(dquot_file_open);
2099
2100 /*
2101  * Turn quota off on a device. type == -1 ==> quotaoff for all types (umount)
2102  */
2103 int dquot_disable(struct super_block *sb, int type, unsigned int flags)
2104 {
2105         int cnt, ret = 0;
2106         struct quota_info *dqopt = sb_dqopt(sb);
2107         struct inode *toputinode[MAXQUOTAS];
2108
2109         /* s_umount should be held in exclusive mode */
2110         if (WARN_ON_ONCE(down_read_trylock(&sb->s_umount)))
2111                 up_read(&sb->s_umount);
2112
2113         /* Cannot turn off usage accounting without turning off limits, or
2114          * suspend quotas and simultaneously turn quotas off. */
2115         if ((flags & DQUOT_USAGE_ENABLED && !(flags & DQUOT_LIMITS_ENABLED))
2116             || (flags & DQUOT_SUSPENDED && flags & (DQUOT_LIMITS_ENABLED |
2117             DQUOT_USAGE_ENABLED)))
2118                 return -EINVAL;
2119
2120         /*
2121          * Skip everything if there's nothing to do. We have to do this because
2122          * sometimes we are called when fill_super() failed and calling
2123          * sync_fs() in such cases does no good.
2124          */
2125         if (!sb_any_quota_loaded(sb))
2126                 return 0;
2127
2128         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
2129                 toputinode[cnt] = NULL;
2130                 if (type != -1 && cnt != type)
2131                         continue;
2132                 if (!sb_has_quota_loaded(sb, cnt))
2133                         continue;
2134
2135                 if (flags & DQUOT_SUSPENDED) {
2136                         spin_lock(&dq_state_lock);
2137                         dqopt->flags |=
2138                                 dquot_state_flag(DQUOT_SUSPENDED, cnt);
2139                         spin_unlock(&dq_state_lock);
2140                 } else {
2141                         spin_lock(&dq_state_lock);
2142                         dqopt->flags &= ~dquot_state_flag(flags, cnt);
2143                         /* Turning off suspended quotas? */
2144                         if (!sb_has_quota_loaded(sb, cnt) &&
2145                             sb_has_quota_suspended(sb, cnt)) {
2146                                 dqopt->flags &= ~dquot_state_flag(
2147                                                         DQUOT_SUSPENDED, cnt);
2148                                 spin_unlock(&dq_state_lock);
2149                                 iput(dqopt->files[cnt]);
2150                                 dqopt->files[cnt] = NULL;
2151                                 continue;
2152                         }
2153                         spin_unlock(&dq_state_lock);
2154                 }
2155
2156                 /* We still have to keep quota loaded? */
2157                 if (sb_has_quota_loaded(sb, cnt) && !(flags & DQUOT_SUSPENDED))
2158                         continue;
2159
2160                 /* Note: these are blocking operations */
2161                 drop_dquot_ref(sb, cnt);
2162                 invalidate_dquots(sb, cnt);
2163                 /*
2164                  * Now all dquots should be invalidated, all writes done so we
2165                  * should be only users of the info. No locks needed.
2166                  */
2167                 if (info_dirty(&dqopt->info[cnt]))
2168                         sb->dq_op->write_info(sb, cnt);
2169                 if (dqopt->ops[cnt]->free_file_info)
2170                         dqopt->ops[cnt]->free_file_info(sb, cnt);
2171                 put_quota_format(dqopt->info[cnt].dqi_format);
2172
2173                 toputinode[cnt] = dqopt->files[cnt];
2174                 if (!sb_has_quota_loaded(sb, cnt))
2175                         dqopt->files[cnt] = NULL;
2176                 dqopt->info[cnt].dqi_flags = 0;
2177                 dqopt->info[cnt].dqi_igrace = 0;
2178                 dqopt->info[cnt].dqi_bgrace = 0;
2179                 dqopt->ops[cnt] = NULL;
2180         }
2181
2182         /* Skip syncing and setting flags if quota files are hidden */
2183         if (dqopt->flags & DQUOT_QUOTA_SYS_FILE)
2184                 goto put_inodes;
2185
2186         /* Sync the superblock so that buffers with quota data are written to
2187          * disk (and so userspace sees correct data afterwards). */
2188         if (sb->s_op->sync_fs)
2189                 sb->s_op->sync_fs(sb, 1);
2190         sync_blockdev(sb->s_bdev);
2191         /* Now the quota files are just ordinary files and we can set the
2192          * inode flags back. Moreover we discard the pagecache so that
2193          * userspace sees the writes we did bypassing the pagecache. We
2194          * must also discard the blockdev buffers so that we see the
2195          * changes done by userspace on the next quotaon() */
2196         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
2197                 /* This can happen when suspending quotas on remount-ro... */
2198                 if (toputinode[cnt] && !sb_has_quota_loaded(sb, cnt)) {
2199                         inode_lock(toputinode[cnt]);
2200                         toputinode[cnt]->i_flags &= ~S_NOQUOTA;
2201                         truncate_inode_pages(&toputinode[cnt]->i_data, 0);
2202                         inode_unlock(toputinode[cnt]);
2203                         mark_inode_dirty_sync(toputinode[cnt]);
2204                 }
2205         if (sb->s_bdev)
2206                 invalidate_bdev(sb->s_bdev);
2207 put_inodes:
2208         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
2209                 if (toputinode[cnt]) {
2210                         /* On remount RO, we keep the inode pointer so that we
2211                          * can reenable quota on the subsequent remount RW. We
2212                          * have to check 'flags' variable and not use sb_has_
2213                          * function because another quotaon / quotaoff could
2214                          * change global state before we got here. We refuse
2215                          * to suspend quotas when there is pending delete on
2216                          * the quota file... */
2217                         if (!(flags & DQUOT_SUSPENDED))
2218                                 iput(toputinode[cnt]);
2219                         else if (!toputinode[cnt]->i_nlink)
2220                                 ret = -EBUSY;
2221                 }
2222         return ret;
2223 }
2224 EXPORT_SYMBOL(dquot_disable);
2225
2226 int dquot_quota_off(struct super_block *sb, int type)
2227 {
2228         return dquot_disable(sb, type,
2229                              DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
2230 }
2231 EXPORT_SYMBOL(dquot_quota_off);
2232
2233 /*
2234  *      Turn quotas on on a device
2235  */
2236
2237 /*
2238  * Helper function to turn quotas on when we already have the inode of
2239  * quota file and no quota information is loaded.
2240  */
2241 static int vfs_load_quota_inode(struct inode *inode, int type, int format_id,
2242         unsigned int flags)
2243 {
2244         struct quota_format_type *fmt = find_quota_format(format_id);
2245         struct super_block *sb = inode->i_sb;
2246         struct quota_info *dqopt = sb_dqopt(sb);
2247         int error;
2248
2249         if (!fmt)
2250                 return -ESRCH;
2251         if (!S_ISREG(inode->i_mode)) {
2252                 error = -EACCES;
2253                 goto out_fmt;
2254         }
2255         if (IS_RDONLY(inode)) {
2256                 error = -EROFS;
2257                 goto out_fmt;
2258         }
2259         if (!sb->s_op->quota_write || !sb->s_op->quota_read ||
2260             (type == PRJQUOTA && sb->dq_op->get_projid == NULL)) {
2261                 error = -EINVAL;
2262                 goto out_fmt;
2263         }
2264         /* Filesystems outside of init_user_ns not yet supported */
2265         if (sb->s_user_ns != &init_user_ns) {
2266                 error = -EINVAL;
2267                 goto out_fmt;
2268         }
2269         /* Usage always has to be set... */
2270         if (!(flags & DQUOT_USAGE_ENABLED)) {
2271                 error = -EINVAL;
2272                 goto out_fmt;
2273         }
2274         if (sb_has_quota_loaded(sb, type)) {
2275                 error = -EBUSY;
2276                 goto out_fmt;
2277         }
2278
2279         if (!(dqopt->flags & DQUOT_QUOTA_SYS_FILE)) {
2280                 /* As we bypass the pagecache we must now flush all the
2281                  * dirty data and invalidate caches so that kernel sees
2282                  * changes from userspace. It is not enough to just flush
2283                  * the quota file since if blocksize < pagesize, invalidation
2284                  * of the cache could fail because of other unrelated dirty
2285                  * data */
2286                 sync_filesystem(sb);
2287                 invalidate_bdev(sb->s_bdev);
2288         }
2289
2290         if (!(dqopt->flags & DQUOT_QUOTA_SYS_FILE)) {
2291                 /* We don't want quota and atime on quota files (deadlocks
2292                  * possible) Also nobody should write to the file - we use
2293                  * special IO operations which ignore the immutable bit. */
2294                 inode_lock(inode);
2295                 inode->i_flags |= S_NOQUOTA;
2296                 inode_unlock(inode);
2297                 /*
2298                  * When S_NOQUOTA is set, remove dquot references as no more
2299                  * references can be added
2300                  */
2301                 __dquot_drop(inode);
2302         }
2303
2304         error = -EIO;
2305         dqopt->files[type] = igrab(inode);
2306         if (!dqopt->files[type])
2307                 goto out_file_flags;
2308         error = -EINVAL;
2309         if (!fmt->qf_ops->check_quota_file(sb, type))
2310                 goto out_file_init;
2311
2312         dqopt->ops[type] = fmt->qf_ops;
2313         dqopt->info[type].dqi_format = fmt;
2314         dqopt->info[type].dqi_fmt_id = format_id;
2315         INIT_LIST_HEAD(&dqopt->info[type].dqi_dirty_list);
2316         error = dqopt->ops[type]->read_file_info(sb, type);
2317         if (error < 0)
2318                 goto out_file_init;
2319         if (dqopt->flags & DQUOT_QUOTA_SYS_FILE)
2320                 dqopt->info[type].dqi_flags |= DQF_SYS_FILE;
2321         spin_lock(&dq_state_lock);
2322         dqopt->flags |= dquot_state_flag(flags, type);
2323         spin_unlock(&dq_state_lock);
2324
2325         add_dquot_ref(sb, type);
2326
2327         return 0;
2328
2329 out_file_init:
2330         dqopt->files[type] = NULL;
2331         iput(inode);
2332 out_file_flags:
2333         inode_lock(inode);
2334         inode->i_flags &= ~S_NOQUOTA;
2335         inode_unlock(inode);
2336 out_fmt:
2337         put_quota_format(fmt);
2338
2339         return error; 
2340 }
2341
2342 /* Reenable quotas on remount RW */
2343 int dquot_resume(struct super_block *sb, int type)
2344 {
2345         struct quota_info *dqopt = sb_dqopt(sb);
2346         struct inode *inode;
2347         int ret = 0, cnt;
2348         unsigned int flags;
2349
2350         /* s_umount should be held in exclusive mode */
2351         if (WARN_ON_ONCE(down_read_trylock(&sb->s_umount)))
2352                 up_read(&sb->s_umount);
2353
2354         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
2355                 if (type != -1 && cnt != type)
2356                         continue;
2357                 if (!sb_has_quota_suspended(sb, cnt))
2358                         continue;
2359
2360                 inode = dqopt->files[cnt];
2361                 dqopt->files[cnt] = NULL;
2362                 spin_lock(&dq_state_lock);
2363                 flags = dqopt->flags & dquot_state_flag(DQUOT_USAGE_ENABLED |
2364                                                         DQUOT_LIMITS_ENABLED,
2365                                                         cnt);
2366                 dqopt->flags &= ~dquot_state_flag(DQUOT_STATE_FLAGS, cnt);
2367                 spin_unlock(&dq_state_lock);
2368
2369                 flags = dquot_generic_flag(flags, cnt);
2370                 ret = vfs_load_quota_inode(inode, cnt,
2371                                 dqopt->info[cnt].dqi_fmt_id, flags);
2372                 iput(inode);
2373         }
2374
2375         return ret;
2376 }
2377 EXPORT_SYMBOL(dquot_resume);
2378
2379 int dquot_quota_on(struct super_block *sb, int type, int format_id,
2380                    const struct path *path)
2381 {
2382         int error = security_quota_on(path->dentry);
2383         if (error)
2384                 return error;
2385         /* Quota file not on the same filesystem? */
2386         if (path->dentry->d_sb != sb)
2387                 error = -EXDEV;
2388         else
2389                 error = vfs_load_quota_inode(d_inode(path->dentry), type,
2390                                              format_id, DQUOT_USAGE_ENABLED |
2391                                              DQUOT_LIMITS_ENABLED);
2392         return error;
2393 }
2394 EXPORT_SYMBOL(dquot_quota_on);
2395
2396 /*
2397  * More powerful function for turning on quotas allowing setting
2398  * of individual quota flags
2399  */
2400 int dquot_enable(struct inode *inode, int type, int format_id,
2401                  unsigned int flags)
2402 {
2403         struct super_block *sb = inode->i_sb;
2404
2405         /* Just unsuspend quotas? */
2406         BUG_ON(flags & DQUOT_SUSPENDED);
2407         /* s_umount should be held in exclusive mode */
2408         if (WARN_ON_ONCE(down_read_trylock(&sb->s_umount)))
2409                 up_read(&sb->s_umount);
2410
2411         if (!flags)
2412                 return 0;
2413         /* Just updating flags needed? */
2414         if (sb_has_quota_loaded(sb, type)) {
2415                 if (flags & DQUOT_USAGE_ENABLED &&
2416                     sb_has_quota_usage_enabled(sb, type))
2417                         return -EBUSY;
2418                 if (flags & DQUOT_LIMITS_ENABLED &&
2419                     sb_has_quota_limits_enabled(sb, type))
2420                         return -EBUSY;
2421                 spin_lock(&dq_state_lock);
2422                 sb_dqopt(sb)->flags |= dquot_state_flag(flags, type);
2423                 spin_unlock(&dq_state_lock);
2424                 return 0;
2425         }
2426
2427         return vfs_load_quota_inode(inode, type, format_id, flags);
2428 }
2429 EXPORT_SYMBOL(dquot_enable);
2430
2431 /*
2432  * This function is used when filesystem needs to initialize quotas
2433  * during mount time.
2434  */
2435 int dquot_quota_on_mount(struct super_block *sb, char *qf_name,
2436                 int format_id, int type)
2437 {
2438         struct dentry *dentry;
2439         int error;
2440
2441         dentry = lookup_one_len_unlocked(qf_name, sb->s_root, strlen(qf_name));
2442         if (IS_ERR(dentry))
2443                 return PTR_ERR(dentry);
2444
2445         if (d_really_is_negative(dentry)) {
2446                 error = -ENOENT;
2447                 goto out;
2448         }
2449
2450         error = security_quota_on(dentry);
2451         if (!error)
2452                 error = vfs_load_quota_inode(d_inode(dentry), type, format_id,
2453                                 DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
2454
2455 out:
2456         dput(dentry);
2457         return error;
2458 }
2459 EXPORT_SYMBOL(dquot_quota_on_mount);
2460
2461 static int dquot_quota_enable(struct super_block *sb, unsigned int flags)
2462 {
2463         int ret;
2464         int type;
2465         struct quota_info *dqopt = sb_dqopt(sb);
2466
2467         if (!(dqopt->flags & DQUOT_QUOTA_SYS_FILE))
2468                 return -ENOSYS;
2469         /* Accounting cannot be turned on while fs is mounted */
2470         flags &= ~(FS_QUOTA_UDQ_ACCT | FS_QUOTA_GDQ_ACCT | FS_QUOTA_PDQ_ACCT);
2471         if (!flags)
2472                 return -EINVAL;
2473         for (type = 0; type < MAXQUOTAS; type++) {
2474                 if (!(flags & qtype_enforce_flag(type)))
2475                         continue;
2476                 /* Can't enforce without accounting */
2477                 if (!sb_has_quota_usage_enabled(sb, type))
2478                         return -EINVAL;
2479                 ret = dquot_enable(dqopt->files[type], type,
2480                                    dqopt->info[type].dqi_fmt_id,
2481                                    DQUOT_LIMITS_ENABLED);
2482                 if (ret < 0)
2483                         goto out_err;
2484         }
2485         return 0;
2486 out_err:
2487         /* Backout enforcement enablement we already did */
2488         for (type--; type >= 0; type--)  {
2489                 if (flags & qtype_enforce_flag(type))
2490                         dquot_disable(sb, type, DQUOT_LIMITS_ENABLED);
2491         }
2492         /* Error code translation for better compatibility with XFS */
2493         if (ret == -EBUSY)
2494                 ret = -EEXIST;
2495         return ret;
2496 }
2497
2498 static int dquot_quota_disable(struct super_block *sb, unsigned int flags)
2499 {
2500         int ret;
2501         int type;
2502         struct quota_info *dqopt = sb_dqopt(sb);
2503
2504         if (!(dqopt->flags & DQUOT_QUOTA_SYS_FILE))
2505                 return -ENOSYS;
2506         /*
2507          * We don't support turning off accounting via quotactl. In principle
2508          * quota infrastructure can do this but filesystems don't expect
2509          * userspace to be able to do it.
2510          */
2511         if (flags &
2512                   (FS_QUOTA_UDQ_ACCT | FS_QUOTA_GDQ_ACCT | FS_QUOTA_PDQ_ACCT))
2513                 return -EOPNOTSUPP;
2514
2515         /* Filter out limits not enabled */
2516         for (type = 0; type < MAXQUOTAS; type++)
2517                 if (!sb_has_quota_limits_enabled(sb, type))
2518                         flags &= ~qtype_enforce_flag(type);
2519         /* Nothing left? */
2520         if (!flags)
2521                 return -EEXIST;
2522         for (type = 0; type < MAXQUOTAS; type++) {
2523                 if (flags & qtype_enforce_flag(type)) {
2524                         ret = dquot_disable(sb, type, DQUOT_LIMITS_ENABLED);
2525                         if (ret < 0)
2526                                 goto out_err;
2527                 }
2528         }
2529         return 0;
2530 out_err:
2531         /* Backout enforcement disabling we already did */
2532         for (type--; type >= 0; type--)  {
2533                 if (flags & qtype_enforce_flag(type))
2534                         dquot_enable(dqopt->files[type], type,
2535                                      dqopt->info[type].dqi_fmt_id,
2536                                      DQUOT_LIMITS_ENABLED);
2537         }
2538         return ret;
2539 }
2540
2541 /* Generic routine for getting common part of quota structure */
2542 static void do_get_dqblk(struct dquot *dquot, struct qc_dqblk *di)
2543 {
2544         struct mem_dqblk *dm = &dquot->dq_dqb;
2545
2546         memset(di, 0, sizeof(*di));
2547         spin_lock(&dq_data_lock);
2548         di->d_spc_hardlimit = dm->dqb_bhardlimit;
2549         di->d_spc_softlimit = dm->dqb_bsoftlimit;
2550         di->d_ino_hardlimit = dm->dqb_ihardlimit;
2551         di->d_ino_softlimit = dm->dqb_isoftlimit;
2552         di->d_space = dm->dqb_curspace + dm->dqb_rsvspace;
2553         di->d_ino_count = dm->dqb_curinodes;
2554         di->d_spc_timer = dm->dqb_btime;
2555         di->d_ino_timer = dm->dqb_itime;
2556         spin_unlock(&dq_data_lock);
2557 }
2558
2559 int dquot_get_dqblk(struct super_block *sb, struct kqid qid,
2560                     struct qc_dqblk *di)
2561 {
2562         struct dquot *dquot;
2563
2564         dquot = dqget(sb, qid);
2565         if (IS_ERR(dquot))
2566                 return PTR_ERR(dquot);
2567         do_get_dqblk(dquot, di);
2568         dqput(dquot);
2569
2570         return 0;
2571 }
2572 EXPORT_SYMBOL(dquot_get_dqblk);
2573
2574 int dquot_get_next_dqblk(struct super_block *sb, struct kqid *qid,
2575                          struct qc_dqblk *di)
2576 {
2577         struct dquot *dquot;
2578         int err;
2579
2580         if (!sb->dq_op->get_next_id)
2581                 return -ENOSYS;
2582         err = sb->dq_op->get_next_id(sb, qid);
2583         if (err < 0)
2584                 return err;
2585         dquot = dqget(sb, *qid);
2586         if (IS_ERR(dquot))
2587                 return PTR_ERR(dquot);
2588         do_get_dqblk(dquot, di);
2589         dqput(dquot);
2590
2591         return 0;
2592 }
2593 EXPORT_SYMBOL(dquot_get_next_dqblk);
2594
2595 #define VFS_QC_MASK \
2596         (QC_SPACE | QC_SPC_SOFT | QC_SPC_HARD | \
2597          QC_INO_COUNT | QC_INO_SOFT | QC_INO_HARD | \
2598          QC_SPC_TIMER | QC_INO_TIMER)
2599
2600 /* Generic routine for setting common part of quota structure */
2601 static int do_set_dqblk(struct dquot *dquot, struct qc_dqblk *di)
2602 {
2603         struct mem_dqblk *dm = &dquot->dq_dqb;
2604         int check_blim = 0, check_ilim = 0;
2605         struct mem_dqinfo *dqi = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type];
2606
2607         if (di->d_fieldmask & ~VFS_QC_MASK)
2608                 return -EINVAL;
2609
2610         if (((di->d_fieldmask & QC_SPC_SOFT) &&
2611              di->d_spc_softlimit > dqi->dqi_max_spc_limit) ||
2612             ((di->d_fieldmask & QC_SPC_HARD) &&
2613              di->d_spc_hardlimit > dqi->dqi_max_spc_limit) ||
2614             ((di->d_fieldmask & QC_INO_SOFT) &&
2615              (di->d_ino_softlimit > dqi->dqi_max_ino_limit)) ||
2616             ((di->d_fieldmask & QC_INO_HARD) &&
2617              (di->d_ino_hardlimit > dqi->dqi_max_ino_limit)))
2618                 return -ERANGE;
2619
2620         spin_lock(&dq_data_lock);
2621         if (di->d_fieldmask & QC_SPACE) {
2622                 dm->dqb_curspace = di->d_space - dm->dqb_rsvspace;
2623                 check_blim = 1;
2624                 set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
2625         }
2626
2627         if (di->d_fieldmask & QC_SPC_SOFT)
2628                 dm->dqb_bsoftlimit = di->d_spc_softlimit;
2629         if (di->d_fieldmask & QC_SPC_HARD)
2630                 dm->dqb_bhardlimit = di->d_spc_hardlimit;
2631         if (di->d_fieldmask & (QC_SPC_SOFT | QC_SPC_HARD)) {
2632                 check_blim = 1;
2633                 set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
2634         }
2635
2636         if (di->d_fieldmask & QC_INO_COUNT) {
2637                 dm->dqb_curinodes = di->d_ino_count;
2638                 check_ilim = 1;
2639                 set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
2640         }
2641
2642         if (di->d_fieldmask & QC_INO_SOFT)
2643                 dm->dqb_isoftlimit = di->d_ino_softlimit;
2644         if (di->d_fieldmask & QC_INO_HARD)
2645                 dm->dqb_ihardlimit = di->d_ino_hardlimit;
2646         if (di->d_fieldmask & (QC_INO_SOFT | QC_INO_HARD)) {
2647                 check_ilim = 1;
2648                 set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
2649         }
2650
2651         if (di->d_fieldmask & QC_SPC_TIMER) {
2652                 dm->dqb_btime = di->d_spc_timer;
2653                 check_blim = 1;
2654                 set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
2655         }
2656
2657         if (di->d_fieldmask & QC_INO_TIMER) {
2658                 dm->dqb_itime = di->d_ino_timer;
2659                 check_ilim = 1;
2660                 set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
2661         }
2662
2663         if (check_blim) {
2664                 if (!dm->dqb_bsoftlimit ||
2665                     dm->dqb_curspace < dm->dqb_bsoftlimit) {
2666                         dm->dqb_btime = 0;
2667                         clear_bit(DQ_BLKS_B, &dquot->dq_flags);
2668                 } else if (!(di->d_fieldmask & QC_SPC_TIMER))
2669                         /* Set grace only if user hasn't provided his own... */
2670                         dm->dqb_btime = ktime_get_real_seconds() + dqi->dqi_bgrace;
2671         }
2672         if (check_ilim) {
2673                 if (!dm->dqb_isoftlimit ||
2674                     dm->dqb_curinodes < dm->dqb_isoftlimit) {
2675                         dm->dqb_itime = 0;
2676                         clear_bit(DQ_INODES_B, &dquot->dq_flags);
2677                 } else if (!(di->d_fieldmask & QC_INO_TIMER))
2678                         /* Set grace only if user hasn't provided his own... */
2679                         dm->dqb_itime = ktime_get_real_seconds() + dqi->dqi_igrace;
2680         }
2681         if (dm->dqb_bhardlimit || dm->dqb_bsoftlimit || dm->dqb_ihardlimit ||
2682             dm->dqb_isoftlimit)
2683                 clear_bit(DQ_FAKE_B, &dquot->dq_flags);
2684         else
2685                 set_bit(DQ_FAKE_B, &dquot->dq_flags);
2686         spin_unlock(&dq_data_lock);
2687         mark_dquot_dirty(dquot);
2688
2689         return 0;
2690 }
2691
2692 int dquot_set_dqblk(struct super_block *sb, struct kqid qid,
2693                   struct qc_dqblk *di)
2694 {
2695         struct dquot *dquot;
2696         int rc;
2697
2698         dquot = dqget(sb, qid);
2699         if (IS_ERR(dquot)) {
2700                 rc = PTR_ERR(dquot);
2701                 goto out;
2702         }
2703         rc = do_set_dqblk(dquot, di);
2704         dqput(dquot);
2705 out:
2706         return rc;
2707 }
2708 EXPORT_SYMBOL(dquot_set_dqblk);
2709
2710 /* Generic routine for getting common part of quota file information */
2711 int dquot_get_state(struct super_block *sb, struct qc_state *state)
2712 {
2713         struct mem_dqinfo *mi;
2714         struct qc_type_state *tstate;
2715         struct quota_info *dqopt = sb_dqopt(sb);
2716         int type;
2717   
2718         memset(state, 0, sizeof(*state));
2719         for (type = 0; type < MAXQUOTAS; type++) {
2720                 if (!sb_has_quota_active(sb, type))
2721                         continue;
2722                 tstate = state->s_state + type;
2723                 mi = sb_dqopt(sb)->info + type;
2724                 tstate->flags = QCI_ACCT_ENABLED;
2725                 spin_lock(&dq_data_lock);
2726                 if (mi->dqi_flags & DQF_SYS_FILE)
2727                         tstate->flags |= QCI_SYSFILE;
2728                 if (mi->dqi_flags & DQF_ROOT_SQUASH)
2729                         tstate->flags |= QCI_ROOT_SQUASH;
2730                 if (sb_has_quota_limits_enabled(sb, type))
2731                         tstate->flags |= QCI_LIMITS_ENFORCED;
2732                 tstate->spc_timelimit = mi->dqi_bgrace;
2733                 tstate->ino_timelimit = mi->dqi_igrace;
2734                 tstate->ino = dqopt->files[type]->i_ino;
2735                 tstate->blocks = dqopt->files[type]->i_blocks;
2736                 tstate->nextents = 1;   /* We don't know... */
2737                 spin_unlock(&dq_data_lock);
2738         }
2739         return 0;
2740 }
2741 EXPORT_SYMBOL(dquot_get_state);
2742
2743 /* Generic routine for setting common part of quota file information */
2744 int dquot_set_dqinfo(struct super_block *sb, int type, struct qc_info *ii)
2745 {
2746         struct mem_dqinfo *mi;
2747         int err = 0;
2748
2749         if ((ii->i_fieldmask & QC_WARNS_MASK) ||
2750             (ii->i_fieldmask & QC_RT_SPC_TIMER))
2751                 return -EINVAL;
2752         if (!sb_has_quota_active(sb, type))
2753                 return -ESRCH;
2754         mi = sb_dqopt(sb)->info + type;
2755         if (ii->i_fieldmask & QC_FLAGS) {
2756                 if ((ii->i_flags & QCI_ROOT_SQUASH &&
2757                      mi->dqi_format->qf_fmt_id != QFMT_VFS_OLD))
2758                         return -EINVAL;
2759         }
2760         spin_lock(&dq_data_lock);
2761         if (ii->i_fieldmask & QC_SPC_TIMER)
2762                 mi->dqi_bgrace = ii->i_spc_timelimit;
2763         if (ii->i_fieldmask & QC_INO_TIMER)
2764                 mi->dqi_igrace = ii->i_ino_timelimit;
2765         if (ii->i_fieldmask & QC_FLAGS) {
2766                 if (ii->i_flags & QCI_ROOT_SQUASH)
2767                         mi->dqi_flags |= DQF_ROOT_SQUASH;
2768                 else
2769                         mi->dqi_flags &= ~DQF_ROOT_SQUASH;
2770         }
2771         spin_unlock(&dq_data_lock);
2772         mark_info_dirty(sb, type);
2773         /* Force write to disk */
2774         sb->dq_op->write_info(sb, type);
2775         return err;
2776 }
2777 EXPORT_SYMBOL(dquot_set_dqinfo);
2778
2779 const struct quotactl_ops dquot_quotactl_sysfile_ops = {
2780         .quota_enable   = dquot_quota_enable,
2781         .quota_disable  = dquot_quota_disable,
2782         .quota_sync     = dquot_quota_sync,
2783         .get_state      = dquot_get_state,
2784         .set_info       = dquot_set_dqinfo,
2785         .get_dqblk      = dquot_get_dqblk,
2786         .get_nextdqblk  = dquot_get_next_dqblk,
2787         .set_dqblk      = dquot_set_dqblk
2788 };
2789 EXPORT_SYMBOL(dquot_quotactl_sysfile_ops);
2790
2791 static int do_proc_dqstats(struct ctl_table *table, int write,
2792                      void __user *buffer, size_t *lenp, loff_t *ppos)
2793 {
2794         unsigned int type = (int *)table->data - dqstats.stat;
2795
2796         /* Update global table */
2797         dqstats.stat[type] =
2798                         percpu_counter_sum_positive(&dqstats.counter[type]);
2799         return proc_dointvec(table, write, buffer, lenp, ppos);
2800 }
2801
2802 static struct ctl_table fs_dqstats_table[] = {
2803         {
2804                 .procname       = "lookups",
2805                 .data           = &dqstats.stat[DQST_LOOKUPS],
2806                 .maxlen         = sizeof(int),
2807                 .mode           = 0444,
2808                 .proc_handler   = do_proc_dqstats,
2809         },
2810         {
2811                 .procname       = "drops",
2812                 .data           = &dqstats.stat[DQST_DROPS],
2813                 .maxlen         = sizeof(int),
2814                 .mode           = 0444,
2815                 .proc_handler   = do_proc_dqstats,
2816         },
2817         {
2818                 .procname       = "reads",
2819                 .data           = &dqstats.stat[DQST_READS],
2820                 .maxlen         = sizeof(int),
2821                 .mode           = 0444,
2822                 .proc_handler   = do_proc_dqstats,
2823         },
2824         {
2825                 .procname       = "writes",
2826                 .data           = &dqstats.stat[DQST_WRITES],
2827                 .maxlen         = sizeof(int),
2828                 .mode           = 0444,
2829                 .proc_handler   = do_proc_dqstats,
2830         },
2831         {
2832                 .procname       = "cache_hits",
2833                 .data           = &dqstats.stat[DQST_CACHE_HITS],
2834                 .maxlen         = sizeof(int),
2835                 .mode           = 0444,
2836                 .proc_handler   = do_proc_dqstats,
2837         },
2838         {
2839                 .procname       = "allocated_dquots",
2840                 .data           = &dqstats.stat[DQST_ALLOC_DQUOTS],
2841                 .maxlen         = sizeof(int),
2842                 .mode           = 0444,
2843                 .proc_handler   = do_proc_dqstats,
2844         },
2845         {
2846                 .procname       = "free_dquots",
2847                 .data           = &dqstats.stat[DQST_FREE_DQUOTS],
2848                 .maxlen         = sizeof(int),
2849                 .mode           = 0444,
2850                 .proc_handler   = do_proc_dqstats,
2851         },
2852         {
2853                 .procname       = "syncs",
2854                 .data           = &dqstats.stat[DQST_SYNCS],
2855                 .maxlen         = sizeof(int),
2856                 .mode           = 0444,
2857                 .proc_handler   = do_proc_dqstats,
2858         },
2859 #ifdef CONFIG_PRINT_QUOTA_WARNING
2860         {
2861                 .procname       = "warnings",
2862                 .data           = &flag_print_warnings,
2863                 .maxlen         = sizeof(int),
2864                 .mode           = 0644,
2865                 .proc_handler   = proc_dointvec,
2866         },
2867 #endif
2868         { },
2869 };
2870
2871 static struct ctl_table fs_table[] = {
2872         {
2873                 .procname       = "quota",
2874                 .mode           = 0555,
2875                 .child          = fs_dqstats_table,
2876         },
2877         { },
2878 };
2879
2880 static struct ctl_table sys_table[] = {
2881         {
2882                 .procname       = "fs",
2883                 .mode           = 0555,
2884                 .child          = fs_table,
2885         },
2886         { },
2887 };
2888
2889 static int __init dquot_init(void)
2890 {
2891         int i, ret;
2892         unsigned long nr_hash, order;
2893
2894         printk(KERN_NOTICE "VFS: Disk quotas %s\n", __DQUOT_VERSION__);
2895
2896         register_sysctl_table(sys_table);
2897
2898         dquot_cachep = kmem_cache_create("dquot",
2899                         sizeof(struct dquot), sizeof(unsigned long) * 4,
2900                         (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
2901                                 SLAB_MEM_SPREAD|SLAB_PANIC),
2902                         NULL);
2903
2904         order = 0;
2905         dquot_hash = (struct hlist_head *)__get_free_pages(GFP_ATOMIC, order);
2906         if (!dquot_hash)
2907                 panic("Cannot create dquot hash table");
2908
2909         for (i = 0; i < _DQST_DQSTAT_LAST; i++) {
2910                 ret = percpu_counter_init(&dqstats.counter[i], 0, GFP_KERNEL);
2911                 if (ret)
2912                         panic("Cannot create dquot stat counters");
2913         }
2914
2915         /* Find power-of-two hlist_heads which can fit into allocation */
2916         nr_hash = (1UL << order) * PAGE_SIZE / sizeof(struct hlist_head);
2917         dq_hash_bits = 0;
2918         do {
2919                 dq_hash_bits++;
2920         } while (nr_hash >> dq_hash_bits);
2921         dq_hash_bits--;
2922
2923         nr_hash = 1UL << dq_hash_bits;
2924         dq_hash_mask = nr_hash - 1;
2925         for (i = 0; i < nr_hash; i++)
2926                 INIT_HLIST_HEAD(dquot_hash + i);
2927
2928         pr_info("VFS: Dquot-cache hash table entries: %ld (order %ld,"
2929                 " %ld bytes)\n", nr_hash, order, (PAGE_SIZE << order));
2930
2931         register_shrinker(&dqcache_shrinker);
2932
2933         return 0;
2934 }
2935 fs_initcall(dquot_init);