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