1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (c) 2000-2003 Silicon Graphics, Inc. 4 * All Rights Reserved. 5 */ 6#include "xfs.h" 7#include "xfs_fs.h" 8#include "xfs_format.h" 9#include "xfs_log_format.h" 10#include "xfs_shared.h" 11#include "xfs_trans_resv.h" 12#include "xfs_bit.h" 13#include "xfs_mount.h" 14#include "xfs_defer.h" 15#include "xfs_inode.h" 16#include "xfs_bmap.h" 17#include "xfs_quota.h" 18#include "xfs_trans.h" 19#include "xfs_buf_item.h" 20#include "xfs_trans_space.h" 21#include "xfs_trans_priv.h" 22#include "xfs_qm.h" 23#include "xfs_trace.h" 24#include "xfs_log.h" 25#include "xfs_bmap_btree.h" 26#include "xfs_error.h" 27 28/* 29 * Lock order: 30 * 31 * ip->i_lock 32 * qi->qi_tree_lock 33 * dquot->q_qlock (xfs_dqlock() and friends) 34 * dquot->q_flush (xfs_dqflock() and friends) 35 * qi->qi_lru_lock 36 * 37 * If two dquots need to be locked the order is user before group/project, 38 * otherwise by the lowest id first, see xfs_dqlock2. 39 */ 40 41struct kmem_zone *xfs_qm_dqtrxzone; 42static struct kmem_zone *xfs_qm_dqzone; 43 44static struct lock_class_key xfs_dquot_group_class; 45static struct lock_class_key xfs_dquot_project_class; 46 47/* 48 * This is called to free all the memory associated with a dquot 49 */ 50void 51xfs_qm_dqdestroy( 52 struct xfs_dquot *dqp) 53{ 54 ASSERT(list_empty(&dqp->q_lru)); 55 56 kmem_free(dqp->q_logitem.qli_item.li_lv_shadow); 57 mutex_destroy(&dqp->q_qlock); 58 59 XFS_STATS_DEC(dqp->q_mount, xs_qm_dquot); 60 kmem_cache_free(xfs_qm_dqzone, dqp); 61} 62 63/* 64 * If default limits are in force, push them into the dquot now. 65 * We overwrite the dquot limits only if they are zero and this 66 * is not the root dquot. 67 */ 68void 69xfs_qm_adjust_dqlimits( 70 struct xfs_dquot *dq) 71{ 72 struct xfs_mount *mp = dq->q_mount; 73 struct xfs_quotainfo *q = mp->m_quotainfo; 74 struct xfs_def_quota *defq; 75 int prealloc = 0; 76 77 ASSERT(dq->q_id); 78 defq = xfs_get_defquota(q, xfs_dquot_type(dq)); 79 80 if (!dq->q_blk.softlimit) { 81 dq->q_blk.softlimit = defq->blk.soft; 82 prealloc = 1; 83 } 84 if (!dq->q_blk.hardlimit) { 85 dq->q_blk.hardlimit = defq->blk.hard; 86 prealloc = 1; 87 } 88 if (!dq->q_ino.softlimit) 89 dq->q_ino.softlimit = defq->ino.soft; 90 if (!dq->q_ino.hardlimit) 91 dq->q_ino.hardlimit = defq->ino.hard; 92 if (!dq->q_rtb.softlimit) 93 dq->q_rtb.softlimit = defq->rtb.soft; 94 if (!dq->q_rtb.hardlimit) 95 dq->q_rtb.hardlimit = defq->rtb.hard; 96 97 if (prealloc) 98 xfs_dquot_set_prealloc_limits(dq); 99} 100 101/* Set the expiration time of a quota's grace period. */ 102time64_t 103xfs_dquot_set_timeout( 104 struct xfs_mount *mp, 105 time64_t timeout) 106{ 107 struct xfs_quotainfo *qi = mp->m_quotainfo; 108 109 return clamp_t(time64_t, timeout, qi->qi_expiry_min, 110 qi->qi_expiry_max); 111} 112 113/* Set the length of the default grace period. */ 114time64_t 115xfs_dquot_set_grace_period( 116 time64_t grace) 117{ 118 return clamp_t(time64_t, grace, XFS_DQ_GRACE_MIN, XFS_DQ_GRACE_MAX); 119} 120 121/* 122 * Determine if this quota counter is over either limit and set the quota 123 * timers as appropriate. 124 */ 125static inline void 126xfs_qm_adjust_res_timer( 127 struct xfs_mount *mp, 128 struct xfs_dquot_res *res, 129 struct xfs_quota_limits *qlim) 130{ 131 ASSERT(res->hardlimit == 0 || res->softlimit <= res->hardlimit); 132 133 if ((res->softlimit && res->count > res->softlimit) || 134 (res->hardlimit && res->count > res->hardlimit)) { 135 if (res->timer == 0) 136 res->timer = xfs_dquot_set_timeout(mp, 137 ktime_get_real_seconds() + qlim->time); 138 } else { 139 if (res->timer == 0) 140 res->warnings = 0; 141 else 142 res->timer = 0; 143 } 144} 145 146/* 147 * Check the limits and timers of a dquot and start or reset timers 148 * if necessary. 149 * This gets called even when quota enforcement is OFF, which makes our 150 * life a little less complicated. (We just don't reject any quota 151 * reservations in that case, when enforcement is off). 152 * We also return 0 as the values of the timers in Q_GETQUOTA calls, when 153 * enforcement's off. 154 * In contrast, warnings are a little different in that they don't 155 * 'automatically' get started when limits get exceeded. They do 156 * get reset to zero, however, when we find the count to be under 157 * the soft limit (they are only ever set non-zero via userspace). 158 */ 159void 160xfs_qm_adjust_dqtimers( 161 struct xfs_dquot *dq) 162{ 163 struct xfs_mount *mp = dq->q_mount; 164 struct xfs_quotainfo *qi = mp->m_quotainfo; 165 struct xfs_def_quota *defq; 166 167 ASSERT(dq->q_id); 168 defq = xfs_get_defquota(qi, xfs_dquot_type(dq)); 169 170 xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_blk, &defq->blk); 171 xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_ino, &defq->ino); 172 xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_rtb, &defq->rtb); 173} 174 175/* 176 * initialize a buffer full of dquots and log the whole thing 177 */ 178STATIC void 179xfs_qm_init_dquot_blk( 180 struct xfs_trans *tp, 181 struct xfs_mount *mp, 182 xfs_dqid_t id, 183 xfs_dqtype_t type, 184 struct xfs_buf *bp) 185{ 186 struct xfs_quotainfo *q = mp->m_quotainfo; 187 struct xfs_dqblk *d; 188 xfs_dqid_t curid; 189 unsigned int qflag; 190 unsigned int blftype; 191 int i; 192 193 ASSERT(tp); 194 ASSERT(xfs_buf_islocked(bp)); 195 196 switch (type) { 197 case XFS_DQTYPE_USER: 198 qflag = XFS_UQUOTA_CHKD; 199 blftype = XFS_BLF_UDQUOT_BUF; 200 break; 201 case XFS_DQTYPE_PROJ: 202 qflag = XFS_PQUOTA_CHKD; 203 blftype = XFS_BLF_PDQUOT_BUF; 204 break; 205 case XFS_DQTYPE_GROUP: 206 qflag = XFS_GQUOTA_CHKD; 207 blftype = XFS_BLF_GDQUOT_BUF; 208 break; 209 default: 210 ASSERT(0); 211 return; 212 } 213 214 d = bp->b_addr; 215 216 /* 217 * ID of the first dquot in the block - id's are zero based. 218 */ 219 curid = id - (id % q->qi_dqperchunk); 220 memset(d, 0, BBTOB(q->qi_dqchunklen)); 221 for (i = 0; i < q->qi_dqperchunk; i++, d++, curid++) { 222 d->dd_diskdq.d_magic = cpu_to_be16(XFS_DQUOT_MAGIC); 223 d->dd_diskdq.d_version = XFS_DQUOT_VERSION; 224 d->dd_diskdq.d_id = cpu_to_be32(curid); 225 d->dd_diskdq.d_type = type; 226 if (curid > 0 && xfs_sb_version_hasbigtime(&mp->m_sb)) 227 d->dd_diskdq.d_type |= XFS_DQTYPE_BIGTIME; 228 if (xfs_sb_version_hascrc(&mp->m_sb)) { 229 uuid_copy(&d->dd_uuid, &mp->m_sb.sb_meta_uuid); 230 xfs_update_cksum((char *)d, sizeof(struct xfs_dqblk), 231 XFS_DQUOT_CRC_OFF); 232 } 233 } 234 235 xfs_trans_dquot_buf(tp, bp, blftype); 236 237 /* 238 * quotacheck uses delayed writes to update all the dquots on disk in an 239 * efficient manner instead of logging the individual dquot changes as 240 * they are made. However if we log the buffer allocated here and crash 241 * after quotacheck while the logged initialisation is still in the 242 * active region of the log, log recovery can replay the dquot buffer 243 * initialisation over the top of the checked dquots and corrupt quota 244 * accounting. 245 * 246 * To avoid this problem, quotacheck cannot log the initialised buffer. 247 * We must still dirty the buffer and write it back before the 248 * allocation transaction clears the log. Therefore, mark the buffer as 249 * ordered instead of logging it directly. This is safe for quotacheck 250 * because it detects and repairs allocated but initialized dquot blocks 251 * in the quota inodes. 252 */ 253 if (!(mp->m_qflags & qflag)) 254 xfs_trans_ordered_buf(tp, bp); 255 else 256 xfs_trans_log_buf(tp, bp, 0, BBTOB(q->qi_dqchunklen) - 1); 257} 258 259/* 260 * Initialize the dynamic speculative preallocation thresholds. The lo/hi 261 * watermarks correspond to the soft and hard limits by default. If a soft limit 262 * is not specified, we use 95% of the hard limit. 263 */ 264void 265xfs_dquot_set_prealloc_limits(struct xfs_dquot *dqp) 266{ 267 uint64_t space; 268 269 dqp->q_prealloc_hi_wmark = dqp->q_blk.hardlimit; 270 dqp->q_prealloc_lo_wmark = dqp->q_blk.softlimit; 271 if (!dqp->q_prealloc_lo_wmark) { 272 dqp->q_prealloc_lo_wmark = dqp->q_prealloc_hi_wmark; 273 do_div(dqp->q_prealloc_lo_wmark, 100); 274 dqp->q_prealloc_lo_wmark *= 95; 275 } 276 277 space = dqp->q_prealloc_hi_wmark; 278 279 do_div(space, 100); 280 dqp->q_low_space[XFS_QLOWSP_1_PCNT] = space; 281 dqp->q_low_space[XFS_QLOWSP_3_PCNT] = space * 3; 282 dqp->q_low_space[XFS_QLOWSP_5_PCNT] = space * 5; 283} 284 285/* 286 * Ensure that the given in-core dquot has a buffer on disk backing it, and 287 * return the buffer locked and held. This is called when the bmapi finds a 288 * hole. 289 */ 290STATIC int 291xfs_dquot_disk_alloc( 292 struct xfs_trans **tpp, 293 struct xfs_dquot *dqp, 294 struct xfs_buf **bpp) 295{ 296 struct xfs_bmbt_irec map; 297 struct xfs_trans *tp = *tpp; 298 struct xfs_mount *mp = tp->t_mountp; 299 struct xfs_buf *bp; 300 xfs_dqtype_t qtype = xfs_dquot_type(dqp); 301 struct xfs_inode *quotip = xfs_quota_inode(mp, qtype); 302 int nmaps = 1; 303 int error; 304 305 trace_xfs_dqalloc(dqp); 306 307 xfs_ilock(quotip, XFS_ILOCK_EXCL); 308 if (!xfs_this_quota_on(dqp->q_mount, qtype)) { 309 /* 310 * Return if this type of quotas is turned off while we didn't 311 * have an inode lock 312 */ 313 xfs_iunlock(quotip, XFS_ILOCK_EXCL); 314 return -ESRCH; 315 } 316 317 /* Create the block mapping. */ 318 xfs_trans_ijoin(tp, quotip, XFS_ILOCK_EXCL); 319 error = xfs_bmapi_write(tp, quotip, dqp->q_fileoffset, 320 XFS_DQUOT_CLUSTER_SIZE_FSB, XFS_BMAPI_METADATA, 0, &map, 321 &nmaps); 322 if (error) 323 return error; 324 ASSERT(map.br_blockcount == XFS_DQUOT_CLUSTER_SIZE_FSB); 325 ASSERT(nmaps == 1); 326 ASSERT((map.br_startblock != DELAYSTARTBLOCK) && 327 (map.br_startblock != HOLESTARTBLOCK)); 328 329 /* 330 * Keep track of the blkno to save a lookup later 331 */ 332 dqp->q_blkno = XFS_FSB_TO_DADDR(mp, map.br_startblock); 333 334 /* now we can just get the buffer (there's nothing to read yet) */ 335 error = xfs_trans_get_buf(tp, mp->m_ddev_targp, dqp->q_blkno, 336 mp->m_quotainfo->qi_dqchunklen, 0, &bp); 337 if (error) 338 return error; 339 bp->b_ops = &xfs_dquot_buf_ops; 340 341 /* 342 * Make a chunk of dquots out of this buffer and log 343 * the entire thing. 344 */ 345 xfs_qm_init_dquot_blk(tp, mp, dqp->q_id, qtype, bp); 346 xfs_buf_set_ref(bp, XFS_DQUOT_REF); 347 348 /* 349 * Hold the buffer and join it to the dfops so that we'll still own 350 * the buffer when we return to the caller. The buffer disposal on 351 * error must be paid attention to very carefully, as it has been 352 * broken since commit efa092f3d4c6 "[XFS] Fixes a bug in the quota 353 * code when allocating a new dquot record" in 2005, and the later 354 * conversion to xfs_defer_ops in commit 310a75a3c6c747 failed to keep 355 * the buffer locked across the _defer_finish call. We can now do 356 * this correctly with xfs_defer_bjoin. 357 * 358 * Above, we allocated a disk block for the dquot information and used 359 * get_buf to initialize the dquot. If the _defer_finish fails, the old 360 * transaction is gone but the new buffer is not joined or held to any 361 * transaction, so we must _buf_relse it. 362 * 363 * If everything succeeds, the caller of this function is returned a 364 * buffer that is locked and held to the transaction. The caller 365 * is responsible for unlocking any buffer passed back, either 366 * manually or by committing the transaction. On error, the buffer is 367 * released and not passed back. 368 */ 369 xfs_trans_bhold(tp, bp); 370 error = xfs_defer_finish(tpp); 371 if (error) { 372 xfs_trans_bhold_release(*tpp, bp); 373 xfs_trans_brelse(*tpp, bp); 374 return error; 375 } 376 *bpp = bp; 377 return 0; 378} 379 380/* 381 * Read in the in-core dquot's on-disk metadata and return the buffer. 382 * Returns ENOENT to signal a hole. 383 */ 384STATIC int 385xfs_dquot_disk_read( 386 struct xfs_mount *mp, 387 struct xfs_dquot *dqp, 388 struct xfs_buf **bpp) 389{ 390 struct xfs_bmbt_irec map; 391 struct xfs_buf *bp; 392 xfs_dqtype_t qtype = xfs_dquot_type(dqp); 393 struct xfs_inode *quotip = xfs_quota_inode(mp, qtype); 394 uint lock_mode; 395 int nmaps = 1; 396 int error; 397 398 lock_mode = xfs_ilock_data_map_shared(quotip); 399 if (!xfs_this_quota_on(mp, qtype)) { 400 /* 401 * Return if this type of quotas is turned off while we 402 * didn't have the quota inode lock. 403 */ 404 xfs_iunlock(quotip, lock_mode); 405 return -ESRCH; 406 } 407 408 /* 409 * Find the block map; no allocations yet 410 */ 411 error = xfs_bmapi_read(quotip, dqp->q_fileoffset, 412 XFS_DQUOT_CLUSTER_SIZE_FSB, &map, &nmaps, 0); 413 xfs_iunlock(quotip, lock_mode); 414 if (error) 415 return error; 416 417 ASSERT(nmaps == 1); 418 ASSERT(map.br_blockcount >= 1); 419 ASSERT(map.br_startblock != DELAYSTARTBLOCK); 420 if (map.br_startblock == HOLESTARTBLOCK) 421 return -ENOENT; 422 423 trace_xfs_dqtobp_read(dqp); 424 425 /* 426 * store the blkno etc so that we don't have to do the 427 * mapping all the time 428 */ 429 dqp->q_blkno = XFS_FSB_TO_DADDR(mp, map.br_startblock); 430 431 error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dqp->q_blkno, 432 mp->m_quotainfo->qi_dqchunklen, 0, &bp, 433 &xfs_dquot_buf_ops); 434 if (error) { 435 ASSERT(bp == NULL); 436 return error; 437 } 438 439 ASSERT(xfs_buf_islocked(bp)); 440 xfs_buf_set_ref(bp, XFS_DQUOT_REF); 441 *bpp = bp; 442 443 return 0; 444} 445 446/* Allocate and initialize everything we need for an incore dquot. */ 447STATIC struct xfs_dquot * 448xfs_dquot_alloc( 449 struct xfs_mount *mp, 450 xfs_dqid_t id, 451 xfs_dqtype_t type) 452{ 453 struct xfs_dquot *dqp; 454 455 dqp = kmem_cache_zalloc(xfs_qm_dqzone, GFP_KERNEL | __GFP_NOFAIL); 456 457 dqp->q_type = type; 458 dqp->q_id = id; 459 dqp->q_mount = mp; 460 INIT_LIST_HEAD(&dqp->q_lru); 461 mutex_init(&dqp->q_qlock); 462 init_waitqueue_head(&dqp->q_pinwait); 463 dqp->q_fileoffset = (xfs_fileoff_t)id / mp->m_quotainfo->qi_dqperchunk; 464 /* 465 * Offset of dquot in the (fixed sized) dquot chunk. 466 */ 467 dqp->q_bufoffset = (id % mp->m_quotainfo->qi_dqperchunk) * 468 sizeof(xfs_dqblk_t); 469 470 /* 471 * Because we want to use a counting completion, complete 472 * the flush completion once to allow a single access to 473 * the flush completion without blocking. 474 */ 475 init_completion(&dqp->q_flush); 476 complete(&dqp->q_flush); 477 478 /* 479 * Make sure group quotas have a different lock class than user 480 * quotas. 481 */ 482 switch (type) { 483 case XFS_DQTYPE_USER: 484 /* uses the default lock class */ 485 break; 486 case XFS_DQTYPE_GROUP: 487 lockdep_set_class(&dqp->q_qlock, &xfs_dquot_group_class); 488 break; 489 case XFS_DQTYPE_PROJ: 490 lockdep_set_class(&dqp->q_qlock, &xfs_dquot_project_class); 491 break; 492 default: 493 ASSERT(0); 494 break; 495 } 496 497 xfs_qm_dquot_logitem_init(dqp); 498 499 XFS_STATS_INC(mp, xs_qm_dquot); 500 return dqp; 501} 502 503/* Check the ondisk dquot's id and type match what the incore dquot expects. */ 504static bool 505xfs_dquot_check_type( 506 struct xfs_dquot *dqp, 507 struct xfs_disk_dquot *ddqp) 508{ 509 uint8_t ddqp_type; 510 uint8_t dqp_type; 511 512 ddqp_type = ddqp->d_type & XFS_DQTYPE_REC_MASK; 513 dqp_type = xfs_dquot_type(dqp); 514 515 if (be32_to_cpu(ddqp->d_id) != dqp->q_id) 516 return false; 517 518 /* 519 * V5 filesystems always expect an exact type match. V4 filesystems 520 * expect an exact match for user dquots and for non-root group and 521 * project dquots. 522 */ 523 if (xfs_sb_version_hascrc(&dqp->q_mount->m_sb) || 524 dqp_type == XFS_DQTYPE_USER || dqp->q_id != 0) 525 return ddqp_type == dqp_type; 526 527 /* 528 * V4 filesystems support either group or project quotas, but not both 529 * at the same time. The non-user quota file can be switched between 530 * group and project quota uses depending on the mount options, which 531 * means that we can encounter the other type when we try to load quota 532 * defaults. Quotacheck will soon reset the the entire quota file 533 * (including the root dquot) anyway, but don't log scary corruption 534 * reports to dmesg. 535 */ 536 return ddqp_type == XFS_DQTYPE_GROUP || ddqp_type == XFS_DQTYPE_PROJ; 537} 538 539/* Copy the in-core quota fields in from the on-disk buffer. */ 540STATIC int 541xfs_dquot_from_disk( 542 struct xfs_dquot *dqp, 543 struct xfs_buf *bp) 544{ 545 struct xfs_disk_dquot *ddqp = bp->b_addr + dqp->q_bufoffset; 546 547 /* 548 * Ensure that we got the type and ID we were looking for. 549 * Everything else was checked by the dquot buffer verifier. 550 */ 551 if (!xfs_dquot_check_type(dqp, ddqp)) { 552 xfs_alert_tag(bp->b_mount, XFS_PTAG_VERIFIER_ERROR, 553 "Metadata corruption detected at %pS, quota %u", 554 __this_address, dqp->q_id); 555 xfs_alert(bp->b_mount, "Unmount and run xfs_repair"); 556 return -EFSCORRUPTED; 557 } 558 559 /* copy everything from disk dquot to the incore dquot */ 560 dqp->q_type = ddqp->d_type; 561 dqp->q_blk.hardlimit = be64_to_cpu(ddqp->d_blk_hardlimit); 562 dqp->q_blk.softlimit = be64_to_cpu(ddqp->d_blk_softlimit); 563 dqp->q_ino.hardlimit = be64_to_cpu(ddqp->d_ino_hardlimit); 564 dqp->q_ino.softlimit = be64_to_cpu(ddqp->d_ino_softlimit); 565 dqp->q_rtb.hardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit); 566 dqp->q_rtb.softlimit = be64_to_cpu(ddqp->d_rtb_softlimit); 567 568 dqp->q_blk.count = be64_to_cpu(ddqp->d_bcount); 569 dqp->q_ino.count = be64_to_cpu(ddqp->d_icount); 570 dqp->q_rtb.count = be64_to_cpu(ddqp->d_rtbcount); 571 572 dqp->q_blk.warnings = be16_to_cpu(ddqp->d_bwarns); 573 dqp->q_ino.warnings = be16_to_cpu(ddqp->d_iwarns); 574 dqp->q_rtb.warnings = be16_to_cpu(ddqp->d_rtbwarns); 575 576 dqp->q_blk.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_btimer); 577 dqp->q_ino.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_itimer); 578 dqp->q_rtb.timer = xfs_dquot_from_disk_ts(ddqp, ddqp->d_rtbtimer); 579 580 /* 581 * Reservation counters are defined as reservation plus current usage 582 * to avoid having to add every time. 583 */ 584 dqp->q_blk.reserved = dqp->q_blk.count; 585 dqp->q_ino.reserved = dqp->q_ino.count; 586 dqp->q_rtb.reserved = dqp->q_rtb.count; 587 588 /* initialize the dquot speculative prealloc thresholds */ 589 xfs_dquot_set_prealloc_limits(dqp); 590 return 0; 591} 592 593/* Copy the in-core quota fields into the on-disk buffer. */ 594void 595xfs_dquot_to_disk( 596 struct xfs_disk_dquot *ddqp, 597 struct xfs_dquot *dqp) 598{ 599 ddqp->d_magic = cpu_to_be16(XFS_DQUOT_MAGIC); 600 ddqp->d_version = XFS_DQUOT_VERSION; 601 ddqp->d_type = dqp->q_type; 602 ddqp->d_id = cpu_to_be32(dqp->q_id); 603 ddqp->d_pad0 = 0; 604 ddqp->d_pad = 0; 605 606 ddqp->d_blk_hardlimit = cpu_to_be64(dqp->q_blk.hardlimit); 607 ddqp->d_blk_softlimit = cpu_to_be64(dqp->q_blk.softlimit); 608 ddqp->d_ino_hardlimit = cpu_to_be64(dqp->q_ino.hardlimit); 609 ddqp->d_ino_softlimit = cpu_to_be64(dqp->q_ino.softlimit); 610 ddqp->d_rtb_hardlimit = cpu_to_be64(dqp->q_rtb.hardlimit); 611 ddqp->d_rtb_softlimit = cpu_to_be64(dqp->q_rtb.softlimit); 612 613 ddqp->d_bcount = cpu_to_be64(dqp->q_blk.count); 614 ddqp->d_icount = cpu_to_be64(dqp->q_ino.count); 615 ddqp->d_rtbcount = cpu_to_be64(dqp->q_rtb.count); 616 617 ddqp->d_bwarns = cpu_to_be16(dqp->q_blk.warnings); 618 ddqp->d_iwarns = cpu_to_be16(dqp->q_ino.warnings); 619 ddqp->d_rtbwarns = cpu_to_be16(dqp->q_rtb.warnings); 620 621 ddqp->d_btimer = xfs_dquot_to_disk_ts(dqp, dqp->q_blk.timer); 622 ddqp->d_itimer = xfs_dquot_to_disk_ts(dqp, dqp->q_ino.timer); 623 ddqp->d_rtbtimer = xfs_dquot_to_disk_ts(dqp, dqp->q_rtb.timer); 624} 625 626/* Allocate and initialize the dquot buffer for this in-core dquot. */ 627static int 628xfs_qm_dqread_alloc( 629 struct xfs_mount *mp, 630 struct xfs_dquot *dqp, 631 struct xfs_buf **bpp) 632{ 633 struct xfs_trans *tp; 634 int error; 635 636 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_qm_dqalloc, 637 XFS_QM_DQALLOC_SPACE_RES(mp), 0, 0, &tp); 638 if (error) 639 goto err; 640 641 error = xfs_dquot_disk_alloc(&tp, dqp, bpp); 642 if (error) 643 goto err_cancel; 644 645 error = xfs_trans_commit(tp); 646 if (error) { 647 /* 648 * Buffer was held to the transaction, so we have to unlock it 649 * manually here because we're not passing it back. 650 */ 651 xfs_buf_relse(*bpp); 652 *bpp = NULL; 653 goto err; 654 } 655 return 0; 656 657err_cancel: 658 xfs_trans_cancel(tp); 659err: 660 return error; 661} 662 663/* 664 * Read in the ondisk dquot using dqtobp() then copy it to an incore version, 665 * and release the buffer immediately. If @can_alloc is true, fill any 666 * holes in the on-disk metadata. 667 */ 668static int 669xfs_qm_dqread( 670 struct xfs_mount *mp, 671 xfs_dqid_t id, 672 xfs_dqtype_t type, 673 bool can_alloc, 674 struct xfs_dquot **dqpp) 675{ 676 struct xfs_dquot *dqp; 677 struct xfs_buf *bp; 678 int error; 679 680 dqp = xfs_dquot_alloc(mp, id, type); 681 trace_xfs_dqread(dqp); 682 683 /* Try to read the buffer, allocating if necessary. */ 684 error = xfs_dquot_disk_read(mp, dqp, &bp); 685 if (error == -ENOENT && can_alloc) 686 error = xfs_qm_dqread_alloc(mp, dqp, &bp); 687 if (error) 688 goto err; 689 690 /* 691 * At this point we should have a clean locked buffer. Copy the data 692 * to the incore dquot and release the buffer since the incore dquot 693 * has its own locking protocol so we needn't tie up the buffer any 694 * further. 695 */ 696 ASSERT(xfs_buf_islocked(bp)); 697 error = xfs_dquot_from_disk(dqp, bp); 698 xfs_buf_relse(bp); 699 if (error) 700 goto err; 701 702 *dqpp = dqp; 703 return error; 704 705err: 706 trace_xfs_dqread_fail(dqp); 707 xfs_qm_dqdestroy(dqp); 708 *dqpp = NULL; 709 return error; 710} 711 712/* 713 * Advance to the next id in the current chunk, or if at the 714 * end of the chunk, skip ahead to first id in next allocated chunk 715 * using the SEEK_DATA interface. 716 */ 717static int 718xfs_dq_get_next_id( 719 struct xfs_mount *mp, 720 xfs_dqtype_t type, 721 xfs_dqid_t *id) 722{ 723 struct xfs_inode *quotip = xfs_quota_inode(mp, type); 724 xfs_dqid_t next_id = *id + 1; /* simple advance */ 725 uint lock_flags; 726 struct xfs_bmbt_irec got; 727 struct xfs_iext_cursor cur; 728 xfs_fsblock_t start; 729 int error = 0; 730 731 /* If we'd wrap past the max ID, stop */ 732 if (next_id < *id) 733 return -ENOENT; 734 735 /* If new ID is within the current chunk, advancing it sufficed */ 736 if (next_id % mp->m_quotainfo->qi_dqperchunk) { 737 *id = next_id; 738 return 0; 739 } 740 741 /* Nope, next_id is now past the current chunk, so find the next one */ 742 start = (xfs_fsblock_t)next_id / mp->m_quotainfo->qi_dqperchunk; 743 744 lock_flags = xfs_ilock_data_map_shared(quotip); 745 if (!(quotip->i_df.if_flags & XFS_IFEXTENTS)) { 746 error = xfs_iread_extents(NULL, quotip, XFS_DATA_FORK); 747 if (error) 748 return error; 749 } 750 751 if (xfs_iext_lookup_extent(quotip, "ip->i_df, start, &cur, &got)) { 752 /* contiguous chunk, bump startoff for the id calculation */ 753 if (got.br_startoff < start) 754 got.br_startoff = start; 755 *id = got.br_startoff * mp->m_quotainfo->qi_dqperchunk; 756 } else { 757 error = -ENOENT; 758 } 759 760 xfs_iunlock(quotip, lock_flags); 761 762 return error; 763} 764 765/* 766 * Look up the dquot in the in-core cache. If found, the dquot is returned 767 * locked and ready to go. 768 */ 769static struct xfs_dquot * 770xfs_qm_dqget_cache_lookup( 771 struct xfs_mount *mp, 772 struct xfs_quotainfo *qi, 773 struct radix_tree_root *tree, 774 xfs_dqid_t id) 775{ 776 struct xfs_dquot *dqp; 777 778restart: 779 mutex_lock(&qi->qi_tree_lock); 780 dqp = radix_tree_lookup(tree, id); 781 if (!dqp) { 782 mutex_unlock(&qi->qi_tree_lock); 783 XFS_STATS_INC(mp, xs_qm_dqcachemisses); 784 return NULL; 785 } 786 787 xfs_dqlock(dqp); 788 if (dqp->q_flags & XFS_DQFLAG_FREEING) { 789 xfs_dqunlock(dqp); 790 mutex_unlock(&qi->qi_tree_lock); 791 trace_xfs_dqget_freeing(dqp); 792 delay(1); 793 goto restart; 794 } 795 796 dqp->q_nrefs++; 797 mutex_unlock(&qi->qi_tree_lock); 798 799 trace_xfs_dqget_hit(dqp); 800 XFS_STATS_INC(mp, xs_qm_dqcachehits); 801 return dqp; 802} 803 804/* 805 * Try to insert a new dquot into the in-core cache. If an error occurs the 806 * caller should throw away the dquot and start over. Otherwise, the dquot 807 * is returned locked (and held by the cache) as if there had been a cache 808 * hit. 809 */ 810static int 811xfs_qm_dqget_cache_insert( 812 struct xfs_mount *mp, 813 struct xfs_quotainfo *qi, 814 struct radix_tree_root *tree, 815 xfs_dqid_t id, 816 struct xfs_dquot *dqp) 817{ 818 int error; 819 820 mutex_lock(&qi->qi_tree_lock); 821 error = radix_tree_insert(tree, id, dqp); 822 if (unlikely(error)) { 823 /* Duplicate found! Caller must try again. */ 824 WARN_ON(error != -EEXIST); 825 mutex_unlock(&qi->qi_tree_lock); 826 trace_xfs_dqget_dup(dqp); 827 return error; 828 } 829 830 /* Return a locked dquot to the caller, with a reference taken. */ 831 xfs_dqlock(dqp); 832 dqp->q_nrefs = 1; 833 834 qi->qi_dquots++; 835 mutex_unlock(&qi->qi_tree_lock); 836 837 return 0; 838} 839 840/* Check our input parameters. */ 841static int 842xfs_qm_dqget_checks( 843 struct xfs_mount *mp, 844 xfs_dqtype_t type) 845{ 846 if (WARN_ON_ONCE(!XFS_IS_QUOTA_RUNNING(mp))) 847 return -ESRCH; 848 849 switch (type) { 850 case XFS_DQTYPE_USER: 851 if (!XFS_IS_UQUOTA_ON(mp)) 852 return -ESRCH; 853 return 0; 854 case XFS_DQTYPE_GROUP: 855 if (!XFS_IS_GQUOTA_ON(mp)) 856 return -ESRCH; 857 return 0; 858 case XFS_DQTYPE_PROJ: 859 if (!XFS_IS_PQUOTA_ON(mp)) 860 return -ESRCH; 861 return 0; 862 default: 863 WARN_ON_ONCE(0); 864 return -EINVAL; 865 } 866} 867 868/* 869 * Given the file system, id, and type (UDQUOT/GDQUOT/PDQUOT), return a 870 * locked dquot, doing an allocation (if requested) as needed. 871 */ 872int 873xfs_qm_dqget( 874 struct xfs_mount *mp, 875 xfs_dqid_t id, 876 xfs_dqtype_t type, 877 bool can_alloc, 878 struct xfs_dquot **O_dqpp) 879{ 880 struct xfs_quotainfo *qi = mp->m_quotainfo; 881 struct radix_tree_root *tree = xfs_dquot_tree(qi, type); 882 struct xfs_dquot *dqp; 883 int error; 884 885 error = xfs_qm_dqget_checks(mp, type); 886 if (error) 887 return error; 888 889restart: 890 dqp = xfs_qm_dqget_cache_lookup(mp, qi, tree, id); 891 if (dqp) { 892 *O_dqpp = dqp; 893 return 0; 894 } 895 896 error = xfs_qm_dqread(mp, id, type, can_alloc, &dqp); 897 if (error) 898 return error; 899 900 error = xfs_qm_dqget_cache_insert(mp, qi, tree, id, dqp); 901 if (error) { 902 /* 903 * Duplicate found. Just throw away the new dquot and start 904 * over. 905 */ 906 xfs_qm_dqdestroy(dqp); 907 XFS_STATS_INC(mp, xs_qm_dquot_dups); 908 goto restart; 909 } 910 911 trace_xfs_dqget_miss(dqp); 912 *O_dqpp = dqp; 913 return 0; 914} 915 916/* 917 * Given a dquot id and type, read and initialize a dquot from the on-disk 918 * metadata. This function is only for use during quota initialization so 919 * it ignores the dquot cache assuming that the dquot shrinker isn't set up. 920 * The caller is responsible for _qm_dqdestroy'ing the returned dquot. 921 */ 922int 923xfs_qm_dqget_uncached( 924 struct xfs_mount *mp, 925 xfs_dqid_t id, 926 xfs_dqtype_t type, 927 struct xfs_dquot **dqpp) 928{ 929 int error; 930 931 error = xfs_qm_dqget_checks(mp, type); 932 if (error) 933 return error; 934 935 return xfs_qm_dqread(mp, id, type, 0, dqpp); 936} 937 938/* Return the quota id for a given inode and type. */ 939xfs_dqid_t 940xfs_qm_id_for_quotatype( 941 struct xfs_inode *ip, 942 xfs_dqtype_t type) 943{ 944 switch (type) { 945 case XFS_DQTYPE_USER: 946 return i_uid_read(VFS_I(ip)); 947 case XFS_DQTYPE_GROUP: 948 return i_gid_read(VFS_I(ip)); 949 case XFS_DQTYPE_PROJ: 950 return ip->i_d.di_projid; 951 } 952 ASSERT(0); 953 return 0; 954} 955 956/* 957 * Return the dquot for a given inode and type. If @can_alloc is true, then 958 * allocate blocks if needed. The inode's ILOCK must be held and it must not 959 * have already had an inode attached. 960 */ 961int 962xfs_qm_dqget_inode( 963 struct xfs_inode *ip, 964 xfs_dqtype_t type, 965 bool can_alloc, 966 struct xfs_dquot **O_dqpp) 967{ 968 struct xfs_mount *mp = ip->i_mount; 969 struct xfs_quotainfo *qi = mp->m_quotainfo; 970 struct radix_tree_root *tree = xfs_dquot_tree(qi, type); 971 struct xfs_dquot *dqp; 972 xfs_dqid_t id; 973 int error; 974 975 error = xfs_qm_dqget_checks(mp, type); 976 if (error) 977 return error; 978 979 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 980 ASSERT(xfs_inode_dquot(ip, type) == NULL); 981 982 id = xfs_qm_id_for_quotatype(ip, type); 983 984restart: 985 dqp = xfs_qm_dqget_cache_lookup(mp, qi, tree, id); 986 if (dqp) { 987 *O_dqpp = dqp; 988 return 0; 989 } 990 991 /* 992 * Dquot cache miss. We don't want to keep the inode lock across 993 * a (potential) disk read. Also we don't want to deal with the lock 994 * ordering between quotainode and this inode. OTOH, dropping the inode 995 * lock here means dealing with a chown that can happen before 996 * we re-acquire the lock. 997 */ 998 xfs_iunlock(ip, XFS_ILOCK_EXCL); 999 error = xfs_qm_dqread(mp, id, type, can_alloc, &dqp); 1000 xfs_ilock(ip, XFS_ILOCK_EXCL); 1001 if (error) 1002 return error; 1003 1004 /* 1005 * A dquot could be attached to this inode by now, since we had 1006 * dropped the ilock. 1007 */ 1008 if (xfs_this_quota_on(mp, type)) { 1009 struct xfs_dquot *dqp1; 1010 1011 dqp1 = xfs_inode_dquot(ip, type); 1012 if (dqp1) { 1013 xfs_qm_dqdestroy(dqp); 1014 dqp = dqp1; 1015 xfs_dqlock(dqp); 1016 goto dqret; 1017 } 1018 } else { 1019 /* inode stays locked on return */ 1020 xfs_qm_dqdestroy(dqp); 1021 return -ESRCH; 1022 } 1023 1024 error = xfs_qm_dqget_cache_insert(mp, qi, tree, id, dqp); 1025 if (error) { 1026 /* 1027 * Duplicate found. Just throw away the new dquot and start 1028 * over. 1029 */ 1030 xfs_qm_dqdestroy(dqp); 1031 XFS_STATS_INC(mp, xs_qm_dquot_dups); 1032 goto restart; 1033 } 1034 1035dqret: 1036 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 1037 trace_xfs_dqget_miss(dqp); 1038 *O_dqpp = dqp; 1039 return 0; 1040} 1041 1042/* 1043 * Starting at @id and progressing upwards, look for an initialized incore 1044 * dquot, lock it, and return it. 1045 */ 1046int 1047xfs_qm_dqget_next( 1048 struct xfs_mount *mp, 1049 xfs_dqid_t id, 1050 xfs_dqtype_t type, 1051 struct xfs_dquot **dqpp) 1052{ 1053 struct xfs_dquot *dqp; 1054 int error = 0; 1055 1056 *dqpp = NULL; 1057 for (; !error; error = xfs_dq_get_next_id(mp, type, &id)) { 1058 error = xfs_qm_dqget(mp, id, type, false, &dqp); 1059 if (error == -ENOENT) 1060 continue; 1061 else if (error != 0) 1062 break; 1063 1064 if (!XFS_IS_DQUOT_UNINITIALIZED(dqp)) { 1065 *dqpp = dqp; 1066 return 0; 1067 } 1068 1069 xfs_qm_dqput(dqp); 1070 } 1071 1072 return error; 1073} 1074 1075/* 1076 * Release a reference to the dquot (decrement ref-count) and unlock it. 1077 * 1078 * If there is a group quota attached to this dquot, carefully release that 1079 * too without tripping over deadlocks'n'stuff. 1080 */ 1081void 1082xfs_qm_dqput( 1083 struct xfs_dquot *dqp) 1084{ 1085 ASSERT(dqp->q_nrefs > 0); 1086 ASSERT(XFS_DQ_IS_LOCKED(dqp)); 1087 1088 trace_xfs_dqput(dqp); 1089 1090 if (--dqp->q_nrefs == 0) { 1091 struct xfs_quotainfo *qi = dqp->q_mount->m_quotainfo; 1092 trace_xfs_dqput_free(dqp); 1093 1094 if (list_lru_add(&qi->qi_lru, &dqp->q_lru)) 1095 XFS_STATS_INC(dqp->q_mount, xs_qm_dquot_unused); 1096 } 1097 xfs_dqunlock(dqp); 1098} 1099 1100/* 1101 * Release a dquot. Flush it if dirty, then dqput() it. 1102 * dquot must not be locked. 1103 */ 1104void 1105xfs_qm_dqrele( 1106 struct xfs_dquot *dqp) 1107{ 1108 if (!dqp) 1109 return; 1110 1111 trace_xfs_dqrele(dqp); 1112 1113 xfs_dqlock(dqp); 1114 /* 1115 * We don't care to flush it if the dquot is dirty here. 1116 * That will create stutters that we want to avoid. 1117 * Instead we do a delayed write when we try to reclaim 1118 * a dirty dquot. Also xfs_sync will take part of the burden... 1119 */ 1120 xfs_qm_dqput(dqp); 1121} 1122 1123/* 1124 * This is the dquot flushing I/O completion routine. It is called 1125 * from interrupt level when the buffer containing the dquot is 1126 * flushed to disk. It is responsible for removing the dquot logitem 1127 * from the AIL if it has not been re-logged, and unlocking the dquot's 1128 * flush lock. This behavior is very similar to that of inodes.. 1129 */ 1130static void 1131xfs_qm_dqflush_done( 1132 struct xfs_log_item *lip) 1133{ 1134 struct xfs_dq_logitem *qip = (struct xfs_dq_logitem *)lip; 1135 struct xfs_dquot *dqp = qip->qli_dquot; 1136 struct xfs_ail *ailp = lip->li_ailp; 1137 xfs_lsn_t tail_lsn; 1138 1139 /* 1140 * We only want to pull the item from the AIL if its 1141 * location in the log has not changed since we started the flush. 1142 * Thus, we only bother if the dquot's lsn has 1143 * not changed. First we check the lsn outside the lock 1144 * since it's cheaper, and then we recheck while 1145 * holding the lock before removing the dquot from the AIL. 1146 */ 1147 if (test_bit(XFS_LI_IN_AIL, &lip->li_flags) && 1148 ((lip->li_lsn == qip->qli_flush_lsn) || 1149 test_bit(XFS_LI_FAILED, &lip->li_flags))) { 1150 1151 spin_lock(&ailp->ail_lock); 1152 xfs_clear_li_failed(lip); 1153 if (lip->li_lsn == qip->qli_flush_lsn) { 1154 /* xfs_ail_update_finish() drops the AIL lock */ 1155 tail_lsn = xfs_ail_delete_one(ailp, lip); 1156 xfs_ail_update_finish(ailp, tail_lsn); 1157 } else { 1158 spin_unlock(&ailp->ail_lock); 1159 } 1160 } 1161 1162 /* 1163 * Release the dq's flush lock since we're done with it. 1164 */ 1165 xfs_dqfunlock(dqp); 1166} 1167 1168void 1169xfs_buf_dquot_iodone( 1170 struct xfs_buf *bp) 1171{ 1172 struct xfs_log_item *lip, *n; 1173 1174 list_for_each_entry_safe(lip, n, &bp->b_li_list, li_bio_list) { 1175 list_del_init(&lip->li_bio_list); 1176 xfs_qm_dqflush_done(lip); 1177 } 1178} 1179 1180void 1181xfs_buf_dquot_io_fail( 1182 struct xfs_buf *bp) 1183{ 1184 struct xfs_log_item *lip; 1185 1186 spin_lock(&bp->b_mount->m_ail->ail_lock); 1187 list_for_each_entry(lip, &bp->b_li_list, li_bio_list) 1188 xfs_set_li_failed(lip, bp); 1189 spin_unlock(&bp->b_mount->m_ail->ail_lock); 1190} 1191 1192/* Check incore dquot for errors before we flush. */ 1193static xfs_failaddr_t 1194xfs_qm_dqflush_check( 1195 struct xfs_dquot *dqp) 1196{ 1197 xfs_dqtype_t type = xfs_dquot_type(dqp); 1198 1199 if (type != XFS_DQTYPE_USER && 1200 type != XFS_DQTYPE_GROUP && 1201 type != XFS_DQTYPE_PROJ) 1202 return __this_address; 1203 1204 if (dqp->q_id == 0) 1205 return NULL; 1206 1207 if (dqp->q_blk.softlimit && dqp->q_blk.count > dqp->q_blk.softlimit && 1208 !dqp->q_blk.timer) 1209 return __this_address; 1210 1211 if (dqp->q_ino.softlimit && dqp->q_ino.count > dqp->q_ino.softlimit && 1212 !dqp->q_ino.timer) 1213 return __this_address; 1214 1215 if (dqp->q_rtb.softlimit && dqp->q_rtb.count > dqp->q_rtb.softlimit && 1216 !dqp->q_rtb.timer) 1217 return __this_address; 1218 1219 /* bigtime flag should never be set on root dquots */ 1220 if (dqp->q_type & XFS_DQTYPE_BIGTIME) { 1221 if (!xfs_sb_version_hasbigtime(&dqp->q_mount->m_sb)) 1222 return __this_address; 1223 if (dqp->q_id == 0) 1224 return __this_address; 1225 } 1226 1227 return NULL; 1228} 1229 1230/* 1231 * Write a modified dquot to disk. 1232 * The dquot must be locked and the flush lock too taken by caller. 1233 * The flush lock will not be unlocked until the dquot reaches the disk, 1234 * but the dquot is free to be unlocked and modified by the caller 1235 * in the interim. Dquot is still locked on return. This behavior is 1236 * identical to that of inodes. 1237 */ 1238int 1239xfs_qm_dqflush( 1240 struct xfs_dquot *dqp, 1241 struct xfs_buf **bpp) 1242{ 1243 struct xfs_mount *mp = dqp->q_mount; 1244 struct xfs_log_item *lip = &dqp->q_logitem.qli_item; 1245 struct xfs_buf *bp; 1246 struct xfs_dqblk *dqblk; 1247 xfs_failaddr_t fa; 1248 int error; 1249 1250 ASSERT(XFS_DQ_IS_LOCKED(dqp)); 1251 ASSERT(!completion_done(&dqp->q_flush)); 1252 1253 trace_xfs_dqflush(dqp); 1254 1255 *bpp = NULL; 1256 1257 xfs_qm_dqunpin_wait(dqp); 1258 1259 /* 1260 * Get the buffer containing the on-disk dquot 1261 */ 1262 error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dqp->q_blkno, 1263 mp->m_quotainfo->qi_dqchunklen, XBF_TRYLOCK, 1264 &bp, &xfs_dquot_buf_ops); 1265 if (error == -EAGAIN) 1266 goto out_unlock; 1267 if (error) 1268 goto out_abort; 1269 1270 fa = xfs_qm_dqflush_check(dqp); 1271 if (fa) { 1272 xfs_alert(mp, "corrupt dquot ID 0x%x in memory at %pS", 1273 dqp->q_id, fa); 1274 xfs_buf_relse(bp); 1275 error = -EFSCORRUPTED; 1276 goto out_abort; 1277 } 1278 1279 /* Flush the incore dquot to the ondisk buffer. */ 1280 dqblk = bp->b_addr + dqp->q_bufoffset; 1281 xfs_dquot_to_disk(&dqblk->dd_diskdq, dqp); 1282 1283 /* 1284 * Clear the dirty field and remember the flush lsn for later use. 1285 */ 1286 dqp->q_flags &= ~XFS_DQFLAG_DIRTY; 1287 1288 xfs_trans_ail_copy_lsn(mp->m_ail, &dqp->q_logitem.qli_flush_lsn, 1289 &dqp->q_logitem.qli_item.li_lsn); 1290 1291 /* 1292 * copy the lsn into the on-disk dquot now while we have the in memory 1293 * dquot here. This can't be done later in the write verifier as we 1294 * can't get access to the log item at that point in time. 1295 * 1296 * We also calculate the CRC here so that the on-disk dquot in the 1297 * buffer always has a valid CRC. This ensures there is no possibility 1298 * of a dquot without an up-to-date CRC getting to disk. 1299 */ 1300 if (xfs_sb_version_hascrc(&mp->m_sb)) { 1301 dqblk->dd_lsn = cpu_to_be64(dqp->q_logitem.qli_item.li_lsn); 1302 xfs_update_cksum((char *)dqblk, sizeof(struct xfs_dqblk), 1303 XFS_DQUOT_CRC_OFF); 1304 } 1305 1306 /* 1307 * Attach the dquot to the buffer so that we can remove this dquot from 1308 * the AIL and release the flush lock once the dquot is synced to disk. 1309 */ 1310 bp->b_flags |= _XBF_DQUOTS; 1311 list_add_tail(&dqp->q_logitem.qli_item.li_bio_list, &bp->b_li_list); 1312 1313 /* 1314 * If the buffer is pinned then push on the log so we won't 1315 * get stuck waiting in the write for too long. 1316 */ 1317 if (xfs_buf_ispinned(bp)) { 1318 trace_xfs_dqflush_force(dqp); 1319 xfs_log_force(mp, 0); 1320 } 1321 1322 trace_xfs_dqflush_done(dqp); 1323 *bpp = bp; 1324 return 0; 1325 1326out_abort: 1327 dqp->q_flags &= ~XFS_DQFLAG_DIRTY; 1328 xfs_trans_ail_delete(lip, 0); 1329 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); 1330out_unlock: 1331 xfs_dqfunlock(dqp); 1332 return error; 1333} 1334 1335/* 1336 * Lock two xfs_dquot structures. 1337 * 1338 * To avoid deadlocks we always lock the quota structure with 1339 * the lowerd id first. 1340 */ 1341void 1342xfs_dqlock2( 1343 struct xfs_dquot *d1, 1344 struct xfs_dquot *d2) 1345{ 1346 if (d1 && d2) { 1347 ASSERT(d1 != d2); 1348 if (d1->q_id > d2->q_id) { 1349 mutex_lock(&d2->q_qlock); 1350 mutex_lock_nested(&d1->q_qlock, XFS_QLOCK_NESTED); 1351 } else { 1352 mutex_lock(&d1->q_qlock); 1353 mutex_lock_nested(&d2->q_qlock, XFS_QLOCK_NESTED); 1354 } 1355 } else if (d1) { 1356 mutex_lock(&d1->q_qlock); 1357 } else if (d2) { 1358 mutex_lock(&d2->q_qlock); 1359 } 1360} 1361 1362int __init 1363xfs_qm_init(void) 1364{ 1365 xfs_qm_dqzone = kmem_cache_create("xfs_dquot", 1366 sizeof(struct xfs_dquot), 1367 0, 0, NULL); 1368 if (!xfs_qm_dqzone) 1369 goto out; 1370 1371 xfs_qm_dqtrxzone = kmem_cache_create("xfs_dqtrx", 1372 sizeof(struct xfs_dquot_acct), 1373 0, 0, NULL); 1374 if (!xfs_qm_dqtrxzone) 1375 goto out_free_dqzone; 1376 1377 return 0; 1378 1379out_free_dqzone: 1380 kmem_cache_destroy(xfs_qm_dqzone); 1381out: 1382 return -ENOMEM; 1383} 1384 1385void 1386xfs_qm_exit(void) 1387{ 1388 kmem_cache_destroy(xfs_qm_dqtrxzone); 1389 kmem_cache_destroy(xfs_qm_dqzone); 1390} 1391 1392/* 1393 * Iterate every dquot of a particular type. The caller must ensure that the 1394 * particular quota type is active. iter_fn can return negative error codes, 1395 * or -ECANCELED to indicate that it wants to stop iterating. 1396 */ 1397int 1398xfs_qm_dqiterate( 1399 struct xfs_mount *mp, 1400 xfs_dqtype_t type, 1401 xfs_qm_dqiterate_fn iter_fn, 1402 void *priv) 1403{ 1404 struct xfs_dquot *dq; 1405 xfs_dqid_t id = 0; 1406 int error; 1407 1408 do { 1409 error = xfs_qm_dqget_next(mp, id, type, &dq); 1410 if (error == -ENOENT) 1411 return 0; 1412 if (error) 1413 return error; 1414 1415 error = iter_fn(dq, type, priv); 1416 id = dq->q_id; 1417 xfs_qm_dqput(dq); 1418 } while (error == 0 && id != 0); 1419 1420 return error; 1421} 1422