xref: /kernel/linux/linux-6.6/fs/gfs2/quota.c (revision 62306a36)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
4 * Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
5 */
6
7/*
8 * Quota change tags are associated with each transaction that allocates or
9 * deallocates space.  Those changes are accumulated locally to each node (in a
10 * per-node file) and then are periodically synced to the quota file.  This
11 * avoids the bottleneck of constantly touching the quota file, but introduces
12 * fuzziness in the current usage value of IDs that are being used on different
13 * nodes in the cluster simultaneously.  So, it is possible for a user on
14 * multiple nodes to overrun their quota, but that overrun is controlable.
15 * Since quota tags are part of transactions, there is no need for a quota check
16 * program to be run on node crashes or anything like that.
17 *
18 * There are couple of knobs that let the administrator manage the quota
19 * fuzziness.  "quota_quantum" sets the maximum time a quota change can be
20 * sitting on one node before being synced to the quota file.  (The default is
21 * 60 seconds.)  Another knob, "quota_scale" controls how quickly the frequency
22 * of quota file syncs increases as the user moves closer to their limit.  The
23 * more frequent the syncs, the more accurate the quota enforcement, but that
24 * means that there is more contention between the nodes for the quota file.
25 * The default value is one.  This sets the maximum theoretical quota overrun
26 * (with infinite node with infinite bandwidth) to twice the user's limit.  (In
27 * practice, the maximum overrun you see should be much less.)  A "quota_scale"
28 * number greater than one makes quota syncs more frequent and reduces the
29 * maximum overrun.  Numbers less than one (but greater than zero) make quota
30 * syncs less frequent.
31 *
32 * GFS quotas also use per-ID Lock Value Blocks (LVBs) to cache the contents of
33 * the quota file, so it is not being constantly read.
34 */
35
36#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
37
38#include <linux/sched.h>
39#include <linux/slab.h>
40#include <linux/mm.h>
41#include <linux/spinlock.h>
42#include <linux/completion.h>
43#include <linux/buffer_head.h>
44#include <linux/sort.h>
45#include <linux/fs.h>
46#include <linux/bio.h>
47#include <linux/gfs2_ondisk.h>
48#include <linux/kthread.h>
49#include <linux/freezer.h>
50#include <linux/quota.h>
51#include <linux/dqblk_xfs.h>
52#include <linux/lockref.h>
53#include <linux/list_lru.h>
54#include <linux/rcupdate.h>
55#include <linux/rculist_bl.h>
56#include <linux/bit_spinlock.h>
57#include <linux/jhash.h>
58#include <linux/vmalloc.h>
59
60#include "gfs2.h"
61#include "incore.h"
62#include "bmap.h"
63#include "glock.h"
64#include "glops.h"
65#include "log.h"
66#include "meta_io.h"
67#include "quota.h"
68#include "rgrp.h"
69#include "super.h"
70#include "trans.h"
71#include "inode.h"
72#include "util.h"
73
74#define GFS2_QD_HASH_SHIFT      12
75#define GFS2_QD_HASH_SIZE       BIT(GFS2_QD_HASH_SHIFT)
76#define GFS2_QD_HASH_MASK       (GFS2_QD_HASH_SIZE - 1)
77
78#define QC_CHANGE 0
79#define QC_SYNC 1
80
81/* Lock order: qd_lock -> bucket lock -> qd->lockref.lock -> lru lock */
82/*                     -> sd_bitmap_lock                              */
83static DEFINE_SPINLOCK(qd_lock);
84struct list_lru gfs2_qd_lru;
85
86static struct hlist_bl_head qd_hash_table[GFS2_QD_HASH_SIZE];
87
88static unsigned int gfs2_qd_hash(const struct gfs2_sbd *sdp,
89				 const struct kqid qid)
90{
91	unsigned int h;
92
93	h = jhash(&sdp, sizeof(struct gfs2_sbd *), 0);
94	h = jhash(&qid, sizeof(struct kqid), h);
95
96	return h & GFS2_QD_HASH_MASK;
97}
98
99static inline void spin_lock_bucket(unsigned int hash)
100{
101        hlist_bl_lock(&qd_hash_table[hash]);
102}
103
104static inline void spin_unlock_bucket(unsigned int hash)
105{
106        hlist_bl_unlock(&qd_hash_table[hash]);
107}
108
109static void gfs2_qd_dealloc(struct rcu_head *rcu)
110{
111	struct gfs2_quota_data *qd = container_of(rcu, struct gfs2_quota_data, qd_rcu);
112	struct gfs2_sbd *sdp = qd->qd_sbd;
113
114	kmem_cache_free(gfs2_quotad_cachep, qd);
115	if (atomic_dec_and_test(&sdp->sd_quota_count))
116		wake_up(&sdp->sd_kill_wait);
117}
118
119static void gfs2_qd_dispose(struct gfs2_quota_data *qd)
120{
121	struct gfs2_sbd *sdp = qd->qd_sbd;
122
123	spin_lock(&qd_lock);
124	list_del(&qd->qd_list);
125	spin_unlock(&qd_lock);
126
127	spin_lock_bucket(qd->qd_hash);
128	hlist_bl_del_rcu(&qd->qd_hlist);
129	spin_unlock_bucket(qd->qd_hash);
130
131	if (!gfs2_withdrawn(sdp)) {
132		gfs2_assert_warn(sdp, !qd->qd_change);
133		gfs2_assert_warn(sdp, !qd->qd_slot_ref);
134		gfs2_assert_warn(sdp, !qd->qd_bh_count);
135	}
136
137	gfs2_glock_put(qd->qd_gl);
138	call_rcu(&qd->qd_rcu, gfs2_qd_dealloc);
139}
140
141static void gfs2_qd_list_dispose(struct list_head *list)
142{
143	struct gfs2_quota_data *qd;
144
145	while (!list_empty(list)) {
146		qd = list_first_entry(list, struct gfs2_quota_data, qd_lru);
147		list_del(&qd->qd_lru);
148
149		gfs2_qd_dispose(qd);
150	}
151}
152
153
154static enum lru_status gfs2_qd_isolate(struct list_head *item,
155		struct list_lru_one *lru, spinlock_t *lru_lock, void *arg)
156{
157	struct list_head *dispose = arg;
158	struct gfs2_quota_data *qd =
159		list_entry(item, struct gfs2_quota_data, qd_lru);
160	enum lru_status status;
161
162	if (!spin_trylock(&qd->qd_lockref.lock))
163		return LRU_SKIP;
164
165	status = LRU_SKIP;
166	if (qd->qd_lockref.count == 0) {
167		lockref_mark_dead(&qd->qd_lockref);
168		list_lru_isolate_move(lru, &qd->qd_lru, dispose);
169		status = LRU_REMOVED;
170	}
171
172	spin_unlock(&qd->qd_lockref.lock);
173	return status;
174}
175
176static unsigned long gfs2_qd_shrink_scan(struct shrinker *shrink,
177					 struct shrink_control *sc)
178{
179	LIST_HEAD(dispose);
180	unsigned long freed;
181
182	if (!(sc->gfp_mask & __GFP_FS))
183		return SHRINK_STOP;
184
185	freed = list_lru_shrink_walk(&gfs2_qd_lru, sc,
186				     gfs2_qd_isolate, &dispose);
187
188	gfs2_qd_list_dispose(&dispose);
189
190	return freed;
191}
192
193static unsigned long gfs2_qd_shrink_count(struct shrinker *shrink,
194					  struct shrink_control *sc)
195{
196	return vfs_pressure_ratio(list_lru_shrink_count(&gfs2_qd_lru, sc));
197}
198
199struct shrinker gfs2_qd_shrinker = {
200	.count_objects = gfs2_qd_shrink_count,
201	.scan_objects = gfs2_qd_shrink_scan,
202	.seeks = DEFAULT_SEEKS,
203	.flags = SHRINKER_NUMA_AWARE,
204};
205
206
207static u64 qd2index(struct gfs2_quota_data *qd)
208{
209	struct kqid qid = qd->qd_id;
210	return (2 * (u64)from_kqid(&init_user_ns, qid)) +
211		((qid.type == USRQUOTA) ? 0 : 1);
212}
213
214static u64 qd2offset(struct gfs2_quota_data *qd)
215{
216	return qd2index(qd) * sizeof(struct gfs2_quota);
217}
218
219static struct gfs2_quota_data *qd_alloc(unsigned hash, struct gfs2_sbd *sdp, struct kqid qid)
220{
221	struct gfs2_quota_data *qd;
222	int error;
223
224	qd = kmem_cache_zalloc(gfs2_quotad_cachep, GFP_NOFS);
225	if (!qd)
226		return NULL;
227
228	qd->qd_sbd = sdp;
229	qd->qd_lockref.count = 0;
230	spin_lock_init(&qd->qd_lockref.lock);
231	qd->qd_id = qid;
232	qd->qd_slot = -1;
233	INIT_LIST_HEAD(&qd->qd_lru);
234	qd->qd_hash = hash;
235
236	error = gfs2_glock_get(sdp, qd2index(qd),
237			      &gfs2_quota_glops, CREATE, &qd->qd_gl);
238	if (error)
239		goto fail;
240
241	return qd;
242
243fail:
244	kmem_cache_free(gfs2_quotad_cachep, qd);
245	return NULL;
246}
247
248static struct gfs2_quota_data *gfs2_qd_search_bucket(unsigned int hash,
249						     const struct gfs2_sbd *sdp,
250						     struct kqid qid)
251{
252	struct gfs2_quota_data *qd;
253	struct hlist_bl_node *h;
254
255	hlist_bl_for_each_entry_rcu(qd, h, &qd_hash_table[hash], qd_hlist) {
256		if (!qid_eq(qd->qd_id, qid))
257			continue;
258		if (qd->qd_sbd != sdp)
259			continue;
260		if (lockref_get_not_dead(&qd->qd_lockref)) {
261			list_lru_del(&gfs2_qd_lru, &qd->qd_lru);
262			return qd;
263		}
264	}
265
266	return NULL;
267}
268
269
270static int qd_get(struct gfs2_sbd *sdp, struct kqid qid,
271		  struct gfs2_quota_data **qdp)
272{
273	struct gfs2_quota_data *qd, *new_qd;
274	unsigned int hash = gfs2_qd_hash(sdp, qid);
275
276	rcu_read_lock();
277	*qdp = qd = gfs2_qd_search_bucket(hash, sdp, qid);
278	rcu_read_unlock();
279
280	if (qd)
281		return 0;
282
283	new_qd = qd_alloc(hash, sdp, qid);
284	if (!new_qd)
285		return -ENOMEM;
286
287	spin_lock(&qd_lock);
288	spin_lock_bucket(hash);
289	*qdp = qd = gfs2_qd_search_bucket(hash, sdp, qid);
290	if (qd == NULL) {
291		new_qd->qd_lockref.count++;
292		*qdp = new_qd;
293		list_add(&new_qd->qd_list, &sdp->sd_quota_list);
294		hlist_bl_add_head_rcu(&new_qd->qd_hlist, &qd_hash_table[hash]);
295		atomic_inc(&sdp->sd_quota_count);
296	}
297	spin_unlock_bucket(hash);
298	spin_unlock(&qd_lock);
299
300	if (qd) {
301		gfs2_glock_put(new_qd->qd_gl);
302		kmem_cache_free(gfs2_quotad_cachep, new_qd);
303	}
304
305	return 0;
306}
307
308
309static void qd_hold(struct gfs2_quota_data *qd)
310{
311	struct gfs2_sbd *sdp = qd->qd_sbd;
312	gfs2_assert(sdp, !__lockref_is_dead(&qd->qd_lockref));
313	lockref_get(&qd->qd_lockref);
314}
315
316static void qd_put(struct gfs2_quota_data *qd)
317{
318	struct gfs2_sbd *sdp;
319
320	if (lockref_put_or_lock(&qd->qd_lockref))
321		return;
322
323	BUG_ON(__lockref_is_dead(&qd->qd_lockref));
324	sdp = qd->qd_sbd;
325	if (unlikely(!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))) {
326		lockref_mark_dead(&qd->qd_lockref);
327		spin_unlock(&qd->qd_lockref.lock);
328
329		gfs2_qd_dispose(qd);
330		return;
331	}
332
333	qd->qd_lockref.count = 0;
334	list_lru_add(&gfs2_qd_lru, &qd->qd_lru);
335	spin_unlock(&qd->qd_lockref.lock);
336}
337
338static int slot_get(struct gfs2_quota_data *qd)
339{
340	struct gfs2_sbd *sdp = qd->qd_sbd;
341	unsigned int bit;
342	int error = 0;
343
344	spin_lock(&sdp->sd_bitmap_lock);
345	if (qd->qd_slot_ref == 0) {
346		bit = find_first_zero_bit(sdp->sd_quota_bitmap,
347					  sdp->sd_quota_slots);
348		if (bit >= sdp->sd_quota_slots) {
349			error = -ENOSPC;
350			goto out;
351		}
352		set_bit(bit, sdp->sd_quota_bitmap);
353		qd->qd_slot = bit;
354	}
355	qd->qd_slot_ref++;
356out:
357	spin_unlock(&sdp->sd_bitmap_lock);
358	return error;
359}
360
361static void slot_hold(struct gfs2_quota_data *qd)
362{
363	struct gfs2_sbd *sdp = qd->qd_sbd;
364
365	spin_lock(&sdp->sd_bitmap_lock);
366	gfs2_assert(sdp, qd->qd_slot_ref);
367	qd->qd_slot_ref++;
368	spin_unlock(&sdp->sd_bitmap_lock);
369}
370
371static void slot_put(struct gfs2_quota_data *qd)
372{
373	struct gfs2_sbd *sdp = qd->qd_sbd;
374
375	spin_lock(&sdp->sd_bitmap_lock);
376	gfs2_assert(sdp, qd->qd_slot_ref);
377	if (!--qd->qd_slot_ref) {
378		BUG_ON(!test_and_clear_bit(qd->qd_slot, sdp->sd_quota_bitmap));
379		qd->qd_slot = -1;
380	}
381	spin_unlock(&sdp->sd_bitmap_lock);
382}
383
384static int bh_get(struct gfs2_quota_data *qd)
385{
386	struct gfs2_sbd *sdp = qd->qd_sbd;
387	struct inode *inode = sdp->sd_qc_inode;
388	struct gfs2_inode *ip = GFS2_I(inode);
389	unsigned int block, offset;
390	struct buffer_head *bh;
391	struct iomap iomap = { };
392	int error;
393
394	mutex_lock(&sdp->sd_quota_mutex);
395
396	if (qd->qd_bh_count++) {
397		mutex_unlock(&sdp->sd_quota_mutex);
398		return 0;
399	}
400
401	block = qd->qd_slot / sdp->sd_qc_per_block;
402	offset = qd->qd_slot % sdp->sd_qc_per_block;
403
404	error = gfs2_iomap_get(inode,
405			       (loff_t)block << inode->i_blkbits,
406			       i_blocksize(inode), &iomap);
407	if (error)
408		goto fail;
409	error = -ENOENT;
410	if (iomap.type != IOMAP_MAPPED)
411		goto fail;
412
413	error = gfs2_meta_read(ip->i_gl, iomap.addr >> inode->i_blkbits,
414			       DIO_WAIT, 0, &bh);
415	if (error)
416		goto fail;
417	error = -EIO;
418	if (gfs2_metatype_check(sdp, bh, GFS2_METATYPE_QC))
419		goto fail_brelse;
420
421	qd->qd_bh = bh;
422	qd->qd_bh_qc = (struct gfs2_quota_change *)
423		(bh->b_data + sizeof(struct gfs2_meta_header) +
424		 offset * sizeof(struct gfs2_quota_change));
425
426	mutex_unlock(&sdp->sd_quota_mutex);
427
428	return 0;
429
430fail_brelse:
431	brelse(bh);
432fail:
433	qd->qd_bh_count--;
434	mutex_unlock(&sdp->sd_quota_mutex);
435	return error;
436}
437
438static void bh_put(struct gfs2_quota_data *qd)
439{
440	struct gfs2_sbd *sdp = qd->qd_sbd;
441
442	mutex_lock(&sdp->sd_quota_mutex);
443	gfs2_assert(sdp, qd->qd_bh_count);
444	if (!--qd->qd_bh_count) {
445		brelse(qd->qd_bh);
446		qd->qd_bh = NULL;
447		qd->qd_bh_qc = NULL;
448	}
449	mutex_unlock(&sdp->sd_quota_mutex);
450}
451
452static int qd_check_sync(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd,
453			 u64 *sync_gen)
454{
455	if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
456	    !test_bit(QDF_CHANGE, &qd->qd_flags) ||
457	    (sync_gen && (qd->qd_sync_gen >= *sync_gen)))
458		return 0;
459
460	/*
461	 * If qd_change is 0 it means a pending quota change was negated.
462	 * We should not sync it, but we still have a qd reference and slot
463	 * reference taken by gfs2_quota_change -> do_qc that need to be put.
464	 */
465	if (!qd->qd_change && test_and_clear_bit(QDF_CHANGE, &qd->qd_flags)) {
466		slot_put(qd);
467		qd_put(qd);
468		return 0;
469	}
470
471	if (!lockref_get_not_dead(&qd->qd_lockref))
472		return 0;
473
474	list_move_tail(&qd->qd_list, &sdp->sd_quota_list);
475	set_bit(QDF_LOCKED, &qd->qd_flags);
476	qd->qd_change_sync = qd->qd_change;
477	slot_hold(qd);
478	return 1;
479}
480
481static int qd_bh_get_or_undo(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd)
482{
483	int error;
484
485	error = bh_get(qd);
486	if (!error)
487		return 0;
488
489	clear_bit(QDF_LOCKED, &qd->qd_flags);
490	slot_put(qd);
491	qd_put(qd);
492	return error;
493}
494
495static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
496{
497	struct gfs2_quota_data *qd = NULL, *iter;
498	int error;
499
500	*qdp = NULL;
501
502	if (sb_rdonly(sdp->sd_vfs))
503		return 0;
504
505	spin_lock(&qd_lock);
506
507	list_for_each_entry(iter, &sdp->sd_quota_list, qd_list) {
508		if (qd_check_sync(sdp, iter, &sdp->sd_quota_sync_gen)) {
509			qd = iter;
510			break;
511		}
512	}
513
514	spin_unlock(&qd_lock);
515
516	if (qd) {
517		error = qd_bh_get_or_undo(sdp, qd);
518		if (error)
519			return error;
520		*qdp = qd;
521	}
522
523	return 0;
524}
525
526static void qdsb_put(struct gfs2_quota_data *qd)
527{
528	bh_put(qd);
529	slot_put(qd);
530	qd_put(qd);
531}
532
533static void qd_unlock(struct gfs2_quota_data *qd)
534{
535	gfs2_assert_warn(qd->qd_sbd, test_bit(QDF_LOCKED, &qd->qd_flags));
536	clear_bit(QDF_LOCKED, &qd->qd_flags);
537	qdsb_put(qd);
538}
539
540static int qdsb_get(struct gfs2_sbd *sdp, struct kqid qid,
541		    struct gfs2_quota_data **qdp)
542{
543	int error;
544
545	error = qd_get(sdp, qid, qdp);
546	if (error)
547		return error;
548
549	error = slot_get(*qdp);
550	if (error)
551		goto fail;
552
553	error = bh_get(*qdp);
554	if (error)
555		goto fail_slot;
556
557	return 0;
558
559fail_slot:
560	slot_put(*qdp);
561fail:
562	qd_put(*qdp);
563	return error;
564}
565
566/**
567 * gfs2_qa_get - make sure we have a quota allocations data structure,
568 *               if necessary
569 * @ip: the inode for this reservation
570 */
571int gfs2_qa_get(struct gfs2_inode *ip)
572{
573	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
574	struct inode *inode = &ip->i_inode;
575
576	if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
577		return 0;
578
579	spin_lock(&inode->i_lock);
580	if (ip->i_qadata == NULL) {
581		struct gfs2_qadata *tmp;
582
583		spin_unlock(&inode->i_lock);
584		tmp = kmem_cache_zalloc(gfs2_qadata_cachep, GFP_NOFS);
585		if (!tmp)
586			return -ENOMEM;
587
588		spin_lock(&inode->i_lock);
589		if (ip->i_qadata == NULL)
590			ip->i_qadata = tmp;
591		else
592			kmem_cache_free(gfs2_qadata_cachep, tmp);
593	}
594	ip->i_qadata->qa_ref++;
595	spin_unlock(&inode->i_lock);
596	return 0;
597}
598
599void gfs2_qa_put(struct gfs2_inode *ip)
600{
601	struct inode *inode = &ip->i_inode;
602
603	spin_lock(&inode->i_lock);
604	if (ip->i_qadata && --ip->i_qadata->qa_ref == 0) {
605		kmem_cache_free(gfs2_qadata_cachep, ip->i_qadata);
606		ip->i_qadata = NULL;
607	}
608	spin_unlock(&inode->i_lock);
609}
610
611int gfs2_quota_hold(struct gfs2_inode *ip, kuid_t uid, kgid_t gid)
612{
613	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
614	struct gfs2_quota_data **qd;
615	int error;
616
617	if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
618		return 0;
619
620	error = gfs2_qa_get(ip);
621	if (error)
622		return error;
623
624	qd = ip->i_qadata->qa_qd;
625
626	if (gfs2_assert_warn(sdp, !ip->i_qadata->qa_qd_num) ||
627	    gfs2_assert_warn(sdp, !test_bit(GIF_QD_LOCKED, &ip->i_flags))) {
628		error = -EIO;
629		gfs2_qa_put(ip);
630		goto out;
631	}
632
633	error = qdsb_get(sdp, make_kqid_uid(ip->i_inode.i_uid), qd);
634	if (error)
635		goto out_unhold;
636	ip->i_qadata->qa_qd_num++;
637	qd++;
638
639	error = qdsb_get(sdp, make_kqid_gid(ip->i_inode.i_gid), qd);
640	if (error)
641		goto out_unhold;
642	ip->i_qadata->qa_qd_num++;
643	qd++;
644
645	if (!uid_eq(uid, NO_UID_QUOTA_CHANGE) &&
646	    !uid_eq(uid, ip->i_inode.i_uid)) {
647		error = qdsb_get(sdp, make_kqid_uid(uid), qd);
648		if (error)
649			goto out_unhold;
650		ip->i_qadata->qa_qd_num++;
651		qd++;
652	}
653
654	if (!gid_eq(gid, NO_GID_QUOTA_CHANGE) &&
655	    !gid_eq(gid, ip->i_inode.i_gid)) {
656		error = qdsb_get(sdp, make_kqid_gid(gid), qd);
657		if (error)
658			goto out_unhold;
659		ip->i_qadata->qa_qd_num++;
660		qd++;
661	}
662
663out_unhold:
664	if (error)
665		gfs2_quota_unhold(ip);
666out:
667	return error;
668}
669
670void gfs2_quota_unhold(struct gfs2_inode *ip)
671{
672	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
673	u32 x;
674
675	if (ip->i_qadata == NULL)
676		return;
677
678	gfs2_assert_warn(sdp, !test_bit(GIF_QD_LOCKED, &ip->i_flags));
679
680	for (x = 0; x < ip->i_qadata->qa_qd_num; x++) {
681		qdsb_put(ip->i_qadata->qa_qd[x]);
682		ip->i_qadata->qa_qd[x] = NULL;
683	}
684	ip->i_qadata->qa_qd_num = 0;
685	gfs2_qa_put(ip);
686}
687
688static int sort_qd(const void *a, const void *b)
689{
690	const struct gfs2_quota_data *qd_a = *(const struct gfs2_quota_data **)a;
691	const struct gfs2_quota_data *qd_b = *(const struct gfs2_quota_data **)b;
692
693	if (qid_lt(qd_a->qd_id, qd_b->qd_id))
694		return -1;
695	if (qid_lt(qd_b->qd_id, qd_a->qd_id))
696		return 1;
697	return 0;
698}
699
700static void do_qc(struct gfs2_quota_data *qd, s64 change, int qc_type)
701{
702	struct gfs2_sbd *sdp = qd->qd_sbd;
703	struct gfs2_inode *ip = GFS2_I(sdp->sd_qc_inode);
704	struct gfs2_quota_change *qc = qd->qd_bh_qc;
705	s64 x;
706
707	mutex_lock(&sdp->sd_quota_mutex);
708	gfs2_trans_add_meta(ip->i_gl, qd->qd_bh);
709
710	if (!test_bit(QDF_CHANGE, &qd->qd_flags)) {
711		qc->qc_change = 0;
712		qc->qc_flags = 0;
713		if (qd->qd_id.type == USRQUOTA)
714			qc->qc_flags = cpu_to_be32(GFS2_QCF_USER);
715		qc->qc_id = cpu_to_be32(from_kqid(&init_user_ns, qd->qd_id));
716	}
717
718	x = be64_to_cpu(qc->qc_change) + change;
719	qc->qc_change = cpu_to_be64(x);
720
721	spin_lock(&qd_lock);
722	qd->qd_change = x;
723	spin_unlock(&qd_lock);
724
725	if (qc_type == QC_CHANGE) {
726		if (!test_and_set_bit(QDF_CHANGE, &qd->qd_flags)) {
727			qd_hold(qd);
728			slot_hold(qd);
729		}
730	} else {
731		gfs2_assert_warn(sdp, test_bit(QDF_CHANGE, &qd->qd_flags));
732		clear_bit(QDF_CHANGE, &qd->qd_flags);
733		qc->qc_flags = 0;
734		qc->qc_id = 0;
735		slot_put(qd);
736		qd_put(qd);
737	}
738
739	if (change < 0) /* Reset quiet flag if we freed some blocks */
740		clear_bit(QDF_QMSG_QUIET, &qd->qd_flags);
741	mutex_unlock(&sdp->sd_quota_mutex);
742}
743
744static int gfs2_write_buf_to_page(struct gfs2_sbd *sdp, unsigned long index,
745				  unsigned off, void *buf, unsigned bytes)
746{
747	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
748	struct inode *inode = &ip->i_inode;
749	struct address_space *mapping = inode->i_mapping;
750	struct page *page;
751	struct buffer_head *bh;
752	u64 blk;
753	unsigned bsize = sdp->sd_sb.sb_bsize, bnum = 0, boff = 0;
754	unsigned to_write = bytes, pg_off = off;
755
756	blk = index << (PAGE_SHIFT - sdp->sd_sb.sb_bsize_shift);
757	boff = off % bsize;
758
759	page = grab_cache_page(mapping, index);
760	if (!page)
761		return -ENOMEM;
762	if (!page_has_buffers(page))
763		create_empty_buffers(page, bsize, 0);
764
765	bh = page_buffers(page);
766	for(;;) {
767		/* Find the beginning block within the page */
768		if (pg_off >= ((bnum * bsize) + bsize)) {
769			bh = bh->b_this_page;
770			bnum++;
771			blk++;
772			continue;
773		}
774		if (!buffer_mapped(bh)) {
775			gfs2_block_map(inode, blk, bh, 1);
776			if (!buffer_mapped(bh))
777				goto unlock_out;
778			/* If it's a newly allocated disk block, zero it */
779			if (buffer_new(bh))
780				zero_user(page, bnum * bsize, bh->b_size);
781		}
782		if (PageUptodate(page))
783			set_buffer_uptodate(bh);
784		if (bh_read(bh, REQ_META | REQ_PRIO) < 0)
785			goto unlock_out;
786		gfs2_trans_add_data(ip->i_gl, bh);
787
788		/* If we need to write to the next block as well */
789		if (to_write > (bsize - boff)) {
790			pg_off += (bsize - boff);
791			to_write -= (bsize - boff);
792			boff = pg_off % bsize;
793			continue;
794		}
795		break;
796	}
797
798	/* Write to the page, now that we have setup the buffer(s) */
799	memcpy_to_page(page, off, buf, bytes);
800	flush_dcache_page(page);
801	unlock_page(page);
802	put_page(page);
803
804	return 0;
805
806unlock_out:
807	unlock_page(page);
808	put_page(page);
809	return -EIO;
810}
811
812static int gfs2_write_disk_quota(struct gfs2_sbd *sdp, struct gfs2_quota *qp,
813				 loff_t loc)
814{
815	unsigned long pg_beg;
816	unsigned pg_off, nbytes, overflow = 0;
817	int error;
818	void *ptr;
819
820	nbytes = sizeof(struct gfs2_quota);
821
822	pg_beg = loc >> PAGE_SHIFT;
823	pg_off = offset_in_page(loc);
824
825	/* If the quota straddles a page boundary, split the write in two */
826	if ((pg_off + nbytes) > PAGE_SIZE)
827		overflow = (pg_off + nbytes) - PAGE_SIZE;
828
829	ptr = qp;
830	error = gfs2_write_buf_to_page(sdp, pg_beg, pg_off, ptr,
831				       nbytes - overflow);
832	/* If there's an overflow, write the remaining bytes to the next page */
833	if (!error && overflow)
834		error = gfs2_write_buf_to_page(sdp, pg_beg + 1, 0,
835					       ptr + nbytes - overflow,
836					       overflow);
837	return error;
838}
839
840/**
841 * gfs2_adjust_quota - adjust record of current block usage
842 * @sdp: The superblock
843 * @loc: Offset of the entry in the quota file
844 * @change: The amount of usage change to record
845 * @qd: The quota data
846 * @fdq: The updated limits to record
847 *
848 * This function was mostly borrowed from gfs2_block_truncate_page which was
849 * in turn mostly borrowed from ext3
850 *
851 * Returns: 0 or -ve on error
852 */
853
854static int gfs2_adjust_quota(struct gfs2_sbd *sdp, loff_t loc,
855			     s64 change, struct gfs2_quota_data *qd,
856			     struct qc_dqblk *fdq)
857{
858	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
859	struct inode *inode = &ip->i_inode;
860	struct gfs2_quota q;
861	int err;
862	u64 size;
863
864	if (gfs2_is_stuffed(ip)) {
865		err = gfs2_unstuff_dinode(ip);
866		if (err)
867			return err;
868	}
869
870	memset(&q, 0, sizeof(struct gfs2_quota));
871	err = gfs2_internal_read(ip, (char *)&q, &loc, sizeof(q));
872	if (err < 0)
873		return err;
874
875	loc -= sizeof(q); /* gfs2_internal_read would've advanced the loc ptr */
876	be64_add_cpu(&q.qu_value, change);
877	if (((s64)be64_to_cpu(q.qu_value)) < 0)
878		q.qu_value = 0; /* Never go negative on quota usage */
879	qd->qd_qb.qb_value = q.qu_value;
880	if (fdq) {
881		if (fdq->d_fieldmask & QC_SPC_SOFT) {
882			q.qu_warn = cpu_to_be64(fdq->d_spc_softlimit >> sdp->sd_sb.sb_bsize_shift);
883			qd->qd_qb.qb_warn = q.qu_warn;
884		}
885		if (fdq->d_fieldmask & QC_SPC_HARD) {
886			q.qu_limit = cpu_to_be64(fdq->d_spc_hardlimit >> sdp->sd_sb.sb_bsize_shift);
887			qd->qd_qb.qb_limit = q.qu_limit;
888		}
889		if (fdq->d_fieldmask & QC_SPACE) {
890			q.qu_value = cpu_to_be64(fdq->d_space >> sdp->sd_sb.sb_bsize_shift);
891			qd->qd_qb.qb_value = q.qu_value;
892		}
893	}
894
895	err = gfs2_write_disk_quota(sdp, &q, loc);
896	if (!err) {
897		size = loc + sizeof(struct gfs2_quota);
898		if (size > inode->i_size)
899			i_size_write(inode, size);
900		inode->i_mtime = inode_set_ctime_current(inode);
901		mark_inode_dirty(inode);
902		set_bit(QDF_REFRESH, &qd->qd_flags);
903	}
904
905	return err;
906}
907
908static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
909{
910	struct gfs2_sbd *sdp = (*qda)->qd_sbd;
911	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
912	struct gfs2_alloc_parms ap = { .aflags = 0, };
913	unsigned int data_blocks, ind_blocks;
914	struct gfs2_holder *ghs, i_gh;
915	unsigned int qx, x;
916	struct gfs2_quota_data *qd;
917	unsigned reserved;
918	loff_t offset;
919	unsigned int nalloc = 0, blocks;
920	int error;
921
922	gfs2_write_calc_reserv(ip, sizeof(struct gfs2_quota),
923			      &data_blocks, &ind_blocks);
924
925	ghs = kmalloc_array(num_qd, sizeof(struct gfs2_holder), GFP_NOFS);
926	if (!ghs)
927		return -ENOMEM;
928
929	sort(qda, num_qd, sizeof(struct gfs2_quota_data *), sort_qd, NULL);
930	inode_lock(&ip->i_inode);
931	for (qx = 0; qx < num_qd; qx++) {
932		error = gfs2_glock_nq_init(qda[qx]->qd_gl, LM_ST_EXCLUSIVE,
933					   GL_NOCACHE, &ghs[qx]);
934		if (error)
935			goto out_dq;
936	}
937
938	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
939	if (error)
940		goto out_dq;
941
942	for (x = 0; x < num_qd; x++) {
943		offset = qd2offset(qda[x]);
944		if (gfs2_write_alloc_required(ip, offset,
945					      sizeof(struct gfs2_quota)))
946			nalloc++;
947	}
948
949	/*
950	 * 1 blk for unstuffing inode if stuffed. We add this extra
951	 * block to the reservation unconditionally. If the inode
952	 * doesn't need unstuffing, the block will be released to the
953	 * rgrp since it won't be allocated during the transaction
954	 */
955	/* +3 in the end for unstuffing block, inode size update block
956	 * and another block in case quota straddles page boundary and
957	 * two blocks need to be updated instead of 1 */
958	blocks = num_qd * data_blocks + RES_DINODE + num_qd + 3;
959
960	reserved = 1 + (nalloc * (data_blocks + ind_blocks));
961	ap.target = reserved;
962	error = gfs2_inplace_reserve(ip, &ap);
963	if (error)
964		goto out_alloc;
965
966	if (nalloc)
967		blocks += gfs2_rg_blocks(ip, reserved) + nalloc * ind_blocks + RES_STATFS;
968
969	error = gfs2_trans_begin(sdp, blocks, 0);
970	if (error)
971		goto out_ipres;
972
973	for (x = 0; x < num_qd; x++) {
974		qd = qda[x];
975		offset = qd2offset(qd);
976		error = gfs2_adjust_quota(sdp, offset, qd->qd_change_sync, qd,
977							NULL);
978		if (error)
979			goto out_end_trans;
980
981		do_qc(qd, -qd->qd_change_sync, QC_SYNC);
982		set_bit(QDF_REFRESH, &qd->qd_flags);
983	}
984
985out_end_trans:
986	gfs2_trans_end(sdp);
987out_ipres:
988	gfs2_inplace_release(ip);
989out_alloc:
990	gfs2_glock_dq_uninit(&i_gh);
991out_dq:
992	while (qx--)
993		gfs2_glock_dq_uninit(&ghs[qx]);
994	inode_unlock(&ip->i_inode);
995	kfree(ghs);
996	gfs2_log_flush(ip->i_gl->gl_name.ln_sbd, ip->i_gl,
997		       GFS2_LOG_HEAD_FLUSH_NORMAL | GFS2_LFC_DO_SYNC);
998	if (!error) {
999		for (x = 0; x < num_qd; x++)
1000			qda[x]->qd_sync_gen = sdp->sd_quota_sync_gen;
1001	}
1002	return error;
1003}
1004
1005static int update_qd(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd)
1006{
1007	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
1008	struct gfs2_quota q;
1009	struct gfs2_quota_lvb *qlvb;
1010	loff_t pos;
1011	int error;
1012
1013	memset(&q, 0, sizeof(struct gfs2_quota));
1014	pos = qd2offset(qd);
1015	error = gfs2_internal_read(ip, (char *)&q, &pos, sizeof(q));
1016	if (error < 0)
1017		return error;
1018
1019	qlvb = (struct gfs2_quota_lvb *)qd->qd_gl->gl_lksb.sb_lvbptr;
1020	qlvb->qb_magic = cpu_to_be32(GFS2_MAGIC);
1021	qlvb->__pad = 0;
1022	qlvb->qb_limit = q.qu_limit;
1023	qlvb->qb_warn = q.qu_warn;
1024	qlvb->qb_value = q.qu_value;
1025	qd->qd_qb = *qlvb;
1026
1027	return 0;
1028}
1029
1030static int do_glock(struct gfs2_quota_data *qd, int force_refresh,
1031		    struct gfs2_holder *q_gh)
1032{
1033	struct gfs2_sbd *sdp = qd->qd_sbd;
1034	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
1035	struct gfs2_holder i_gh;
1036	int error;
1037
1038	gfs2_assert_warn(sdp, sdp == qd->qd_gl->gl_name.ln_sbd);
1039restart:
1040	error = gfs2_glock_nq_init(qd->qd_gl, LM_ST_SHARED, 0, q_gh);
1041	if (error)
1042		return error;
1043
1044	if (test_and_clear_bit(QDF_REFRESH, &qd->qd_flags))
1045		force_refresh = FORCE;
1046
1047	qd->qd_qb = *(struct gfs2_quota_lvb *)qd->qd_gl->gl_lksb.sb_lvbptr;
1048
1049	if (force_refresh || qd->qd_qb.qb_magic != cpu_to_be32(GFS2_MAGIC)) {
1050		gfs2_glock_dq_uninit(q_gh);
1051		error = gfs2_glock_nq_init(qd->qd_gl, LM_ST_EXCLUSIVE,
1052					   GL_NOCACHE, q_gh);
1053		if (error)
1054			return error;
1055
1056		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
1057		if (error)
1058			goto fail;
1059
1060		error = update_qd(sdp, qd);
1061		if (error)
1062			goto fail_gunlock;
1063
1064		gfs2_glock_dq_uninit(&i_gh);
1065		gfs2_glock_dq_uninit(q_gh);
1066		force_refresh = 0;
1067		goto restart;
1068	}
1069
1070	return 0;
1071
1072fail_gunlock:
1073	gfs2_glock_dq_uninit(&i_gh);
1074fail:
1075	gfs2_glock_dq_uninit(q_gh);
1076	return error;
1077}
1078
1079int gfs2_quota_lock(struct gfs2_inode *ip, kuid_t uid, kgid_t gid)
1080{
1081	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1082	struct gfs2_quota_data *qd;
1083	u32 x;
1084	int error;
1085
1086	if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON &&
1087	    sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET)
1088		return 0;
1089
1090	error = gfs2_quota_hold(ip, uid, gid);
1091	if (error)
1092		return error;
1093
1094	sort(ip->i_qadata->qa_qd, ip->i_qadata->qa_qd_num,
1095	     sizeof(struct gfs2_quota_data *), sort_qd, NULL);
1096
1097	for (x = 0; x < ip->i_qadata->qa_qd_num; x++) {
1098		qd = ip->i_qadata->qa_qd[x];
1099		error = do_glock(qd, NO_FORCE, &ip->i_qadata->qa_qd_ghs[x]);
1100		if (error)
1101			break;
1102	}
1103
1104	if (!error)
1105		set_bit(GIF_QD_LOCKED, &ip->i_flags);
1106	else {
1107		while (x--)
1108			gfs2_glock_dq_uninit(&ip->i_qadata->qa_qd_ghs[x]);
1109		gfs2_quota_unhold(ip);
1110	}
1111
1112	return error;
1113}
1114
1115static bool need_sync(struct gfs2_quota_data *qd)
1116{
1117	struct gfs2_sbd *sdp = qd->qd_sbd;
1118	struct gfs2_tune *gt = &sdp->sd_tune;
1119	s64 value;
1120	unsigned int num, den;
1121
1122	if (!qd->qd_qb.qb_limit)
1123		return false;
1124
1125	spin_lock(&qd_lock);
1126	value = qd->qd_change;
1127	spin_unlock(&qd_lock);
1128
1129	spin_lock(&gt->gt_spin);
1130	num = gt->gt_quota_scale_num;
1131	den = gt->gt_quota_scale_den;
1132	spin_unlock(&gt->gt_spin);
1133
1134	if (value <= 0)
1135		return false;
1136	else if ((s64)be64_to_cpu(qd->qd_qb.qb_value) >=
1137		 (s64)be64_to_cpu(qd->qd_qb.qb_limit))
1138		return false;
1139	else {
1140		value *= gfs2_jindex_size(sdp) * num;
1141		value = div_s64(value, den);
1142		value += (s64)be64_to_cpu(qd->qd_qb.qb_value);
1143		if (value < (s64)be64_to_cpu(qd->qd_qb.qb_limit))
1144			return false;
1145	}
1146
1147	return true;
1148}
1149
1150void gfs2_quota_unlock(struct gfs2_inode *ip)
1151{
1152	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1153	struct gfs2_quota_data *qda[2 * GFS2_MAXQUOTAS];
1154	unsigned int count = 0;
1155	u32 x;
1156	int found;
1157
1158	if (!test_and_clear_bit(GIF_QD_LOCKED, &ip->i_flags))
1159		return;
1160
1161	for (x = 0; x < ip->i_qadata->qa_qd_num; x++) {
1162		struct gfs2_quota_data *qd;
1163		bool sync;
1164
1165		qd = ip->i_qadata->qa_qd[x];
1166		sync = need_sync(qd);
1167
1168		gfs2_glock_dq_uninit(&ip->i_qadata->qa_qd_ghs[x]);
1169		if (!sync)
1170			continue;
1171
1172		spin_lock(&qd_lock);
1173		found = qd_check_sync(sdp, qd, NULL);
1174		spin_unlock(&qd_lock);
1175
1176		if (!found)
1177			continue;
1178
1179		if (!qd_bh_get_or_undo(sdp, qd))
1180			qda[count++] = qd;
1181	}
1182
1183	if (count) {
1184		do_sync(count, qda);
1185		for (x = 0; x < count; x++)
1186			qd_unlock(qda[x]);
1187	}
1188
1189	gfs2_quota_unhold(ip);
1190}
1191
1192#define MAX_LINE 256
1193
1194static int print_message(struct gfs2_quota_data *qd, char *type)
1195{
1196	struct gfs2_sbd *sdp = qd->qd_sbd;
1197
1198	if (sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET)
1199		fs_info(sdp, "quota %s for %s %u\n",
1200			type,
1201			(qd->qd_id.type == USRQUOTA) ? "user" : "group",
1202			from_kqid(&init_user_ns, qd->qd_id));
1203
1204	return 0;
1205}
1206
1207/**
1208 * gfs2_quota_check - check if allocating new blocks will exceed quota
1209 * @ip:  The inode for which this check is being performed
1210 * @uid: The uid to check against
1211 * @gid: The gid to check against
1212 * @ap:  The allocation parameters. ap->target contains the requested
1213 *       blocks. ap->min_target, if set, contains the minimum blks
1214 *       requested.
1215 *
1216 * Returns: 0 on success.
1217 *                  min_req = ap->min_target ? ap->min_target : ap->target;
1218 *                  quota must allow at least min_req blks for success and
1219 *                  ap->allowed is set to the number of blocks allowed
1220 *
1221 *          -EDQUOT otherwise, quota violation. ap->allowed is set to number
1222 *                  of blocks available.
1223 */
1224int gfs2_quota_check(struct gfs2_inode *ip, kuid_t uid, kgid_t gid,
1225		     struct gfs2_alloc_parms *ap)
1226{
1227	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1228	struct gfs2_quota_data *qd;
1229	s64 value, warn, limit;
1230	u32 x;
1231	int error = 0;
1232
1233	ap->allowed = UINT_MAX; /* Assume we are permitted a whole lot */
1234	if (!test_bit(GIF_QD_LOCKED, &ip->i_flags))
1235		return 0;
1236
1237	for (x = 0; x < ip->i_qadata->qa_qd_num; x++) {
1238		qd = ip->i_qadata->qa_qd[x];
1239
1240		if (!(qid_eq(qd->qd_id, make_kqid_uid(uid)) ||
1241		      qid_eq(qd->qd_id, make_kqid_gid(gid))))
1242			continue;
1243
1244		warn = (s64)be64_to_cpu(qd->qd_qb.qb_warn);
1245		limit = (s64)be64_to_cpu(qd->qd_qb.qb_limit);
1246		value = (s64)be64_to_cpu(qd->qd_qb.qb_value);
1247		spin_lock(&qd_lock);
1248		value += qd->qd_change;
1249		spin_unlock(&qd_lock);
1250
1251		if (limit > 0 && (limit - value) < ap->allowed)
1252			ap->allowed = limit - value;
1253		/* If we can't meet the target */
1254		if (limit && limit < (value + (s64)ap->target)) {
1255			/* If no min_target specified or we don't meet
1256			 * min_target, return -EDQUOT */
1257			if (!ap->min_target || ap->min_target > ap->allowed) {
1258				if (!test_and_set_bit(QDF_QMSG_QUIET,
1259						      &qd->qd_flags)) {
1260					print_message(qd, "exceeded");
1261					quota_send_warning(qd->qd_id,
1262							   sdp->sd_vfs->s_dev,
1263							   QUOTA_NL_BHARDWARN);
1264				}
1265				error = -EDQUOT;
1266				break;
1267			}
1268		} else if (warn && warn < value &&
1269			   time_after_eq(jiffies, qd->qd_last_warn +
1270					 gfs2_tune_get(sdp, gt_quota_warn_period)
1271					 * HZ)) {
1272			quota_send_warning(qd->qd_id,
1273					   sdp->sd_vfs->s_dev, QUOTA_NL_BSOFTWARN);
1274			error = print_message(qd, "warning");
1275			qd->qd_last_warn = jiffies;
1276		}
1277	}
1278	return error;
1279}
1280
1281void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
1282		       kuid_t uid, kgid_t gid)
1283{
1284	struct gfs2_quota_data *qd;
1285	u32 x;
1286	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1287
1288	if ((sdp->sd_args.ar_quota != GFS2_QUOTA_ON &&
1289	    sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET) ||
1290	    gfs2_assert_warn(sdp, change))
1291		return;
1292	if (ip->i_diskflags & GFS2_DIF_SYSTEM)
1293		return;
1294
1295	if (gfs2_assert_withdraw(sdp, ip->i_qadata &&
1296				 ip->i_qadata->qa_ref > 0))
1297		return;
1298	for (x = 0; x < ip->i_qadata->qa_qd_num; x++) {
1299		qd = ip->i_qadata->qa_qd[x];
1300
1301		if (qid_eq(qd->qd_id, make_kqid_uid(uid)) ||
1302		    qid_eq(qd->qd_id, make_kqid_gid(gid))) {
1303			do_qc(qd, change, QC_CHANGE);
1304		}
1305	}
1306}
1307
1308static bool qd_changed(struct gfs2_sbd *sdp)
1309{
1310	struct gfs2_quota_data *qd;
1311	bool changed = false;
1312
1313	spin_lock(&qd_lock);
1314	list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
1315		if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
1316		    !test_bit(QDF_CHANGE, &qd->qd_flags))
1317			continue;
1318
1319		changed = true;
1320		break;
1321	}
1322	spin_unlock(&qd_lock);
1323	return changed;
1324}
1325
1326int gfs2_quota_sync(struct super_block *sb, int type)
1327{
1328	struct gfs2_sbd *sdp = sb->s_fs_info;
1329	struct gfs2_quota_data **qda;
1330	unsigned int max_qd = PAGE_SIZE / sizeof(struct gfs2_holder);
1331	unsigned int num_qd;
1332	unsigned int x;
1333	int error = 0;
1334
1335	if (!qd_changed(sdp))
1336		return 0;
1337
1338	qda = kcalloc(max_qd, sizeof(struct gfs2_quota_data *), GFP_KERNEL);
1339	if (!qda)
1340		return -ENOMEM;
1341
1342	mutex_lock(&sdp->sd_quota_sync_mutex);
1343	sdp->sd_quota_sync_gen++;
1344
1345	do {
1346		num_qd = 0;
1347
1348		for (;;) {
1349			error = qd_fish(sdp, qda + num_qd);
1350			if (error || !qda[num_qd])
1351				break;
1352			if (++num_qd == max_qd)
1353				break;
1354		}
1355
1356		if (num_qd) {
1357			if (!error)
1358				error = do_sync(num_qd, qda);
1359
1360			for (x = 0; x < num_qd; x++)
1361				qd_unlock(qda[x]);
1362		}
1363	} while (!error && num_qd == max_qd);
1364
1365	mutex_unlock(&sdp->sd_quota_sync_mutex);
1366	kfree(qda);
1367
1368	return error;
1369}
1370
1371int gfs2_quota_refresh(struct gfs2_sbd *sdp, struct kqid qid)
1372{
1373	struct gfs2_quota_data *qd;
1374	struct gfs2_holder q_gh;
1375	int error;
1376
1377	error = qd_get(sdp, qid, &qd);
1378	if (error)
1379		return error;
1380
1381	error = do_glock(qd, FORCE, &q_gh);
1382	if (!error)
1383		gfs2_glock_dq_uninit(&q_gh);
1384
1385	qd_put(qd);
1386	return error;
1387}
1388
1389int gfs2_quota_init(struct gfs2_sbd *sdp)
1390{
1391	struct gfs2_inode *ip = GFS2_I(sdp->sd_qc_inode);
1392	u64 size = i_size_read(sdp->sd_qc_inode);
1393	unsigned int blocks = size >> sdp->sd_sb.sb_bsize_shift;
1394	unsigned int x, slot = 0;
1395	unsigned int found = 0;
1396	unsigned int hash;
1397	unsigned int bm_size;
1398	u64 dblock;
1399	u32 extlen = 0;
1400	int error;
1401
1402	if (gfs2_check_internal_file_size(sdp->sd_qc_inode, 1, 64 << 20))
1403		return -EIO;
1404
1405	sdp->sd_quota_slots = blocks * sdp->sd_qc_per_block;
1406	bm_size = DIV_ROUND_UP(sdp->sd_quota_slots, 8 * sizeof(unsigned long));
1407	bm_size *= sizeof(unsigned long);
1408	error = -ENOMEM;
1409	sdp->sd_quota_bitmap = kzalloc(bm_size, GFP_NOFS | __GFP_NOWARN);
1410	if (sdp->sd_quota_bitmap == NULL)
1411		sdp->sd_quota_bitmap = __vmalloc(bm_size, GFP_NOFS |
1412						 __GFP_ZERO);
1413	if (!sdp->sd_quota_bitmap)
1414		return error;
1415
1416	for (x = 0; x < blocks; x++) {
1417		struct buffer_head *bh;
1418		const struct gfs2_quota_change *qc;
1419		unsigned int y;
1420
1421		if (!extlen) {
1422			extlen = 32;
1423			error = gfs2_get_extent(&ip->i_inode, x, &dblock, &extlen);
1424			if (error)
1425				goto fail;
1426		}
1427		error = -EIO;
1428		bh = gfs2_meta_ra(ip->i_gl, dblock, extlen);
1429		if (!bh)
1430			goto fail;
1431		if (gfs2_metatype_check(sdp, bh, GFS2_METATYPE_QC)) {
1432			brelse(bh);
1433			goto fail;
1434		}
1435
1436		qc = (const struct gfs2_quota_change *)(bh->b_data + sizeof(struct gfs2_meta_header));
1437		for (y = 0; y < sdp->sd_qc_per_block && slot < sdp->sd_quota_slots;
1438		     y++, slot++) {
1439			struct gfs2_quota_data *qd;
1440			s64 qc_change = be64_to_cpu(qc->qc_change);
1441			u32 qc_flags = be32_to_cpu(qc->qc_flags);
1442			enum quota_type qtype = (qc_flags & GFS2_QCF_USER) ?
1443						USRQUOTA : GRPQUOTA;
1444			struct kqid qc_id = make_kqid(&init_user_ns, qtype,
1445						      be32_to_cpu(qc->qc_id));
1446			qc++;
1447			if (!qc_change)
1448				continue;
1449
1450			hash = gfs2_qd_hash(sdp, qc_id);
1451			qd = qd_alloc(hash, sdp, qc_id);
1452			if (qd == NULL) {
1453				brelse(bh);
1454				goto fail;
1455			}
1456
1457			set_bit(QDF_CHANGE, &qd->qd_flags);
1458			qd->qd_change = qc_change;
1459			qd->qd_slot = slot;
1460			qd->qd_slot_ref = 1;
1461
1462			spin_lock(&qd_lock);
1463			BUG_ON(test_and_set_bit(slot, sdp->sd_quota_bitmap));
1464			list_add(&qd->qd_list, &sdp->sd_quota_list);
1465			atomic_inc(&sdp->sd_quota_count);
1466			spin_unlock(&qd_lock);
1467
1468			spin_lock_bucket(hash);
1469			hlist_bl_add_head_rcu(&qd->qd_hlist, &qd_hash_table[hash]);
1470			spin_unlock_bucket(hash);
1471
1472			found++;
1473		}
1474
1475		brelse(bh);
1476		dblock++;
1477		extlen--;
1478	}
1479
1480	if (found)
1481		fs_info(sdp, "found %u quota changes\n", found);
1482
1483	return 0;
1484
1485fail:
1486	gfs2_quota_cleanup(sdp);
1487	return error;
1488}
1489
1490void gfs2_quota_cleanup(struct gfs2_sbd *sdp)
1491{
1492	struct gfs2_quota_data *qd;
1493	LIST_HEAD(dispose);
1494	int count;
1495
1496	BUG_ON(!test_bit(SDF_NORECOVERY, &sdp->sd_flags) &&
1497		test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags));
1498
1499	spin_lock(&qd_lock);
1500	list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
1501		spin_lock(&qd->qd_lockref.lock);
1502		if (qd->qd_lockref.count != 0) {
1503			spin_unlock(&qd->qd_lockref.lock);
1504			continue;
1505		}
1506		lockref_mark_dead(&qd->qd_lockref);
1507		spin_unlock(&qd->qd_lockref.lock);
1508
1509		list_lru_del(&gfs2_qd_lru, &qd->qd_lru);
1510		list_add(&qd->qd_lru, &dispose);
1511	}
1512	spin_unlock(&qd_lock);
1513
1514	gfs2_qd_list_dispose(&dispose);
1515
1516	wait_event_timeout(sdp->sd_kill_wait,
1517		(count = atomic_read(&sdp->sd_quota_count)) == 0,
1518		HZ * 60);
1519
1520	if (count != 0)
1521		fs_err(sdp, "%d left-over quota data objects\n", count);
1522
1523	kvfree(sdp->sd_quota_bitmap);
1524	sdp->sd_quota_bitmap = NULL;
1525}
1526
1527static void quotad_error(struct gfs2_sbd *sdp, const char *msg, int error)
1528{
1529	if (error == 0 || error == -EROFS)
1530		return;
1531	if (!gfs2_withdrawn(sdp)) {
1532		if (!cmpxchg(&sdp->sd_log_error, 0, error))
1533			fs_err(sdp, "gfs2_quotad: %s error %d\n", msg, error);
1534		wake_up(&sdp->sd_logd_waitq);
1535	}
1536}
1537
1538static void quotad_check_timeo(struct gfs2_sbd *sdp, const char *msg,
1539			       int (*fxn)(struct super_block *sb, int type),
1540			       unsigned long t, unsigned long *timeo,
1541			       unsigned int *new_timeo)
1542{
1543	if (t >= *timeo) {
1544		int error = fxn(sdp->sd_vfs, 0);
1545		quotad_error(sdp, msg, error);
1546		*timeo = gfs2_tune_get_i(&sdp->sd_tune, new_timeo) * HZ;
1547	} else {
1548		*timeo -= t;
1549	}
1550}
1551
1552void gfs2_wake_up_statfs(struct gfs2_sbd *sdp) {
1553	if (!sdp->sd_statfs_force_sync) {
1554		sdp->sd_statfs_force_sync = 1;
1555		wake_up(&sdp->sd_quota_wait);
1556	}
1557}
1558
1559
1560/**
1561 * gfs2_quotad - Write cached quota changes into the quota file
1562 * @data: Pointer to GFS2 superblock
1563 *
1564 */
1565
1566int gfs2_quotad(void *data)
1567{
1568	struct gfs2_sbd *sdp = data;
1569	struct gfs2_tune *tune = &sdp->sd_tune;
1570	unsigned long statfs_timeo = 0;
1571	unsigned long quotad_timeo = 0;
1572	unsigned long t = 0;
1573
1574	while (!kthread_should_stop()) {
1575		if (gfs2_withdrawn(sdp))
1576			break;
1577
1578		/* Update the master statfs file */
1579		if (sdp->sd_statfs_force_sync) {
1580			int error = gfs2_statfs_sync(sdp->sd_vfs, 0);
1581			quotad_error(sdp, "statfs", error);
1582			statfs_timeo = gfs2_tune_get(sdp, gt_statfs_quantum) * HZ;
1583		}
1584		else
1585			quotad_check_timeo(sdp, "statfs", gfs2_statfs_sync, t,
1586				   	   &statfs_timeo,
1587					   &tune->gt_statfs_quantum);
1588
1589		/* Update quota file */
1590		quotad_check_timeo(sdp, "sync", gfs2_quota_sync, t,
1591				   &quotad_timeo, &tune->gt_quota_quantum);
1592
1593		try_to_freeze();
1594
1595		t = min(quotad_timeo, statfs_timeo);
1596
1597		t = wait_event_interruptible_timeout(sdp->sd_quota_wait,
1598				sdp->sd_statfs_force_sync ||
1599				gfs2_withdrawn(sdp) ||
1600				kthread_should_stop(),
1601				t);
1602
1603		if (sdp->sd_statfs_force_sync)
1604			t = 0;
1605	}
1606
1607	return 0;
1608}
1609
1610static int gfs2_quota_get_state(struct super_block *sb, struct qc_state *state)
1611{
1612	struct gfs2_sbd *sdp = sb->s_fs_info;
1613
1614	memset(state, 0, sizeof(*state));
1615
1616	switch (sdp->sd_args.ar_quota) {
1617	case GFS2_QUOTA_QUIET:
1618		fallthrough;
1619	case GFS2_QUOTA_ON:
1620		state->s_state[USRQUOTA].flags |= QCI_LIMITS_ENFORCED;
1621		state->s_state[GRPQUOTA].flags |= QCI_LIMITS_ENFORCED;
1622		fallthrough;
1623	case GFS2_QUOTA_ACCOUNT:
1624		state->s_state[USRQUOTA].flags |= QCI_ACCT_ENABLED |
1625						  QCI_SYSFILE;
1626		state->s_state[GRPQUOTA].flags |= QCI_ACCT_ENABLED |
1627						  QCI_SYSFILE;
1628		break;
1629	case GFS2_QUOTA_OFF:
1630		break;
1631	}
1632	if (sdp->sd_quota_inode) {
1633		state->s_state[USRQUOTA].ino =
1634					GFS2_I(sdp->sd_quota_inode)->i_no_addr;
1635		state->s_state[USRQUOTA].blocks = sdp->sd_quota_inode->i_blocks;
1636	}
1637	state->s_state[USRQUOTA].nextents = 1;	/* unsupported */
1638	state->s_state[GRPQUOTA] = state->s_state[USRQUOTA];
1639	state->s_incoredqs = list_lru_count(&gfs2_qd_lru);
1640	return 0;
1641}
1642
1643static int gfs2_get_dqblk(struct super_block *sb, struct kqid qid,
1644			  struct qc_dqblk *fdq)
1645{
1646	struct gfs2_sbd *sdp = sb->s_fs_info;
1647	struct gfs2_quota_lvb *qlvb;
1648	struct gfs2_quota_data *qd;
1649	struct gfs2_holder q_gh;
1650	int error;
1651
1652	memset(fdq, 0, sizeof(*fdq));
1653
1654	if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
1655		return -ESRCH; /* Crazy XFS error code */
1656
1657	if ((qid.type != USRQUOTA) &&
1658	    (qid.type != GRPQUOTA))
1659		return -EINVAL;
1660
1661	error = qd_get(sdp, qid, &qd);
1662	if (error)
1663		return error;
1664	error = do_glock(qd, FORCE, &q_gh);
1665	if (error)
1666		goto out;
1667
1668	qlvb = (struct gfs2_quota_lvb *)qd->qd_gl->gl_lksb.sb_lvbptr;
1669	fdq->d_spc_hardlimit = be64_to_cpu(qlvb->qb_limit) << sdp->sd_sb.sb_bsize_shift;
1670	fdq->d_spc_softlimit = be64_to_cpu(qlvb->qb_warn) << sdp->sd_sb.sb_bsize_shift;
1671	fdq->d_space = be64_to_cpu(qlvb->qb_value) << sdp->sd_sb.sb_bsize_shift;
1672
1673	gfs2_glock_dq_uninit(&q_gh);
1674out:
1675	qd_put(qd);
1676	return error;
1677}
1678
1679/* GFS2 only supports a subset of the XFS fields */
1680#define GFS2_FIELDMASK (QC_SPC_SOFT|QC_SPC_HARD|QC_SPACE)
1681
1682static int gfs2_set_dqblk(struct super_block *sb, struct kqid qid,
1683			  struct qc_dqblk *fdq)
1684{
1685	struct gfs2_sbd *sdp = sb->s_fs_info;
1686	struct gfs2_inode *ip = GFS2_I(sdp->sd_quota_inode);
1687	struct gfs2_quota_data *qd;
1688	struct gfs2_holder q_gh, i_gh;
1689	unsigned int data_blocks, ind_blocks;
1690	unsigned int blocks = 0;
1691	int alloc_required;
1692	loff_t offset;
1693	int error;
1694
1695	if (sdp->sd_args.ar_quota == GFS2_QUOTA_OFF)
1696		return -ESRCH; /* Crazy XFS error code */
1697
1698	if ((qid.type != USRQUOTA) &&
1699	    (qid.type != GRPQUOTA))
1700		return -EINVAL;
1701
1702	if (fdq->d_fieldmask & ~GFS2_FIELDMASK)
1703		return -EINVAL;
1704
1705	error = qd_get(sdp, qid, &qd);
1706	if (error)
1707		return error;
1708
1709	error = gfs2_qa_get(ip);
1710	if (error)
1711		goto out_put;
1712
1713	inode_lock(&ip->i_inode);
1714	error = gfs2_glock_nq_init(qd->qd_gl, LM_ST_EXCLUSIVE, 0, &q_gh);
1715	if (error)
1716		goto out_unlockput;
1717	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
1718	if (error)
1719		goto out_q;
1720
1721	/* Check for existing entry, if none then alloc new blocks */
1722	error = update_qd(sdp, qd);
1723	if (error)
1724		goto out_i;
1725
1726	/* If nothing has changed, this is a no-op */
1727	if ((fdq->d_fieldmask & QC_SPC_SOFT) &&
1728	    ((fdq->d_spc_softlimit >> sdp->sd_sb.sb_bsize_shift) == be64_to_cpu(qd->qd_qb.qb_warn)))
1729		fdq->d_fieldmask ^= QC_SPC_SOFT;
1730
1731	if ((fdq->d_fieldmask & QC_SPC_HARD) &&
1732	    ((fdq->d_spc_hardlimit >> sdp->sd_sb.sb_bsize_shift) == be64_to_cpu(qd->qd_qb.qb_limit)))
1733		fdq->d_fieldmask ^= QC_SPC_HARD;
1734
1735	if ((fdq->d_fieldmask & QC_SPACE) &&
1736	    ((fdq->d_space >> sdp->sd_sb.sb_bsize_shift) == be64_to_cpu(qd->qd_qb.qb_value)))
1737		fdq->d_fieldmask ^= QC_SPACE;
1738
1739	if (fdq->d_fieldmask == 0)
1740		goto out_i;
1741
1742	offset = qd2offset(qd);
1743	alloc_required = gfs2_write_alloc_required(ip, offset, sizeof(struct gfs2_quota));
1744	if (gfs2_is_stuffed(ip))
1745		alloc_required = 1;
1746	if (alloc_required) {
1747		struct gfs2_alloc_parms ap = { .aflags = 0, };
1748		gfs2_write_calc_reserv(ip, sizeof(struct gfs2_quota),
1749				       &data_blocks, &ind_blocks);
1750		blocks = 1 + data_blocks + ind_blocks;
1751		ap.target = blocks;
1752		error = gfs2_inplace_reserve(ip, &ap);
1753		if (error)
1754			goto out_i;
1755		blocks += gfs2_rg_blocks(ip, blocks);
1756	}
1757
1758	/* Some quotas span block boundaries and can update two blocks,
1759	   adding an extra block to the transaction to handle such quotas */
1760	error = gfs2_trans_begin(sdp, blocks + RES_DINODE + 2, 0);
1761	if (error)
1762		goto out_release;
1763
1764	/* Apply changes */
1765	error = gfs2_adjust_quota(sdp, offset, 0, qd, fdq);
1766	if (!error)
1767		clear_bit(QDF_QMSG_QUIET, &qd->qd_flags);
1768
1769	gfs2_trans_end(sdp);
1770out_release:
1771	if (alloc_required)
1772		gfs2_inplace_release(ip);
1773out_i:
1774	gfs2_glock_dq_uninit(&i_gh);
1775out_q:
1776	gfs2_glock_dq_uninit(&q_gh);
1777out_unlockput:
1778	gfs2_qa_put(ip);
1779	inode_unlock(&ip->i_inode);
1780out_put:
1781	qd_put(qd);
1782	return error;
1783}
1784
1785const struct quotactl_ops gfs2_quotactl_ops = {
1786	.quota_sync     = gfs2_quota_sync,
1787	.get_state	= gfs2_quota_get_state,
1788	.get_dqblk	= gfs2_get_dqblk,
1789	.set_dqblk	= gfs2_set_dqblk,
1790};
1791
1792void __init gfs2_quota_hash_init(void)
1793{
1794	unsigned i;
1795
1796	for(i = 0; i < GFS2_QD_HASH_SIZE; i++)
1797		INIT_HLIST_BL_HEAD(&qd_hash_table[i]);
1798}
1799