1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2000-2002 Silicon Graphics, Inc. 4 * All Rights Reserved. 5 */ 6 #include "xfs.h" 7 #include "xfs_fs.h" 8 #include "xfs_shared.h" 9 #include "xfs_format.h" 10 #include "xfs_log_format.h" 11 #include "xfs_trans_resv.h" 12 #include "xfs_mount.h" 13 #include "xfs_inode.h" 14 #include "xfs_trans.h" 15 #include "xfs_trans_priv.h" 16 #include "xfs_quota.h" 17 #include "xfs_qm.h" 18 #include "xfs_trace.h" 19 #include "xfs_error.h" 20 #include "xfs_health.h" 21 22 STATIC void xfs_trans_alloc_dqinfo(xfs_trans_t *); 23 24 /* 25 * Add the locked dquot to the transaction. 26 * The dquot must be locked, and it cannot be associated with any 27 * transaction. 28 */ 29 void 30 xfs_trans_dqjoin( 31 struct xfs_trans *tp, 32 struct xfs_dquot *dqp) 33 { 34 ASSERT(XFS_DQ_IS_LOCKED(dqp)); 35 ASSERT(dqp->q_logitem.qli_dquot == dqp); 36 37 /* 38 * Get a log_item_desc to point at the new item. 39 */ 40 xfs_trans_add_item(tp, &dqp->q_logitem.qli_item); 41 } 42 43 /* 44 * This is called to mark the dquot as needing 45 * to be logged when the transaction is committed. The dquot must 46 * already be associated with the given transaction. 47 * Note that it marks the entire transaction as dirty. In the ordinary 48 * case, this gets called via xfs_trans_commit, after the transaction 49 * is already dirty. However, there's nothing stop this from getting 50 * called directly, as done by xfs_qm_scall_setqlim. Hence, the TRANS_DIRTY 51 * flag. 52 */ 53 void 54 xfs_trans_log_dquot( 55 struct xfs_trans *tp, 56 struct xfs_dquot *dqp) 57 { 58 ASSERT(XFS_DQ_IS_LOCKED(dqp)); 59 60 /* Upgrade the dquot to bigtime format if possible. */ 61 if (dqp->q_id != 0 && 62 xfs_has_bigtime(tp->t_mountp) && 63 !(dqp->q_type & XFS_DQTYPE_BIGTIME)) 64 dqp->q_type |= XFS_DQTYPE_BIGTIME; 65 66 tp->t_flags |= XFS_TRANS_DIRTY; 67 set_bit(XFS_LI_DIRTY, &dqp->q_logitem.qli_item.li_flags); 68 } 69 70 /* 71 * Carry forward whatever is left of the quota blk reservation to 72 * the spanky new transaction 73 */ 74 void 75 xfs_trans_dup_dqinfo( 76 struct xfs_trans *otp, 77 struct xfs_trans *ntp) 78 { 79 struct xfs_dqtrx *oq, *nq; 80 int i, j; 81 struct xfs_dqtrx *oqa, *nqa; 82 uint64_t blk_res_used; 83 84 if (!otp->t_dqinfo) 85 return; 86 87 xfs_trans_alloc_dqinfo(ntp); 88 89 for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { 90 oqa = otp->t_dqinfo->dqs[j]; 91 nqa = ntp->t_dqinfo->dqs[j]; 92 for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { 93 blk_res_used = 0; 94 95 if (oqa[i].qt_dquot == NULL) 96 break; 97 oq = &oqa[i]; 98 nq = &nqa[i]; 99 100 if (oq->qt_blk_res && oq->qt_bcount_delta > 0) 101 blk_res_used = oq->qt_bcount_delta; 102 103 nq->qt_dquot = oq->qt_dquot; 104 nq->qt_bcount_delta = nq->qt_icount_delta = 0; 105 nq->qt_rtbcount_delta = 0; 106 107 /* 108 * Transfer whatever is left of the reservations. 109 */ 110 nq->qt_blk_res = oq->qt_blk_res - blk_res_used; 111 oq->qt_blk_res = blk_res_used; 112 113 nq->qt_rtblk_res = oq->qt_rtblk_res - 114 oq->qt_rtblk_res_used; 115 oq->qt_rtblk_res = oq->qt_rtblk_res_used; 116 117 nq->qt_ino_res = oq->qt_ino_res - oq->qt_ino_res_used; 118 oq->qt_ino_res = oq->qt_ino_res_used; 119 120 } 121 } 122 } 123 124 #ifdef CONFIG_XFS_LIVE_HOOKS 125 /* 126 * Use a static key here to reduce the overhead of quota live updates. If the 127 * compiler supports jump labels, the static branch will be replaced by a nop 128 * sled when there are no hook users. Online fsck is currently the only 129 * caller, so this is a reasonable tradeoff. 130 * 131 * Note: Patching the kernel code requires taking the cpu hotplug lock. Other 132 * parts of the kernel allocate memory with that lock held, which means that 133 * XFS callers cannot hold any locks that might be used by memory reclaim or 134 * writeback when calling the static_branch_{inc,dec} functions. 135 */ 136 DEFINE_STATIC_XFS_HOOK_SWITCH(xfs_dqtrx_hooks_switch); 137 138 void 139 xfs_dqtrx_hook_disable(void) 140 { 141 xfs_hooks_switch_off(&xfs_dqtrx_hooks_switch); 142 } 143 144 void 145 xfs_dqtrx_hook_enable(void) 146 { 147 xfs_hooks_switch_on(&xfs_dqtrx_hooks_switch); 148 } 149 150 /* Schedule a transactional dquot update on behalf of an inode. */ 151 void 152 xfs_trans_mod_ino_dquot( 153 struct xfs_trans *tp, 154 struct xfs_inode *ip, 155 struct xfs_dquot *dqp, 156 unsigned int field, 157 int64_t delta) 158 { 159 ASSERT(!xfs_is_metadir_inode(ip) || XFS_IS_DQDETACHED(ip)); 160 161 xfs_trans_mod_dquot(tp, dqp, field, delta); 162 163 if (xfs_hooks_switched_on(&xfs_dqtrx_hooks_switch)) { 164 struct xfs_mod_ino_dqtrx_params p = { 165 .tx_id = (uintptr_t)tp, 166 .ino = ip->i_ino, 167 .q_type = xfs_dquot_type(dqp), 168 .q_id = dqp->q_id, 169 .delta = delta 170 }; 171 struct xfs_quotainfo *qi = tp->t_mountp->m_quotainfo; 172 173 xfs_hooks_call(&qi->qi_mod_ino_dqtrx_hooks, field, &p); 174 } 175 } 176 177 /* Call the specified functions during a dquot counter update. */ 178 int 179 xfs_dqtrx_hook_add( 180 struct xfs_quotainfo *qi, 181 struct xfs_dqtrx_hook *hook) 182 { 183 int error; 184 185 /* 186 * Transactional dquot updates first call the mod hook when changes 187 * are attached to the transaction and then call the apply hook when 188 * those changes are committed (or canceled). 189 * 190 * The apply hook must be installed before the mod hook so that we 191 * never fail to catch the end of a quota update sequence. 192 */ 193 error = xfs_hooks_add(&qi->qi_apply_dqtrx_hooks, &hook->apply_hook); 194 if (error) 195 goto out; 196 197 error = xfs_hooks_add(&qi->qi_mod_ino_dqtrx_hooks, &hook->mod_hook); 198 if (error) 199 goto out_apply; 200 201 return 0; 202 203 out_apply: 204 xfs_hooks_del(&qi->qi_apply_dqtrx_hooks, &hook->apply_hook); 205 out: 206 return error; 207 } 208 209 /* Stop calling the specified function during a dquot counter update. */ 210 void 211 xfs_dqtrx_hook_del( 212 struct xfs_quotainfo *qi, 213 struct xfs_dqtrx_hook *hook) 214 { 215 /* 216 * The mod hook must be removed before apply hook to avoid giving the 217 * hook consumer with an incomplete update. No hooks should be running 218 * after these functions return. 219 */ 220 xfs_hooks_del(&qi->qi_mod_ino_dqtrx_hooks, &hook->mod_hook); 221 xfs_hooks_del(&qi->qi_apply_dqtrx_hooks, &hook->apply_hook); 222 } 223 224 /* Configure dquot update hook functions. */ 225 void 226 xfs_dqtrx_hook_setup( 227 struct xfs_dqtrx_hook *hook, 228 notifier_fn_t mod_fn, 229 notifier_fn_t apply_fn) 230 { 231 xfs_hook_setup(&hook->mod_hook, mod_fn); 232 xfs_hook_setup(&hook->apply_hook, apply_fn); 233 } 234 #endif /* CONFIG_XFS_LIVE_HOOKS */ 235 236 /* 237 * Wrap around mod_dquot to account for both user and group quotas. 238 */ 239 void 240 xfs_trans_mod_dquot_byino( 241 xfs_trans_t *tp, 242 xfs_inode_t *ip, 243 uint field, 244 int64_t delta) 245 { 246 xfs_mount_t *mp = tp->t_mountp; 247 248 if (!XFS_IS_QUOTA_ON(mp) || 249 xfs_is_quota_inode(&mp->m_sb, ip->i_ino)) 250 return; 251 252 ASSERT(!xfs_is_metadir_inode(ip) || XFS_IS_DQDETACHED(ip)); 253 254 if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot) 255 xfs_trans_mod_ino_dquot(tp, ip, ip->i_udquot, field, delta); 256 if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot) 257 xfs_trans_mod_ino_dquot(tp, ip, ip->i_gdquot, field, delta); 258 if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot) 259 xfs_trans_mod_ino_dquot(tp, ip, ip->i_pdquot, field, delta); 260 } 261 262 STATIC struct xfs_dqtrx * 263 xfs_trans_get_dqtrx( 264 struct xfs_trans *tp, 265 struct xfs_dquot *dqp) 266 { 267 int i; 268 struct xfs_dqtrx *qa; 269 270 switch (xfs_dquot_type(dqp)) { 271 case XFS_DQTYPE_USER: 272 qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_USR]; 273 break; 274 case XFS_DQTYPE_GROUP: 275 qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_GRP]; 276 break; 277 case XFS_DQTYPE_PROJ: 278 qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_PRJ]; 279 break; 280 default: 281 return NULL; 282 } 283 284 for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { 285 if (qa[i].qt_dquot == NULL || 286 qa[i].qt_dquot == dqp) 287 return &qa[i]; 288 } 289 290 return NULL; 291 } 292 293 /* 294 * Make the changes in the transaction structure. 295 * The moral equivalent to xfs_trans_mod_sb(). 296 * We don't touch any fields in the dquot, so we don't care 297 * if it's locked or not (most of the time it won't be). 298 */ 299 void 300 xfs_trans_mod_dquot( 301 struct xfs_trans *tp, 302 struct xfs_dquot *dqp, 303 uint field, 304 int64_t delta) 305 { 306 struct xfs_dqtrx *qtrx; 307 308 ASSERT(tp); 309 ASSERT(XFS_IS_QUOTA_ON(tp->t_mountp)); 310 qtrx = NULL; 311 312 if (!delta) 313 return; 314 315 if (tp->t_dqinfo == NULL) 316 xfs_trans_alloc_dqinfo(tp); 317 /* 318 * Find either the first free slot or the slot that belongs 319 * to this dquot. 320 */ 321 qtrx = xfs_trans_get_dqtrx(tp, dqp); 322 ASSERT(qtrx); 323 if (qtrx->qt_dquot == NULL) 324 qtrx->qt_dquot = dqp; 325 326 trace_xfs_trans_mod_dquot_before(qtrx); 327 trace_xfs_trans_mod_dquot(tp, dqp, field, delta); 328 329 switch (field) { 330 /* regular disk blk reservation */ 331 case XFS_TRANS_DQ_RES_BLKS: 332 qtrx->qt_blk_res += delta; 333 break; 334 335 /* inode reservation */ 336 case XFS_TRANS_DQ_RES_INOS: 337 qtrx->qt_ino_res += delta; 338 break; 339 340 /* disk blocks used. */ 341 case XFS_TRANS_DQ_BCOUNT: 342 qtrx->qt_bcount_delta += delta; 343 break; 344 345 case XFS_TRANS_DQ_DELBCOUNT: 346 qtrx->qt_delbcnt_delta += delta; 347 break; 348 349 /* Inode Count */ 350 case XFS_TRANS_DQ_ICOUNT: 351 if (qtrx->qt_ino_res && delta > 0) { 352 qtrx->qt_ino_res_used += delta; 353 ASSERT(qtrx->qt_ino_res >= qtrx->qt_ino_res_used); 354 } 355 qtrx->qt_icount_delta += delta; 356 break; 357 358 /* rtblk reservation */ 359 case XFS_TRANS_DQ_RES_RTBLKS: 360 qtrx->qt_rtblk_res += delta; 361 break; 362 363 /* rtblk count */ 364 case XFS_TRANS_DQ_RTBCOUNT: 365 if (qtrx->qt_rtblk_res && delta > 0) { 366 qtrx->qt_rtblk_res_used += delta; 367 ASSERT(qtrx->qt_rtblk_res >= qtrx->qt_rtblk_res_used); 368 } 369 qtrx->qt_rtbcount_delta += delta; 370 break; 371 372 case XFS_TRANS_DQ_DELRTBCOUNT: 373 qtrx->qt_delrtb_delta += delta; 374 break; 375 376 default: 377 ASSERT(0); 378 } 379 380 trace_xfs_trans_mod_dquot_after(qtrx); 381 } 382 383 384 /* 385 * Given an array of dqtrx structures, lock all the dquots associated and join 386 * them to the transaction, provided they have been modified. 387 */ 388 STATIC void 389 xfs_trans_dqlockedjoin( 390 struct xfs_trans *tp, 391 struct xfs_dqtrx *q) 392 { 393 unsigned int i; 394 ASSERT(q[0].qt_dquot != NULL); 395 if (q[1].qt_dquot == NULL) { 396 xfs_dqlock(q[0].qt_dquot); 397 xfs_trans_dqjoin(tp, q[0].qt_dquot); 398 } else if (q[2].qt_dquot == NULL) { 399 xfs_dqlock2(q[0].qt_dquot, q[1].qt_dquot); 400 xfs_trans_dqjoin(tp, q[0].qt_dquot); 401 xfs_trans_dqjoin(tp, q[1].qt_dquot); 402 } else { 403 xfs_dqlockn(q); 404 for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { 405 if (q[i].qt_dquot == NULL) 406 break; 407 xfs_trans_dqjoin(tp, q[i].qt_dquot); 408 } 409 } 410 } 411 412 /* Apply dqtrx changes to the quota reservation counters. */ 413 static inline void 414 xfs_apply_quota_reservation_deltas( 415 struct xfs_dquot_res *res, 416 uint64_t reserved, 417 int64_t res_used, 418 int64_t count_delta) 419 { 420 if (reserved != 0) { 421 /* 422 * Subtle math here: If reserved > res_used (the normal case), 423 * we're simply subtracting the unused transaction quota 424 * reservation from the dquot reservation. 425 * 426 * If, however, res_used > reserved, then we have allocated 427 * more quota blocks than were reserved for the transaction. 428 * We must add that excess to the dquot reservation since it 429 * tracks (usage + resv) and by definition we didn't reserve 430 * that excess. 431 */ 432 res->reserved -= abs(reserved - res_used); 433 } else if (count_delta != 0) { 434 /* 435 * These blks were never reserved, either inside a transaction 436 * or outside one (in a delayed allocation). Also, this isn't 437 * always a negative number since we sometimes deliberately 438 * skip quota reservations. 439 */ 440 res->reserved += count_delta; 441 } 442 } 443 444 #ifdef CONFIG_XFS_LIVE_HOOKS 445 /* Call downstream hooks now that it's time to apply dquot deltas. */ 446 static inline void 447 xfs_trans_apply_dquot_deltas_hook( 448 struct xfs_trans *tp, 449 struct xfs_dquot *dqp) 450 { 451 if (xfs_hooks_switched_on(&xfs_dqtrx_hooks_switch)) { 452 struct xfs_apply_dqtrx_params p = { 453 .tx_id = (uintptr_t)tp, 454 .q_type = xfs_dquot_type(dqp), 455 .q_id = dqp->q_id, 456 }; 457 struct xfs_quotainfo *qi = tp->t_mountp->m_quotainfo; 458 459 xfs_hooks_call(&qi->qi_apply_dqtrx_hooks, 460 XFS_APPLY_DQTRX_COMMIT, &p); 461 } 462 } 463 #else 464 # define xfs_trans_apply_dquot_deltas_hook(tp, dqp) ((void)0) 465 #endif /* CONFIG_XFS_LIVE_HOOKS */ 466 467 /* 468 * Called by xfs_trans_commit() and similar in spirit to 469 * xfs_trans_apply_sb_deltas(). 470 * Go thru all the dquots belonging to this transaction and modify the 471 * INCORE dquot to reflect the actual usages. 472 * Unreserve just the reservations done by this transaction. 473 * dquot is still left locked at exit. 474 */ 475 void 476 xfs_trans_apply_dquot_deltas( 477 struct xfs_trans *tp) 478 { 479 int i, j; 480 struct xfs_dquot *dqp; 481 struct xfs_dqtrx *qtrx, *qa; 482 int64_t totalbdelta; 483 int64_t totalrtbdelta; 484 485 if (!tp->t_dqinfo) 486 return; 487 488 ASSERT(tp->t_dqinfo); 489 for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { 490 qa = tp->t_dqinfo->dqs[j]; 491 if (qa[0].qt_dquot == NULL) 492 continue; 493 494 /* 495 * Lock all of the dquots and join them to the transaction. 496 */ 497 xfs_trans_dqlockedjoin(tp, qa); 498 499 for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { 500 uint64_t blk_res_used; 501 502 qtrx = &qa[i]; 503 /* 504 * The array of dquots is filled 505 * sequentially, not sparsely. 506 */ 507 if ((dqp = qtrx->qt_dquot) == NULL) 508 break; 509 510 ASSERT(XFS_DQ_IS_LOCKED(dqp)); 511 512 xfs_trans_apply_dquot_deltas_hook(tp, dqp); 513 514 /* 515 * adjust the actual number of blocks used 516 */ 517 518 /* 519 * The issue here is - sometimes we don't make a blkquota 520 * reservation intentionally to be fair to users 521 * (when the amount is small). On the other hand, 522 * delayed allocs do make reservations, but that's 523 * outside of a transaction, so we have no 524 * idea how much was really reserved. 525 * So, here we've accumulated delayed allocation blks and 526 * non-delay blks. The assumption is that the 527 * delayed ones are always reserved (outside of a 528 * transaction), and the others may or may not have 529 * quota reservations. 530 */ 531 totalbdelta = qtrx->qt_bcount_delta + 532 qtrx->qt_delbcnt_delta; 533 totalrtbdelta = qtrx->qt_rtbcount_delta + 534 qtrx->qt_delrtb_delta; 535 536 if (totalbdelta != 0 || totalrtbdelta != 0 || 537 qtrx->qt_icount_delta != 0) { 538 trace_xfs_trans_apply_dquot_deltas_before(dqp); 539 trace_xfs_trans_apply_dquot_deltas(qtrx); 540 } 541 542 #ifdef DEBUG 543 if (totalbdelta < 0) 544 ASSERT(dqp->q_blk.count >= -totalbdelta); 545 546 if (totalrtbdelta < 0) 547 ASSERT(dqp->q_rtb.count >= -totalrtbdelta); 548 549 if (qtrx->qt_icount_delta < 0) 550 ASSERT(dqp->q_ino.count >= -qtrx->qt_icount_delta); 551 #endif 552 if (totalbdelta) 553 dqp->q_blk.count += totalbdelta; 554 555 if (qtrx->qt_icount_delta) 556 dqp->q_ino.count += qtrx->qt_icount_delta; 557 558 if (totalrtbdelta) 559 dqp->q_rtb.count += totalrtbdelta; 560 561 if (totalbdelta != 0 || totalrtbdelta != 0 || 562 qtrx->qt_icount_delta != 0) 563 trace_xfs_trans_apply_dquot_deltas_after(dqp); 564 565 /* 566 * Get any default limits in use. 567 * Start/reset the timer(s) if needed. 568 */ 569 if (dqp->q_id) { 570 xfs_qm_adjust_dqlimits(dqp); 571 xfs_qm_adjust_dqtimers(dqp); 572 } 573 574 dqp->q_flags |= XFS_DQFLAG_DIRTY; 575 /* 576 * add this to the list of items to get logged 577 */ 578 xfs_trans_log_dquot(tp, dqp); 579 /* 580 * Take off what's left of the original reservation. 581 * In case of delayed allocations, there's no 582 * reservation that a transaction structure knows of. 583 */ 584 blk_res_used = max_t(int64_t, 0, qtrx->qt_bcount_delta); 585 xfs_apply_quota_reservation_deltas(&dqp->q_blk, 586 qtrx->qt_blk_res, blk_res_used, 587 qtrx->qt_bcount_delta); 588 589 /* 590 * Adjust the RT reservation. 591 */ 592 xfs_apply_quota_reservation_deltas(&dqp->q_rtb, 593 qtrx->qt_rtblk_res, 594 qtrx->qt_rtblk_res_used, 595 qtrx->qt_rtbcount_delta); 596 597 /* 598 * Adjust the inode reservation. 599 */ 600 ASSERT(qtrx->qt_ino_res >= qtrx->qt_ino_res_used); 601 xfs_apply_quota_reservation_deltas(&dqp->q_ino, 602 qtrx->qt_ino_res, 603 qtrx->qt_ino_res_used, 604 qtrx->qt_icount_delta); 605 606 ASSERT(dqp->q_blk.reserved >= dqp->q_blk.count); 607 ASSERT(dqp->q_ino.reserved >= dqp->q_ino.count); 608 ASSERT(dqp->q_rtb.reserved >= dqp->q_rtb.count); 609 } 610 } 611 } 612 613 #ifdef CONFIG_XFS_LIVE_HOOKS 614 /* Call downstream hooks now that it's time to cancel dquot deltas. */ 615 static inline void 616 xfs_trans_unreserve_and_mod_dquots_hook( 617 struct xfs_trans *tp, 618 struct xfs_dquot *dqp) 619 { 620 if (xfs_hooks_switched_on(&xfs_dqtrx_hooks_switch)) { 621 struct xfs_apply_dqtrx_params p = { 622 .tx_id = (uintptr_t)tp, 623 .q_type = xfs_dquot_type(dqp), 624 .q_id = dqp->q_id, 625 }; 626 struct xfs_quotainfo *qi = tp->t_mountp->m_quotainfo; 627 628 xfs_hooks_call(&qi->qi_apply_dqtrx_hooks, 629 XFS_APPLY_DQTRX_UNRESERVE, &p); 630 } 631 } 632 #else 633 # define xfs_trans_unreserve_and_mod_dquots_hook(tp, dqp) ((void)0) 634 #endif /* CONFIG_XFS_LIVE_HOOKS */ 635 636 /* 637 * Release the reservations, and adjust the dquots accordingly. 638 * This is called only when the transaction is being aborted. If by 639 * any chance we have done dquot modifications incore (ie. deltas) already, 640 * we simply throw those away, since that's the expected behavior 641 * when a transaction is curtailed without a commit. 642 */ 643 void 644 xfs_trans_unreserve_and_mod_dquots( 645 struct xfs_trans *tp) 646 { 647 int i, j; 648 struct xfs_dquot *dqp; 649 struct xfs_dqtrx *qtrx, *qa; 650 bool locked; 651 652 if (!tp->t_dqinfo) 653 return; 654 655 for (j = 0; j < XFS_QM_TRANS_DQTYPES; j++) { 656 qa = tp->t_dqinfo->dqs[j]; 657 658 for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) { 659 qtrx = &qa[i]; 660 /* 661 * We assume that the array of dquots is filled 662 * sequentially, not sparsely. 663 */ 664 if ((dqp = qtrx->qt_dquot) == NULL) 665 break; 666 667 xfs_trans_unreserve_and_mod_dquots_hook(tp, dqp); 668 669 /* 670 * Unreserve the original reservation. We don't care 671 * about the number of blocks used field, or deltas. 672 * Also we don't bother to zero the fields. 673 */ 674 locked = false; 675 if (qtrx->qt_blk_res) { 676 xfs_dqlock(dqp); 677 locked = true; 678 dqp->q_blk.reserved -= 679 (xfs_qcnt_t)qtrx->qt_blk_res; 680 } 681 if (qtrx->qt_ino_res) { 682 if (!locked) { 683 xfs_dqlock(dqp); 684 locked = true; 685 } 686 dqp->q_ino.reserved -= 687 (xfs_qcnt_t)qtrx->qt_ino_res; 688 } 689 690 if (qtrx->qt_rtblk_res) { 691 if (!locked) { 692 xfs_dqlock(dqp); 693 locked = true; 694 } 695 dqp->q_rtb.reserved -= 696 (xfs_qcnt_t)qtrx->qt_rtblk_res; 697 } 698 if (locked) 699 xfs_dqunlock(dqp); 700 701 } 702 } 703 } 704 705 STATIC void 706 xfs_quota_warn( 707 struct xfs_mount *mp, 708 struct xfs_dquot *dqp, 709 int type) 710 { 711 enum quota_type qtype; 712 713 switch (xfs_dquot_type(dqp)) { 714 case XFS_DQTYPE_PROJ: 715 qtype = PRJQUOTA; 716 break; 717 case XFS_DQTYPE_USER: 718 qtype = USRQUOTA; 719 break; 720 case XFS_DQTYPE_GROUP: 721 qtype = GRPQUOTA; 722 break; 723 default: 724 return; 725 } 726 727 quota_send_warning(make_kqid(&init_user_ns, qtype, dqp->q_id), 728 mp->m_super->s_dev, type); 729 } 730 731 /* 732 * Decide if we can make an additional reservation against a quota resource. 733 * Returns an inode QUOTA_NL_ warning code and whether or not it's fatal. 734 * 735 * Note that we assume that the numeric difference between the inode and block 736 * warning codes will always be 3 since it's userspace ABI now, and will never 737 * decrease the quota reservation, so the *BELOW messages are irrelevant. 738 */ 739 static inline int 740 xfs_dqresv_check( 741 struct xfs_dquot_res *res, 742 struct xfs_quota_limits *qlim, 743 int64_t delta, 744 bool *fatal) 745 { 746 xfs_qcnt_t hardlimit = res->hardlimit; 747 xfs_qcnt_t softlimit = res->softlimit; 748 xfs_qcnt_t total_count = res->reserved + delta; 749 750 BUILD_BUG_ON(QUOTA_NL_BHARDWARN != QUOTA_NL_IHARDWARN + 3); 751 BUILD_BUG_ON(QUOTA_NL_BSOFTLONGWARN != QUOTA_NL_ISOFTLONGWARN + 3); 752 BUILD_BUG_ON(QUOTA_NL_BSOFTWARN != QUOTA_NL_ISOFTWARN + 3); 753 754 *fatal = false; 755 if (delta <= 0) 756 return QUOTA_NL_NOWARN; 757 758 if (!hardlimit) 759 hardlimit = qlim->hard; 760 if (!softlimit) 761 softlimit = qlim->soft; 762 763 if (hardlimit && total_count > hardlimit) { 764 *fatal = true; 765 return QUOTA_NL_IHARDWARN; 766 } 767 768 if (softlimit && total_count > softlimit) { 769 time64_t now = ktime_get_real_seconds(); 770 771 if (res->timer != 0 && now > res->timer) { 772 *fatal = true; 773 return QUOTA_NL_ISOFTLONGWARN; 774 } 775 776 return QUOTA_NL_ISOFTWARN; 777 } 778 779 return QUOTA_NL_NOWARN; 780 } 781 782 /* 783 * This reserves disk blocks and inodes against a dquot. 784 * Flags indicate if the dquot is to be locked here and also 785 * if the blk reservation is for RT or regular blocks. 786 * Sending in XFS_QMOPT_FORCE_RES flag skips the quota check. 787 */ 788 STATIC int 789 xfs_trans_dqresv( 790 struct xfs_trans *tp, 791 struct xfs_mount *mp, 792 struct xfs_dquot *dqp, 793 int64_t nblks, 794 long ninos, 795 uint flags) 796 { 797 struct xfs_quotainfo *q = mp->m_quotainfo; 798 struct xfs_def_quota *defq; 799 struct xfs_dquot_res *blkres; 800 struct xfs_quota_limits *qlim; 801 802 xfs_dqlock(dqp); 803 804 defq = xfs_get_defquota(q, xfs_dquot_type(dqp)); 805 806 if (flags & XFS_TRANS_DQ_RES_BLKS) { 807 blkres = &dqp->q_blk; 808 qlim = &defq->blk; 809 } else { 810 blkres = &dqp->q_rtb; 811 qlim = &defq->rtb; 812 } 813 814 if ((flags & XFS_QMOPT_FORCE_RES) == 0 && dqp->q_id && 815 xfs_dquot_is_enforced(dqp)) { 816 int quota_nl; 817 bool fatal; 818 819 /* 820 * dquot is locked already. See if we'd go over the hardlimit 821 * or exceed the timelimit if we'd reserve resources. 822 */ 823 quota_nl = xfs_dqresv_check(blkres, qlim, nblks, &fatal); 824 if (quota_nl != QUOTA_NL_NOWARN) { 825 /* 826 * Quota block warning codes are 3 more than the inode 827 * codes, which we check above. 828 */ 829 xfs_quota_warn(mp, dqp, quota_nl + 3); 830 if (fatal) 831 goto error_return; 832 } 833 834 quota_nl = xfs_dqresv_check(&dqp->q_ino, &defq->ino, ninos, 835 &fatal); 836 if (quota_nl != QUOTA_NL_NOWARN) { 837 xfs_quota_warn(mp, dqp, quota_nl); 838 if (fatal) 839 goto error_return; 840 } 841 } 842 843 /* 844 * Change the reservation, but not the actual usage. 845 * Note that q_blk.reserved = q_blk.count + resv 846 */ 847 blkres->reserved += (xfs_qcnt_t)nblks; 848 dqp->q_ino.reserved += (xfs_qcnt_t)ninos; 849 850 /* 851 * note the reservation amt in the trans struct too, 852 * so that the transaction knows how much was reserved by 853 * it against this particular dquot. 854 * We don't do this when we are reserving for a delayed allocation, 855 * because we don't have the luxury of a transaction envelope then. 856 */ 857 if (tp) { 858 ASSERT(flags & XFS_QMOPT_RESBLK_MASK); 859 xfs_trans_mod_dquot(tp, dqp, flags & XFS_QMOPT_RESBLK_MASK, 860 nblks); 861 xfs_trans_mod_dquot(tp, dqp, XFS_TRANS_DQ_RES_INOS, ninos); 862 } 863 864 if (XFS_IS_CORRUPT(mp, dqp->q_blk.reserved < dqp->q_blk.count) || 865 XFS_IS_CORRUPT(mp, dqp->q_rtb.reserved < dqp->q_rtb.count) || 866 XFS_IS_CORRUPT(mp, dqp->q_ino.reserved < dqp->q_ino.count)) 867 goto error_corrupt; 868 869 xfs_dqunlock(dqp); 870 return 0; 871 872 error_return: 873 xfs_dqunlock(dqp); 874 if (xfs_dquot_type(dqp) == XFS_DQTYPE_PROJ) 875 return -ENOSPC; 876 return -EDQUOT; 877 error_corrupt: 878 xfs_dqunlock(dqp); 879 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); 880 xfs_fs_mark_sick(mp, XFS_SICK_FS_QUOTACHECK); 881 return -EFSCORRUPTED; 882 } 883 884 885 /* 886 * Given dquot(s), make disk block and/or inode reservations against them. 887 * The fact that this does the reservation against user, group and 888 * project quotas is important, because this follows a all-or-nothing 889 * approach. 890 * 891 * flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown. 892 * XFS_QMOPT_ENOSPC returns ENOSPC not EDQUOT. Used by pquota. 893 * XFS_TRANS_DQ_RES_BLKS reserves regular disk blocks 894 * XFS_TRANS_DQ_RES_RTBLKS reserves realtime disk blocks 895 * dquots are unlocked on return, if they were not locked by caller. 896 */ 897 int 898 xfs_trans_reserve_quota_bydquots( 899 struct xfs_trans *tp, 900 struct xfs_mount *mp, 901 struct xfs_dquot *udqp, 902 struct xfs_dquot *gdqp, 903 struct xfs_dquot *pdqp, 904 int64_t nblks, 905 long ninos, 906 uint flags) 907 { 908 int error; 909 910 if (!XFS_IS_QUOTA_ON(mp)) 911 return 0; 912 913 ASSERT(flags & XFS_QMOPT_RESBLK_MASK); 914 915 if (udqp) { 916 error = xfs_trans_dqresv(tp, mp, udqp, nblks, ninos, flags); 917 if (error) 918 return error; 919 } 920 921 if (gdqp) { 922 error = xfs_trans_dqresv(tp, mp, gdqp, nblks, ninos, flags); 923 if (error) 924 goto unwind_usr; 925 } 926 927 if (pdqp) { 928 error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags); 929 if (error) 930 goto unwind_grp; 931 } 932 933 /* 934 * Didn't change anything critical, so, no need to log 935 */ 936 return 0; 937 938 unwind_grp: 939 flags |= XFS_QMOPT_FORCE_RES; 940 if (gdqp) 941 xfs_trans_dqresv(tp, mp, gdqp, -nblks, -ninos, flags); 942 unwind_usr: 943 flags |= XFS_QMOPT_FORCE_RES; 944 if (udqp) 945 xfs_trans_dqresv(tp, mp, udqp, -nblks, -ninos, flags); 946 return error; 947 } 948 949 950 /* 951 * Lock the dquot and change the reservation if we can. 952 * This doesn't change the actual usage, just the reservation. 953 * The inode sent in is locked. 954 */ 955 int 956 xfs_trans_reserve_quota_nblks( 957 struct xfs_trans *tp, 958 struct xfs_inode *ip, 959 int64_t dblocks, 960 int64_t rblocks, 961 bool force) 962 { 963 struct xfs_mount *mp = ip->i_mount; 964 unsigned int qflags = 0; 965 int error; 966 967 if (!XFS_IS_QUOTA_ON(mp)) 968 return 0; 969 if (xfs_is_metadir_inode(ip)) 970 return 0; 971 972 ASSERT(!xfs_is_quota_inode(&mp->m_sb, ip->i_ino)); 973 xfs_assert_ilocked(ip, XFS_ILOCK_EXCL); 974 975 if (force) 976 qflags |= XFS_QMOPT_FORCE_RES; 977 978 /* Reserve data device quota against the inode's dquots. */ 979 error = xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, 980 ip->i_gdquot, ip->i_pdquot, dblocks, 0, 981 XFS_QMOPT_RES_REGBLKS | qflags); 982 if (error) 983 return error; 984 985 /* Do the same but for realtime blocks. */ 986 error = xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, 987 ip->i_gdquot, ip->i_pdquot, rblocks, 0, 988 XFS_QMOPT_RES_RTBLKS | qflags); 989 if (error) { 990 xfs_trans_reserve_quota_bydquots(tp, mp, ip->i_udquot, 991 ip->i_gdquot, ip->i_pdquot, -dblocks, 0, 992 XFS_QMOPT_RES_REGBLKS); 993 return error; 994 } 995 996 return 0; 997 } 998 999 /* Change the quota reservations for an inode creation activity. */ 1000 int 1001 xfs_trans_reserve_quota_icreate( 1002 struct xfs_trans *tp, 1003 struct xfs_dquot *udqp, 1004 struct xfs_dquot *gdqp, 1005 struct xfs_dquot *pdqp, 1006 int64_t dblocks) 1007 { 1008 struct xfs_mount *mp = tp->t_mountp; 1009 1010 if (!XFS_IS_QUOTA_ON(mp)) 1011 return 0; 1012 1013 return xfs_trans_reserve_quota_bydquots(tp, mp, udqp, gdqp, pdqp, 1014 dblocks, 1, XFS_QMOPT_RES_REGBLKS); 1015 } 1016 1017 STATIC void 1018 xfs_trans_alloc_dqinfo( 1019 xfs_trans_t *tp) 1020 { 1021 tp->t_dqinfo = kmem_cache_zalloc(xfs_dqtrx_cache, 1022 GFP_KERNEL | __GFP_NOFAIL); 1023 } 1024 1025 void 1026 xfs_trans_free_dqinfo( 1027 xfs_trans_t *tp) 1028 { 1029 if (!tp->t_dqinfo) 1030 return; 1031 kmem_cache_free(xfs_dqtrx_cache, tp->t_dqinfo); 1032 tp->t_dqinfo = NULL; 1033 } 1034 1035 int 1036 xfs_quota_reserve_blkres( 1037 struct xfs_inode *ip, 1038 int64_t blocks) 1039 { 1040 if (XFS_IS_REALTIME_INODE(ip)) 1041 return xfs_trans_reserve_quota_nblks(NULL, ip, 0, blocks, 1042 false); 1043 return xfs_trans_reserve_quota_nblks(NULL, ip, blocks, 0, false); 1044 } 1045