Linux Audio

Check our new training course

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