1 /* 2 * Copyright (c) 2000-2005 Silicon Graphics, Inc. 3 * All Rights Reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it would be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 #include "xfs.h" 19 #include "xfs_fs.h" 20 #include "xfs_bit.h" 21 #include "xfs_log.h" 22 #include "xfs_inum.h" 23 #include "xfs_trans.h" 24 #include "xfs_sb.h" 25 #include "xfs_ag.h" 26 #include "xfs_alloc.h" 27 #include "xfs_quota.h" 28 #include "xfs_mount.h" 29 #include "xfs_bmap_btree.h" 30 #include "xfs_ialloc_btree.h" 31 #include "xfs_dinode.h" 32 #include "xfs_inode.h" 33 #include "xfs_ialloc.h" 34 #include "xfs_itable.h" 35 #include "xfs_rtalloc.h" 36 #include "xfs_error.h" 37 #include "xfs_bmap.h" 38 #include "xfs_attr.h" 39 #include "xfs_buf_item.h" 40 #include "xfs_trans_space.h" 41 #include "xfs_utils.h" 42 #include "xfs_qm.h" 43 #include "xfs_trace.h" 44 45 /* 46 * The global quota manager. There is only one of these for the entire 47 * system, _not_ one per file system. XQM keeps track of the overall 48 * quota functionality, including maintaining the freelist and hash 49 * tables of dquots. 50 */ 51 struct mutex xfs_Gqm_lock; 52 struct xfs_qm *xfs_Gqm; 53 uint ndquot; 54 55 kmem_zone_t *qm_dqzone; 56 kmem_zone_t *qm_dqtrxzone; 57 58 STATIC void xfs_qm_list_init(xfs_dqlist_t *, char *, int); 59 STATIC void xfs_qm_list_destroy(xfs_dqlist_t *); 60 61 STATIC int xfs_qm_init_quotainos(xfs_mount_t *); 62 STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); 63 STATIC int xfs_qm_shake(struct shrinker *, struct shrink_control *); 64 65 static struct shrinker xfs_qm_shaker = { 66 .shrink = xfs_qm_shake, 67 .seeks = DEFAULT_SEEKS, 68 }; 69 70 /* 71 * Initialize the XQM structure. 72 * Note that there is not one quota manager per file system. 73 */ 74 STATIC struct xfs_qm * 75 xfs_Gqm_init(void) 76 { 77 xfs_dqhash_t *udqhash, *gdqhash; 78 xfs_qm_t *xqm; 79 size_t hsize; 80 uint i; 81 82 /* 83 * Initialize the dquot hash tables. 84 */ 85 udqhash = kmem_zalloc_greedy(&hsize, 86 XFS_QM_HASHSIZE_LOW * sizeof(xfs_dqhash_t), 87 XFS_QM_HASHSIZE_HIGH * sizeof(xfs_dqhash_t)); 88 if (!udqhash) 89 goto out; 90 91 gdqhash = kmem_zalloc_large(hsize); 92 if (!gdqhash) 93 goto out_free_udqhash; 94 95 hsize /= sizeof(xfs_dqhash_t); 96 ndquot = hsize << 8; 97 98 xqm = kmem_zalloc(sizeof(xfs_qm_t), KM_SLEEP); 99 xqm->qm_dqhashmask = hsize - 1; 100 xqm->qm_usr_dqhtable = udqhash; 101 xqm->qm_grp_dqhtable = gdqhash; 102 ASSERT(xqm->qm_usr_dqhtable != NULL); 103 ASSERT(xqm->qm_grp_dqhtable != NULL); 104 105 for (i = 0; i < hsize; i++) { 106 xfs_qm_list_init(&(xqm->qm_usr_dqhtable[i]), "uxdqh", i); 107 xfs_qm_list_init(&(xqm->qm_grp_dqhtable[i]), "gxdqh", i); 108 } 109 110 /* 111 * Freelist of all dquots of all file systems 112 */ 113 INIT_LIST_HEAD(&xqm->qm_dqfrlist); 114 xqm->qm_dqfrlist_cnt = 0; 115 mutex_init(&xqm->qm_dqfrlist_lock); 116 117 /* 118 * dquot zone. we register our own low-memory callback. 119 */ 120 if (!qm_dqzone) { 121 xqm->qm_dqzone = kmem_zone_init(sizeof(xfs_dquot_t), 122 "xfs_dquots"); 123 qm_dqzone = xqm->qm_dqzone; 124 } else 125 xqm->qm_dqzone = qm_dqzone; 126 127 register_shrinker(&xfs_qm_shaker); 128 129 /* 130 * The t_dqinfo portion of transactions. 131 */ 132 if (!qm_dqtrxzone) { 133 xqm->qm_dqtrxzone = kmem_zone_init(sizeof(xfs_dquot_acct_t), 134 "xfs_dqtrx"); 135 qm_dqtrxzone = xqm->qm_dqtrxzone; 136 } else 137 xqm->qm_dqtrxzone = qm_dqtrxzone; 138 139 atomic_set(&xqm->qm_totaldquots, 0); 140 xqm->qm_dqfree_ratio = XFS_QM_DQFREE_RATIO; 141 xqm->qm_nrefs = 0; 142 return xqm; 143 144 out_free_udqhash: 145 kmem_free_large(udqhash); 146 out: 147 return NULL; 148 } 149 150 /* 151 * Destroy the global quota manager when its reference count goes to zero. 152 */ 153 STATIC void 154 xfs_qm_destroy( 155 struct xfs_qm *xqm) 156 { 157 struct xfs_dquot *dqp, *n; 158 int hsize, i; 159 160 ASSERT(xqm != NULL); 161 ASSERT(xqm->qm_nrefs == 0); 162 unregister_shrinker(&xfs_qm_shaker); 163 hsize = xqm->qm_dqhashmask + 1; 164 for (i = 0; i < hsize; i++) { 165 xfs_qm_list_destroy(&(xqm->qm_usr_dqhtable[i])); 166 xfs_qm_list_destroy(&(xqm->qm_grp_dqhtable[i])); 167 } 168 kmem_free_large(xqm->qm_usr_dqhtable); 169 kmem_free_large(xqm->qm_grp_dqhtable); 170 xqm->qm_usr_dqhtable = NULL; 171 xqm->qm_grp_dqhtable = NULL; 172 xqm->qm_dqhashmask = 0; 173 174 /* frlist cleanup */ 175 mutex_lock(&xqm->qm_dqfrlist_lock); 176 list_for_each_entry_safe(dqp, n, &xqm->qm_dqfrlist, q_freelist) { 177 xfs_dqlock(dqp); 178 list_del_init(&dqp->q_freelist); 179 xfs_Gqm->qm_dqfrlist_cnt--; 180 xfs_dqunlock(dqp); 181 xfs_qm_dqdestroy(dqp); 182 } 183 mutex_unlock(&xqm->qm_dqfrlist_lock); 184 mutex_destroy(&xqm->qm_dqfrlist_lock); 185 kmem_free(xqm); 186 } 187 188 /* 189 * Called at mount time to let XQM know that another file system is 190 * starting quotas. This isn't crucial information as the individual mount 191 * structures are pretty independent, but it helps the XQM keep a 192 * global view of what's going on. 193 */ 194 /* ARGSUSED */ 195 STATIC int 196 xfs_qm_hold_quotafs_ref( 197 struct xfs_mount *mp) 198 { 199 /* 200 * Need to lock the xfs_Gqm structure for things like this. For example, 201 * the structure could disappear between the entry to this routine and 202 * a HOLD operation if not locked. 203 */ 204 mutex_lock(&xfs_Gqm_lock); 205 206 if (!xfs_Gqm) { 207 xfs_Gqm = xfs_Gqm_init(); 208 if (!xfs_Gqm) { 209 mutex_unlock(&xfs_Gqm_lock); 210 return ENOMEM; 211 } 212 } 213 214 /* 215 * We can keep a list of all filesystems with quotas mounted for 216 * debugging and statistical purposes, but ... 217 * Just take a reference and get out. 218 */ 219 xfs_Gqm->qm_nrefs++; 220 mutex_unlock(&xfs_Gqm_lock); 221 222 return 0; 223 } 224 225 226 /* 227 * Release the reference that a filesystem took at mount time, 228 * so that we know when we need to destroy the entire quota manager. 229 */ 230 /* ARGSUSED */ 231 STATIC void 232 xfs_qm_rele_quotafs_ref( 233 struct xfs_mount *mp) 234 { 235 xfs_dquot_t *dqp, *n; 236 237 ASSERT(xfs_Gqm); 238 ASSERT(xfs_Gqm->qm_nrefs > 0); 239 240 /* 241 * Go thru the freelist and destroy all inactive dquots. 242 */ 243 mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); 244 245 list_for_each_entry_safe(dqp, n, &xfs_Gqm->qm_dqfrlist, q_freelist) { 246 xfs_dqlock(dqp); 247 if (dqp->dq_flags & XFS_DQ_INACTIVE) { 248 ASSERT(dqp->q_mount == NULL); 249 ASSERT(! XFS_DQ_IS_DIRTY(dqp)); 250 ASSERT(list_empty(&dqp->q_hashlist)); 251 ASSERT(list_empty(&dqp->q_mplist)); 252 list_del_init(&dqp->q_freelist); 253 xfs_Gqm->qm_dqfrlist_cnt--; 254 xfs_dqunlock(dqp); 255 xfs_qm_dqdestroy(dqp); 256 } else { 257 xfs_dqunlock(dqp); 258 } 259 } 260 mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); 261 262 /* 263 * Destroy the entire XQM. If somebody mounts with quotaon, this'll 264 * be restarted. 265 */ 266 mutex_lock(&xfs_Gqm_lock); 267 if (--xfs_Gqm->qm_nrefs == 0) { 268 xfs_qm_destroy(xfs_Gqm); 269 xfs_Gqm = NULL; 270 } 271 mutex_unlock(&xfs_Gqm_lock); 272 } 273 274 /* 275 * Just destroy the quotainfo structure. 276 */ 277 void 278 xfs_qm_unmount( 279 struct xfs_mount *mp) 280 { 281 if (mp->m_quotainfo) { 282 xfs_qm_dqpurge_all(mp, XFS_QMOPT_QUOTALL); 283 xfs_qm_destroy_quotainfo(mp); 284 } 285 } 286 287 288 /* 289 * This is called from xfs_mountfs to start quotas and initialize all 290 * necessary data structures like quotainfo. This is also responsible for 291 * running a quotacheck as necessary. We are guaranteed that the superblock 292 * is consistently read in at this point. 293 * 294 * If we fail here, the mount will continue with quota turned off. We don't 295 * need to inidicate success or failure at all. 296 */ 297 void 298 xfs_qm_mount_quotas( 299 xfs_mount_t *mp) 300 { 301 int error = 0; 302 uint sbf; 303 304 /* 305 * If quotas on realtime volumes is not supported, we disable 306 * quotas immediately. 307 */ 308 if (mp->m_sb.sb_rextents) { 309 xfs_notice(mp, "Cannot turn on quotas for realtime filesystem"); 310 mp->m_qflags = 0; 311 goto write_changes; 312 } 313 314 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 315 316 /* 317 * Allocate the quotainfo structure inside the mount struct, and 318 * create quotainode(s), and change/rev superblock if necessary. 319 */ 320 error = xfs_qm_init_quotainfo(mp); 321 if (error) { 322 /* 323 * We must turn off quotas. 324 */ 325 ASSERT(mp->m_quotainfo == NULL); 326 mp->m_qflags = 0; 327 goto write_changes; 328 } 329 /* 330 * If any of the quotas are not consistent, do a quotacheck. 331 */ 332 if (XFS_QM_NEED_QUOTACHECK(mp)) { 333 error = xfs_qm_quotacheck(mp); 334 if (error) { 335 /* Quotacheck failed and disabled quotas. */ 336 return; 337 } 338 } 339 /* 340 * If one type of quotas is off, then it will lose its 341 * quotachecked status, since we won't be doing accounting for 342 * that type anymore. 343 */ 344 if (!XFS_IS_UQUOTA_ON(mp)) 345 mp->m_qflags &= ~XFS_UQUOTA_CHKD; 346 if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) 347 mp->m_qflags &= ~XFS_OQUOTA_CHKD; 348 349 write_changes: 350 /* 351 * We actually don't have to acquire the m_sb_lock at all. 352 * This can only be called from mount, and that's single threaded. XXX 353 */ 354 spin_lock(&mp->m_sb_lock); 355 sbf = mp->m_sb.sb_qflags; 356 mp->m_sb.sb_qflags = mp->m_qflags & XFS_MOUNT_QUOTA_ALL; 357 spin_unlock(&mp->m_sb_lock); 358 359 if (sbf != (mp->m_qflags & XFS_MOUNT_QUOTA_ALL)) { 360 if (xfs_qm_write_sb_changes(mp, XFS_SB_QFLAGS)) { 361 /* 362 * We could only have been turning quotas off. 363 * We aren't in very good shape actually because 364 * the incore structures are convinced that quotas are 365 * off, but the on disk superblock doesn't know that ! 366 */ 367 ASSERT(!(XFS_IS_QUOTA_RUNNING(mp))); 368 xfs_alert(mp, "%s: Superblock update failed!", 369 __func__); 370 } 371 } 372 373 if (error) { 374 xfs_warn(mp, "Failed to initialize disk quotas."); 375 return; 376 } 377 } 378 379 /* 380 * Called from the vfsops layer. 381 */ 382 void 383 xfs_qm_unmount_quotas( 384 xfs_mount_t *mp) 385 { 386 /* 387 * Release the dquots that root inode, et al might be holding, 388 * before we flush quotas and blow away the quotainfo structure. 389 */ 390 ASSERT(mp->m_rootip); 391 xfs_qm_dqdetach(mp->m_rootip); 392 if (mp->m_rbmip) 393 xfs_qm_dqdetach(mp->m_rbmip); 394 if (mp->m_rsumip) 395 xfs_qm_dqdetach(mp->m_rsumip); 396 397 /* 398 * Release the quota inodes. 399 */ 400 if (mp->m_quotainfo) { 401 if (mp->m_quotainfo->qi_uquotaip) { 402 IRELE(mp->m_quotainfo->qi_uquotaip); 403 mp->m_quotainfo->qi_uquotaip = NULL; 404 } 405 if (mp->m_quotainfo->qi_gquotaip) { 406 IRELE(mp->m_quotainfo->qi_gquotaip); 407 mp->m_quotainfo->qi_gquotaip = NULL; 408 } 409 } 410 } 411 412 /* 413 * Flush all dquots of the given file system to disk. The dquots are 414 * _not_ purged from memory here, just their data written to disk. 415 */ 416 STATIC int 417 xfs_qm_dqflush_all( 418 struct xfs_mount *mp, 419 int sync_mode) 420 { 421 struct xfs_quotainfo *q = mp->m_quotainfo; 422 int recl; 423 struct xfs_dquot *dqp; 424 int error; 425 426 if (!q) 427 return 0; 428 again: 429 mutex_lock(&q->qi_dqlist_lock); 430 list_for_each_entry(dqp, &q->qi_dqlist, q_mplist) { 431 xfs_dqlock(dqp); 432 if (! XFS_DQ_IS_DIRTY(dqp)) { 433 xfs_dqunlock(dqp); 434 continue; 435 } 436 437 /* XXX a sentinel would be better */ 438 recl = q->qi_dqreclaims; 439 if (!xfs_dqflock_nowait(dqp)) { 440 /* 441 * If we can't grab the flush lock then check 442 * to see if the dquot has been flushed delayed 443 * write. If so, grab its buffer and send it 444 * out immediately. We'll be able to acquire 445 * the flush lock when the I/O completes. 446 */ 447 xfs_qm_dqflock_pushbuf_wait(dqp); 448 } 449 /* 450 * Let go of the mplist lock. We don't want to hold it 451 * across a disk write. 452 */ 453 mutex_unlock(&q->qi_dqlist_lock); 454 error = xfs_qm_dqflush(dqp, sync_mode); 455 xfs_dqunlock(dqp); 456 if (error) 457 return error; 458 459 mutex_lock(&q->qi_dqlist_lock); 460 if (recl != q->qi_dqreclaims) { 461 mutex_unlock(&q->qi_dqlist_lock); 462 /* XXX restart limit */ 463 goto again; 464 } 465 } 466 467 mutex_unlock(&q->qi_dqlist_lock); 468 /* return ! busy */ 469 return 0; 470 } 471 /* 472 * Release the group dquot pointers the user dquots may be 473 * carrying around as a hint. mplist is locked on entry and exit. 474 */ 475 STATIC void 476 xfs_qm_detach_gdquots( 477 struct xfs_mount *mp) 478 { 479 struct xfs_quotainfo *q = mp->m_quotainfo; 480 struct xfs_dquot *dqp, *gdqp; 481 int nrecl; 482 483 again: 484 ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); 485 list_for_each_entry(dqp, &q->qi_dqlist, q_mplist) { 486 xfs_dqlock(dqp); 487 if ((gdqp = dqp->q_gdquot)) { 488 xfs_dqlock(gdqp); 489 dqp->q_gdquot = NULL; 490 } 491 xfs_dqunlock(dqp); 492 493 if (gdqp) { 494 /* 495 * Can't hold the mplist lock across a dqput. 496 * XXXmust convert to marker based iterations here. 497 */ 498 nrecl = q->qi_dqreclaims; 499 mutex_unlock(&q->qi_dqlist_lock); 500 xfs_qm_dqput(gdqp); 501 502 mutex_lock(&q->qi_dqlist_lock); 503 if (nrecl != q->qi_dqreclaims) 504 goto again; 505 } 506 } 507 } 508 509 /* 510 * Go through all the incore dquots of this file system and take them 511 * off the mplist and hashlist, if the dquot type matches the dqtype 512 * parameter. This is used when turning off quota accounting for 513 * users and/or groups, as well as when the filesystem is unmounting. 514 */ 515 STATIC int 516 xfs_qm_dqpurge_int( 517 struct xfs_mount *mp, 518 uint flags) 519 { 520 struct xfs_quotainfo *q = mp->m_quotainfo; 521 struct xfs_dquot *dqp, *n; 522 uint dqtype; 523 int nrecl; 524 int nmisses; 525 526 if (!q) 527 return 0; 528 529 dqtype = (flags & XFS_QMOPT_UQUOTA) ? XFS_DQ_USER : 0; 530 dqtype |= (flags & XFS_QMOPT_PQUOTA) ? XFS_DQ_PROJ : 0; 531 dqtype |= (flags & XFS_QMOPT_GQUOTA) ? XFS_DQ_GROUP : 0; 532 533 mutex_lock(&q->qi_dqlist_lock); 534 535 /* 536 * In the first pass through all incore dquots of this filesystem, 537 * we release the group dquot pointers the user dquots may be 538 * carrying around as a hint. We need to do this irrespective of 539 * what's being turned off. 540 */ 541 xfs_qm_detach_gdquots(mp); 542 543 again: 544 nmisses = 0; 545 ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); 546 /* 547 * Try to get rid of all of the unwanted dquots. The idea is to 548 * get them off mplist and hashlist, but leave them on freelist. 549 */ 550 list_for_each_entry_safe(dqp, n, &q->qi_dqlist, q_mplist) { 551 /* 552 * It's OK to look at the type without taking dqlock here. 553 * We're holding the mplist lock here, and that's needed for 554 * a dqreclaim. 555 */ 556 if ((dqp->dq_flags & dqtype) == 0) 557 continue; 558 559 if (!mutex_trylock(&dqp->q_hash->qh_lock)) { 560 nrecl = q->qi_dqreclaims; 561 mutex_unlock(&q->qi_dqlist_lock); 562 mutex_lock(&dqp->q_hash->qh_lock); 563 mutex_lock(&q->qi_dqlist_lock); 564 565 /* 566 * XXXTheoretically, we can get into a very long 567 * ping pong game here. 568 * No one can be adding dquots to the mplist at 569 * this point, but somebody might be taking things off. 570 */ 571 if (nrecl != q->qi_dqreclaims) { 572 mutex_unlock(&dqp->q_hash->qh_lock); 573 goto again; 574 } 575 } 576 577 /* 578 * Take the dquot off the mplist and hashlist. It may remain on 579 * freelist in INACTIVE state. 580 */ 581 nmisses += xfs_qm_dqpurge(dqp); 582 } 583 mutex_unlock(&q->qi_dqlist_lock); 584 return nmisses; 585 } 586 587 int 588 xfs_qm_dqpurge_all( 589 xfs_mount_t *mp, 590 uint flags) 591 { 592 int ndquots; 593 594 /* 595 * Purge the dquot cache. 596 * None of the dquots should really be busy at this point. 597 */ 598 if (mp->m_quotainfo) { 599 while ((ndquots = xfs_qm_dqpurge_int(mp, flags))) { 600 delay(ndquots * 10); 601 } 602 } 603 return 0; 604 } 605 606 STATIC int 607 xfs_qm_dqattach_one( 608 xfs_inode_t *ip, 609 xfs_dqid_t id, 610 uint type, 611 uint doalloc, 612 xfs_dquot_t *udqhint, /* hint */ 613 xfs_dquot_t **IO_idqpp) 614 { 615 xfs_dquot_t *dqp; 616 int error; 617 618 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 619 error = 0; 620 621 /* 622 * See if we already have it in the inode itself. IO_idqpp is 623 * &i_udquot or &i_gdquot. This made the code look weird, but 624 * made the logic a lot simpler. 625 */ 626 dqp = *IO_idqpp; 627 if (dqp) { 628 trace_xfs_dqattach_found(dqp); 629 return 0; 630 } 631 632 /* 633 * udqhint is the i_udquot field in inode, and is non-NULL only 634 * when the type arg is group/project. Its purpose is to save a 635 * lookup by dqid (xfs_qm_dqget) by caching a group dquot inside 636 * the user dquot. 637 */ 638 if (udqhint) { 639 ASSERT(type == XFS_DQ_GROUP || type == XFS_DQ_PROJ); 640 xfs_dqlock(udqhint); 641 642 /* 643 * No need to take dqlock to look at the id. 644 * 645 * The ID can't change until it gets reclaimed, and it won't 646 * be reclaimed as long as we have a ref from inode and we 647 * hold the ilock. 648 */ 649 dqp = udqhint->q_gdquot; 650 if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { 651 xfs_dqlock(dqp); 652 XFS_DQHOLD(dqp); 653 ASSERT(*IO_idqpp == NULL); 654 *IO_idqpp = dqp; 655 656 xfs_dqunlock(dqp); 657 xfs_dqunlock(udqhint); 658 return 0; 659 } 660 661 /* 662 * We can't hold a dquot lock when we call the dqget code. 663 * We'll deadlock in no time, because of (not conforming to) 664 * lock ordering - the inodelock comes before any dquot lock, 665 * and we may drop and reacquire the ilock in xfs_qm_dqget(). 666 */ 667 xfs_dqunlock(udqhint); 668 } 669 670 /* 671 * Find the dquot from somewhere. This bumps the 672 * reference count of dquot and returns it locked. 673 * This can return ENOENT if dquot didn't exist on 674 * disk and we didn't ask it to allocate; 675 * ESRCH if quotas got turned off suddenly. 676 */ 677 error = xfs_qm_dqget(ip->i_mount, ip, id, type, XFS_QMOPT_DOWARN, &dqp); 678 if (error) 679 return error; 680 681 trace_xfs_dqattach_get(dqp); 682 683 /* 684 * dqget may have dropped and re-acquired the ilock, but it guarantees 685 * that the dquot returned is the one that should go in the inode. 686 */ 687 *IO_idqpp = dqp; 688 xfs_dqunlock(dqp); 689 return 0; 690 } 691 692 693 /* 694 * Given a udquot and gdquot, attach a ptr to the group dquot in the 695 * udquot as a hint for future lookups. The idea sounds simple, but the 696 * execution isn't, because the udquot might have a group dquot attached 697 * already and getting rid of that gets us into lock ordering constraints. 698 * The process is complicated more by the fact that the dquots may or may not 699 * be locked on entry. 700 */ 701 STATIC void 702 xfs_qm_dqattach_grouphint( 703 xfs_dquot_t *udq, 704 xfs_dquot_t *gdq) 705 { 706 xfs_dquot_t *tmp; 707 708 xfs_dqlock(udq); 709 710 if ((tmp = udq->q_gdquot)) { 711 if (tmp == gdq) { 712 xfs_dqunlock(udq); 713 return; 714 } 715 716 udq->q_gdquot = NULL; 717 /* 718 * We can't keep any dqlocks when calling dqrele, 719 * because the freelist lock comes before dqlocks. 720 */ 721 xfs_dqunlock(udq); 722 /* 723 * we took a hard reference once upon a time in dqget, 724 * so give it back when the udquot no longer points at it 725 * dqput() does the unlocking of the dquot. 726 */ 727 xfs_qm_dqrele(tmp); 728 729 xfs_dqlock(udq); 730 xfs_dqlock(gdq); 731 732 } else { 733 ASSERT(XFS_DQ_IS_LOCKED(udq)); 734 xfs_dqlock(gdq); 735 } 736 737 ASSERT(XFS_DQ_IS_LOCKED(udq)); 738 ASSERT(XFS_DQ_IS_LOCKED(gdq)); 739 /* 740 * Somebody could have attached a gdquot here, 741 * when we dropped the uqlock. If so, just do nothing. 742 */ 743 if (udq->q_gdquot == NULL) { 744 XFS_DQHOLD(gdq); 745 udq->q_gdquot = gdq; 746 } 747 748 xfs_dqunlock(gdq); 749 xfs_dqunlock(udq); 750 } 751 752 753 /* 754 * Given a locked inode, attach dquot(s) to it, taking U/G/P-QUOTAON 755 * into account. 756 * If XFS_QMOPT_DQALLOC, the dquot(s) will be allocated if needed. 757 * Inode may get unlocked and relocked in here, and the caller must deal with 758 * the consequences. 759 */ 760 int 761 xfs_qm_dqattach_locked( 762 xfs_inode_t *ip, 763 uint flags) 764 { 765 xfs_mount_t *mp = ip->i_mount; 766 uint nquotas = 0; 767 int error = 0; 768 769 if (!XFS_IS_QUOTA_RUNNING(mp) || 770 !XFS_IS_QUOTA_ON(mp) || 771 !XFS_NOT_DQATTACHED(mp, ip) || 772 ip->i_ino == mp->m_sb.sb_uquotino || 773 ip->i_ino == mp->m_sb.sb_gquotino) 774 return 0; 775 776 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 777 778 if (XFS_IS_UQUOTA_ON(mp)) { 779 error = xfs_qm_dqattach_one(ip, ip->i_d.di_uid, XFS_DQ_USER, 780 flags & XFS_QMOPT_DQALLOC, 781 NULL, &ip->i_udquot); 782 if (error) 783 goto done; 784 nquotas++; 785 } 786 787 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 788 if (XFS_IS_OQUOTA_ON(mp)) { 789 error = XFS_IS_GQUOTA_ON(mp) ? 790 xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, 791 flags & XFS_QMOPT_DQALLOC, 792 ip->i_udquot, &ip->i_gdquot) : 793 xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, 794 flags & XFS_QMOPT_DQALLOC, 795 ip->i_udquot, &ip->i_gdquot); 796 /* 797 * Don't worry about the udquot that we may have 798 * attached above. It'll get detached, if not already. 799 */ 800 if (error) 801 goto done; 802 nquotas++; 803 } 804 805 /* 806 * Attach this group quota to the user quota as a hint. 807 * This WON'T, in general, result in a thrash. 808 */ 809 if (nquotas == 2) { 810 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 811 ASSERT(ip->i_udquot); 812 ASSERT(ip->i_gdquot); 813 814 /* 815 * We may or may not have the i_udquot locked at this point, 816 * but this check is OK since we don't depend on the i_gdquot to 817 * be accurate 100% all the time. It is just a hint, and this 818 * will succeed in general. 819 */ 820 if (ip->i_udquot->q_gdquot == ip->i_gdquot) 821 goto done; 822 /* 823 * Attach i_gdquot to the gdquot hint inside the i_udquot. 824 */ 825 xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); 826 } 827 828 done: 829 #ifdef DEBUG 830 if (!error) { 831 if (XFS_IS_UQUOTA_ON(mp)) 832 ASSERT(ip->i_udquot); 833 if (XFS_IS_OQUOTA_ON(mp)) 834 ASSERT(ip->i_gdquot); 835 } 836 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 837 #endif 838 return error; 839 } 840 841 int 842 xfs_qm_dqattach( 843 struct xfs_inode *ip, 844 uint flags) 845 { 846 int error; 847 848 xfs_ilock(ip, XFS_ILOCK_EXCL); 849 error = xfs_qm_dqattach_locked(ip, flags); 850 xfs_iunlock(ip, XFS_ILOCK_EXCL); 851 852 return error; 853 } 854 855 /* 856 * Release dquots (and their references) if any. 857 * The inode should be locked EXCL except when this's called by 858 * xfs_ireclaim. 859 */ 860 void 861 xfs_qm_dqdetach( 862 xfs_inode_t *ip) 863 { 864 if (!(ip->i_udquot || ip->i_gdquot)) 865 return; 866 867 trace_xfs_dquot_dqdetach(ip); 868 869 ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); 870 ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); 871 if (ip->i_udquot) { 872 xfs_qm_dqrele(ip->i_udquot); 873 ip->i_udquot = NULL; 874 } 875 if (ip->i_gdquot) { 876 xfs_qm_dqrele(ip->i_gdquot); 877 ip->i_gdquot = NULL; 878 } 879 } 880 881 int 882 xfs_qm_sync( 883 struct xfs_mount *mp, 884 int flags) 885 { 886 struct xfs_quotainfo *q = mp->m_quotainfo; 887 int recl, restarts; 888 struct xfs_dquot *dqp; 889 int error; 890 891 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 892 return 0; 893 894 restarts = 0; 895 896 again: 897 mutex_lock(&q->qi_dqlist_lock); 898 /* 899 * dqpurge_all() also takes the mplist lock and iterate thru all dquots 900 * in quotaoff. However, if the QUOTA_ACTIVE bits are not cleared 901 * when we have the mplist lock, we know that dquots will be consistent 902 * as long as we have it locked. 903 */ 904 if (!XFS_IS_QUOTA_ON(mp)) { 905 mutex_unlock(&q->qi_dqlist_lock); 906 return 0; 907 } 908 ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); 909 list_for_each_entry(dqp, &q->qi_dqlist, q_mplist) { 910 /* 911 * If this is vfs_sync calling, then skip the dquots that 912 * don't 'seem' to be dirty. ie. don't acquire dqlock. 913 * This is very similar to what xfs_sync does with inodes. 914 */ 915 if (flags & SYNC_TRYLOCK) { 916 if (!XFS_DQ_IS_DIRTY(dqp)) 917 continue; 918 if (!xfs_qm_dqlock_nowait(dqp)) 919 continue; 920 } else { 921 xfs_dqlock(dqp); 922 } 923 924 /* 925 * Now, find out for sure if this dquot is dirty or not. 926 */ 927 if (! XFS_DQ_IS_DIRTY(dqp)) { 928 xfs_dqunlock(dqp); 929 continue; 930 } 931 932 /* XXX a sentinel would be better */ 933 recl = q->qi_dqreclaims; 934 if (!xfs_dqflock_nowait(dqp)) { 935 if (flags & SYNC_TRYLOCK) { 936 xfs_dqunlock(dqp); 937 continue; 938 } 939 /* 940 * If we can't grab the flush lock then if the caller 941 * really wanted us to give this our best shot, so 942 * see if we can give a push to the buffer before we wait 943 * on the flush lock. At this point, we know that 944 * even though the dquot is being flushed, 945 * it has (new) dirty data. 946 */ 947 xfs_qm_dqflock_pushbuf_wait(dqp); 948 } 949 /* 950 * Let go of the mplist lock. We don't want to hold it 951 * across a disk write 952 */ 953 mutex_unlock(&q->qi_dqlist_lock); 954 error = xfs_qm_dqflush(dqp, flags); 955 xfs_dqunlock(dqp); 956 if (error && XFS_FORCED_SHUTDOWN(mp)) 957 return 0; /* Need to prevent umount failure */ 958 else if (error) 959 return error; 960 961 mutex_lock(&q->qi_dqlist_lock); 962 if (recl != q->qi_dqreclaims) { 963 if (++restarts >= XFS_QM_SYNC_MAX_RESTARTS) 964 break; 965 966 mutex_unlock(&q->qi_dqlist_lock); 967 goto again; 968 } 969 } 970 971 mutex_unlock(&q->qi_dqlist_lock); 972 return 0; 973 } 974 975 /* 976 * The hash chains and the mplist use the same xfs_dqhash structure as 977 * their list head, but we can take the mplist qh_lock and one of the 978 * hash qh_locks at the same time without any problem as they aren't 979 * related. 980 */ 981 static struct lock_class_key xfs_quota_mplist_class; 982 983 /* 984 * This initializes all the quota information that's kept in the 985 * mount structure 986 */ 987 STATIC int 988 xfs_qm_init_quotainfo( 989 xfs_mount_t *mp) 990 { 991 xfs_quotainfo_t *qinf; 992 int error; 993 xfs_dquot_t *dqp; 994 995 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 996 997 /* 998 * Tell XQM that we exist as soon as possible. 999 */ 1000 if ((error = xfs_qm_hold_quotafs_ref(mp))) { 1001 return error; 1002 } 1003 1004 qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP); 1005 1006 /* 1007 * See if quotainodes are setup, and if not, allocate them, 1008 * and change the superblock accordingly. 1009 */ 1010 if ((error = xfs_qm_init_quotainos(mp))) { 1011 kmem_free(qinf); 1012 mp->m_quotainfo = NULL; 1013 return error; 1014 } 1015 1016 INIT_LIST_HEAD(&qinf->qi_dqlist); 1017 mutex_init(&qinf->qi_dqlist_lock); 1018 lockdep_set_class(&qinf->qi_dqlist_lock, &xfs_quota_mplist_class); 1019 1020 qinf->qi_dqreclaims = 0; 1021 1022 /* mutex used to serialize quotaoffs */ 1023 mutex_init(&qinf->qi_quotaofflock); 1024 1025 /* Precalc some constants */ 1026 qinf->qi_dqchunklen = XFS_FSB_TO_BB(mp, XFS_DQUOT_CLUSTER_SIZE_FSB); 1027 ASSERT(qinf->qi_dqchunklen); 1028 qinf->qi_dqperchunk = BBTOB(qinf->qi_dqchunklen); 1029 do_div(qinf->qi_dqperchunk, sizeof(xfs_dqblk_t)); 1030 1031 mp->m_qflags |= (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_CHKD); 1032 1033 /* 1034 * We try to get the limits from the superuser's limits fields. 1035 * This is quite hacky, but it is standard quota practice. 1036 * We look at the USR dquot with id == 0 first, but if user quotas 1037 * are not enabled we goto the GRP dquot with id == 0. 1038 * We don't really care to keep separate default limits for user 1039 * and group quotas, at least not at this point. 1040 */ 1041 error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)0, 1042 XFS_IS_UQUOTA_RUNNING(mp) ? XFS_DQ_USER : 1043 (XFS_IS_GQUOTA_RUNNING(mp) ? XFS_DQ_GROUP : 1044 XFS_DQ_PROJ), 1045 XFS_QMOPT_DQSUSER|XFS_QMOPT_DOWARN, 1046 &dqp); 1047 if (! error) { 1048 xfs_disk_dquot_t *ddqp = &dqp->q_core; 1049 1050 /* 1051 * The warnings and timers set the grace period given to 1052 * a user or group before he or she can not perform any 1053 * more writing. If it is zero, a default is used. 1054 */ 1055 qinf->qi_btimelimit = ddqp->d_btimer ? 1056 be32_to_cpu(ddqp->d_btimer) : XFS_QM_BTIMELIMIT; 1057 qinf->qi_itimelimit = ddqp->d_itimer ? 1058 be32_to_cpu(ddqp->d_itimer) : XFS_QM_ITIMELIMIT; 1059 qinf->qi_rtbtimelimit = ddqp->d_rtbtimer ? 1060 be32_to_cpu(ddqp->d_rtbtimer) : XFS_QM_RTBTIMELIMIT; 1061 qinf->qi_bwarnlimit = ddqp->d_bwarns ? 1062 be16_to_cpu(ddqp->d_bwarns) : XFS_QM_BWARNLIMIT; 1063 qinf->qi_iwarnlimit = ddqp->d_iwarns ? 1064 be16_to_cpu(ddqp->d_iwarns) : XFS_QM_IWARNLIMIT; 1065 qinf->qi_rtbwarnlimit = ddqp->d_rtbwarns ? 1066 be16_to_cpu(ddqp->d_rtbwarns) : XFS_QM_RTBWARNLIMIT; 1067 qinf->qi_bhardlimit = be64_to_cpu(ddqp->d_blk_hardlimit); 1068 qinf->qi_bsoftlimit = be64_to_cpu(ddqp->d_blk_softlimit); 1069 qinf->qi_ihardlimit = be64_to_cpu(ddqp->d_ino_hardlimit); 1070 qinf->qi_isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit); 1071 qinf->qi_rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit); 1072 qinf->qi_rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit); 1073 1074 /* 1075 * We sent the XFS_QMOPT_DQSUSER flag to dqget because 1076 * we don't want this dquot cached. We haven't done a 1077 * quotacheck yet, and quotacheck doesn't like incore dquots. 1078 */ 1079 xfs_qm_dqdestroy(dqp); 1080 } else { 1081 qinf->qi_btimelimit = XFS_QM_BTIMELIMIT; 1082 qinf->qi_itimelimit = XFS_QM_ITIMELIMIT; 1083 qinf->qi_rtbtimelimit = XFS_QM_RTBTIMELIMIT; 1084 qinf->qi_bwarnlimit = XFS_QM_BWARNLIMIT; 1085 qinf->qi_iwarnlimit = XFS_QM_IWARNLIMIT; 1086 qinf->qi_rtbwarnlimit = XFS_QM_RTBWARNLIMIT; 1087 } 1088 1089 return 0; 1090 } 1091 1092 1093 /* 1094 * Gets called when unmounting a filesystem or when all quotas get 1095 * turned off. 1096 * This purges the quota inodes, destroys locks and frees itself. 1097 */ 1098 void 1099 xfs_qm_destroy_quotainfo( 1100 xfs_mount_t *mp) 1101 { 1102 xfs_quotainfo_t *qi; 1103 1104 qi = mp->m_quotainfo; 1105 ASSERT(qi != NULL); 1106 ASSERT(xfs_Gqm != NULL); 1107 1108 /* 1109 * Release the reference that XQM kept, so that we know 1110 * when the XQM structure should be freed. We cannot assume 1111 * that xfs_Gqm is non-null after this point. 1112 */ 1113 xfs_qm_rele_quotafs_ref(mp); 1114 1115 ASSERT(list_empty(&qi->qi_dqlist)); 1116 mutex_destroy(&qi->qi_dqlist_lock); 1117 1118 if (qi->qi_uquotaip) { 1119 IRELE(qi->qi_uquotaip); 1120 qi->qi_uquotaip = NULL; /* paranoia */ 1121 } 1122 if (qi->qi_gquotaip) { 1123 IRELE(qi->qi_gquotaip); 1124 qi->qi_gquotaip = NULL; 1125 } 1126 mutex_destroy(&qi->qi_quotaofflock); 1127 kmem_free(qi); 1128 mp->m_quotainfo = NULL; 1129 } 1130 1131 1132 1133 /* ------------------- PRIVATE STATIC FUNCTIONS ----------------------- */ 1134 1135 /* ARGSUSED */ 1136 STATIC void 1137 xfs_qm_list_init( 1138 xfs_dqlist_t *list, 1139 char *str, 1140 int n) 1141 { 1142 mutex_init(&list->qh_lock); 1143 INIT_LIST_HEAD(&list->qh_list); 1144 list->qh_version = 0; 1145 list->qh_nelems = 0; 1146 } 1147 1148 STATIC void 1149 xfs_qm_list_destroy( 1150 xfs_dqlist_t *list) 1151 { 1152 mutex_destroy(&(list->qh_lock)); 1153 } 1154 1155 /* 1156 * Create an inode and return with a reference already taken, but unlocked 1157 * This is how we create quota inodes 1158 */ 1159 STATIC int 1160 xfs_qm_qino_alloc( 1161 xfs_mount_t *mp, 1162 xfs_inode_t **ip, 1163 __int64_t sbfields, 1164 uint flags) 1165 { 1166 xfs_trans_t *tp; 1167 int error; 1168 int committed; 1169 1170 tp = xfs_trans_alloc(mp, XFS_TRANS_QM_QINOCREATE); 1171 if ((error = xfs_trans_reserve(tp, 1172 XFS_QM_QINOCREATE_SPACE_RES(mp), 1173 XFS_CREATE_LOG_RES(mp), 0, 1174 XFS_TRANS_PERM_LOG_RES, 1175 XFS_CREATE_LOG_COUNT))) { 1176 xfs_trans_cancel(tp, 0); 1177 return error; 1178 } 1179 1180 error = xfs_dir_ialloc(&tp, NULL, S_IFREG, 1, 0, 0, 1, ip, &committed); 1181 if (error) { 1182 xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | 1183 XFS_TRANS_ABORT); 1184 return error; 1185 } 1186 1187 /* 1188 * Make the changes in the superblock, and log those too. 1189 * sbfields arg may contain fields other than *QUOTINO; 1190 * VERSIONNUM for example. 1191 */ 1192 spin_lock(&mp->m_sb_lock); 1193 if (flags & XFS_QMOPT_SBVERSION) { 1194 ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); 1195 ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1196 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == 1197 (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1198 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); 1199 1200 xfs_sb_version_addquota(&mp->m_sb); 1201 mp->m_sb.sb_uquotino = NULLFSINO; 1202 mp->m_sb.sb_gquotino = NULLFSINO; 1203 1204 /* qflags will get updated _after_ quotacheck */ 1205 mp->m_sb.sb_qflags = 0; 1206 } 1207 if (flags & XFS_QMOPT_UQUOTA) 1208 mp->m_sb.sb_uquotino = (*ip)->i_ino; 1209 else 1210 mp->m_sb.sb_gquotino = (*ip)->i_ino; 1211 spin_unlock(&mp->m_sb_lock); 1212 xfs_mod_sb(tp, sbfields); 1213 1214 if ((error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES))) { 1215 xfs_alert(mp, "%s failed (error %d)!", __func__, error); 1216 return error; 1217 } 1218 return 0; 1219 } 1220 1221 1222 STATIC void 1223 xfs_qm_reset_dqcounts( 1224 xfs_mount_t *mp, 1225 xfs_buf_t *bp, 1226 xfs_dqid_t id, 1227 uint type) 1228 { 1229 xfs_disk_dquot_t *ddq; 1230 int j; 1231 1232 trace_xfs_reset_dqcounts(bp, _RET_IP_); 1233 1234 /* 1235 * Reset all counters and timers. They'll be 1236 * started afresh by xfs_qm_quotacheck. 1237 */ 1238 #ifdef DEBUG 1239 j = XFS_FSB_TO_B(mp, XFS_DQUOT_CLUSTER_SIZE_FSB); 1240 do_div(j, sizeof(xfs_dqblk_t)); 1241 ASSERT(mp->m_quotainfo->qi_dqperchunk == j); 1242 #endif 1243 ddq = bp->b_addr; 1244 for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { 1245 /* 1246 * Do a sanity check, and if needed, repair the dqblk. Don't 1247 * output any warnings because it's perfectly possible to 1248 * find uninitialised dquot blks. See comment in xfs_qm_dqcheck. 1249 */ 1250 (void) xfs_qm_dqcheck(mp, ddq, id+j, type, XFS_QMOPT_DQREPAIR, 1251 "xfs_quotacheck"); 1252 ddq->d_bcount = 0; 1253 ddq->d_icount = 0; 1254 ddq->d_rtbcount = 0; 1255 ddq->d_btimer = 0; 1256 ddq->d_itimer = 0; 1257 ddq->d_rtbtimer = 0; 1258 ddq->d_bwarns = 0; 1259 ddq->d_iwarns = 0; 1260 ddq->d_rtbwarns = 0; 1261 ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); 1262 } 1263 } 1264 1265 STATIC int 1266 xfs_qm_dqiter_bufs( 1267 xfs_mount_t *mp, 1268 xfs_dqid_t firstid, 1269 xfs_fsblock_t bno, 1270 xfs_filblks_t blkcnt, 1271 uint flags) 1272 { 1273 xfs_buf_t *bp; 1274 int error; 1275 int type; 1276 1277 ASSERT(blkcnt > 0); 1278 type = flags & XFS_QMOPT_UQUOTA ? XFS_DQ_USER : 1279 (flags & XFS_QMOPT_PQUOTA ? XFS_DQ_PROJ : XFS_DQ_GROUP); 1280 error = 0; 1281 1282 /* 1283 * Blkcnt arg can be a very big number, and might even be 1284 * larger than the log itself. So, we have to break it up into 1285 * manageable-sized transactions. 1286 * Note that we don't start a permanent transaction here; we might 1287 * not be able to get a log reservation for the whole thing up front, 1288 * and we don't really care to either, because we just discard 1289 * everything if we were to crash in the middle of this loop. 1290 */ 1291 while (blkcnt--) { 1292 error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, 1293 XFS_FSB_TO_DADDR(mp, bno), 1294 mp->m_quotainfo->qi_dqchunklen, 0, &bp); 1295 if (error) 1296 break; 1297 1298 xfs_qm_reset_dqcounts(mp, bp, firstid, type); 1299 xfs_buf_delwri_queue(bp); 1300 xfs_buf_relse(bp); 1301 /* 1302 * goto the next block. 1303 */ 1304 bno++; 1305 firstid += mp->m_quotainfo->qi_dqperchunk; 1306 } 1307 return error; 1308 } 1309 1310 /* 1311 * Iterate over all allocated USR/GRP/PRJ dquots in the system, calling a 1312 * caller supplied function for every chunk of dquots that we find. 1313 */ 1314 STATIC int 1315 xfs_qm_dqiterate( 1316 xfs_mount_t *mp, 1317 xfs_inode_t *qip, 1318 uint flags) 1319 { 1320 xfs_bmbt_irec_t *map; 1321 int i, nmaps; /* number of map entries */ 1322 int error; /* return value */ 1323 xfs_fileoff_t lblkno; 1324 xfs_filblks_t maxlblkcnt; 1325 xfs_dqid_t firstid; 1326 xfs_fsblock_t rablkno; 1327 xfs_filblks_t rablkcnt; 1328 1329 error = 0; 1330 /* 1331 * This looks racy, but we can't keep an inode lock across a 1332 * trans_reserve. But, this gets called during quotacheck, and that 1333 * happens only at mount time which is single threaded. 1334 */ 1335 if (qip->i_d.di_nblocks == 0) 1336 return 0; 1337 1338 map = kmem_alloc(XFS_DQITER_MAP_SIZE * sizeof(*map), KM_SLEEP); 1339 1340 lblkno = 0; 1341 maxlblkcnt = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_MAXIOFFSET(mp)); 1342 do { 1343 nmaps = XFS_DQITER_MAP_SIZE; 1344 /* 1345 * We aren't changing the inode itself. Just changing 1346 * some of its data. No new blocks are added here, and 1347 * the inode is never added to the transaction. 1348 */ 1349 xfs_ilock(qip, XFS_ILOCK_SHARED); 1350 error = xfs_bmapi_read(qip, lblkno, maxlblkcnt - lblkno, 1351 map, &nmaps, 0); 1352 xfs_iunlock(qip, XFS_ILOCK_SHARED); 1353 if (error) 1354 break; 1355 1356 ASSERT(nmaps <= XFS_DQITER_MAP_SIZE); 1357 for (i = 0; i < nmaps; i++) { 1358 ASSERT(map[i].br_startblock != DELAYSTARTBLOCK); 1359 ASSERT(map[i].br_blockcount); 1360 1361 1362 lblkno += map[i].br_blockcount; 1363 1364 if (map[i].br_startblock == HOLESTARTBLOCK) 1365 continue; 1366 1367 firstid = (xfs_dqid_t) map[i].br_startoff * 1368 mp->m_quotainfo->qi_dqperchunk; 1369 /* 1370 * Do a read-ahead on the next extent. 1371 */ 1372 if ((i+1 < nmaps) && 1373 (map[i+1].br_startblock != HOLESTARTBLOCK)) { 1374 rablkcnt = map[i+1].br_blockcount; 1375 rablkno = map[i+1].br_startblock; 1376 while (rablkcnt--) { 1377 xfs_buf_readahead(mp->m_ddev_targp, 1378 XFS_FSB_TO_DADDR(mp, rablkno), 1379 mp->m_quotainfo->qi_dqchunklen); 1380 rablkno++; 1381 } 1382 } 1383 /* 1384 * Iterate thru all the blks in the extent and 1385 * reset the counters of all the dquots inside them. 1386 */ 1387 if ((error = xfs_qm_dqiter_bufs(mp, 1388 firstid, 1389 map[i].br_startblock, 1390 map[i].br_blockcount, 1391 flags))) { 1392 break; 1393 } 1394 } 1395 1396 if (error) 1397 break; 1398 } while (nmaps > 0); 1399 1400 kmem_free(map); 1401 1402 return error; 1403 } 1404 1405 /* 1406 * Called by dqusage_adjust in doing a quotacheck. 1407 * 1408 * Given the inode, and a dquot id this updates both the incore dqout as well 1409 * as the buffer copy. This is so that once the quotacheck is done, we can 1410 * just log all the buffers, as opposed to logging numerous updates to 1411 * individual dquots. 1412 */ 1413 STATIC int 1414 xfs_qm_quotacheck_dqadjust( 1415 struct xfs_inode *ip, 1416 xfs_dqid_t id, 1417 uint type, 1418 xfs_qcnt_t nblks, 1419 xfs_qcnt_t rtblks) 1420 { 1421 struct xfs_mount *mp = ip->i_mount; 1422 struct xfs_dquot *dqp; 1423 int error; 1424 1425 error = xfs_qm_dqget(mp, ip, id, type, 1426 XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, &dqp); 1427 if (error) { 1428 /* 1429 * Shouldn't be able to turn off quotas here. 1430 */ 1431 ASSERT(error != ESRCH); 1432 ASSERT(error != ENOENT); 1433 return error; 1434 } 1435 1436 trace_xfs_dqadjust(dqp); 1437 1438 /* 1439 * Adjust the inode count and the block count to reflect this inode's 1440 * resource usage. 1441 */ 1442 be64_add_cpu(&dqp->q_core.d_icount, 1); 1443 dqp->q_res_icount++; 1444 if (nblks) { 1445 be64_add_cpu(&dqp->q_core.d_bcount, nblks); 1446 dqp->q_res_bcount += nblks; 1447 } 1448 if (rtblks) { 1449 be64_add_cpu(&dqp->q_core.d_rtbcount, rtblks); 1450 dqp->q_res_rtbcount += rtblks; 1451 } 1452 1453 /* 1454 * Set default limits, adjust timers (since we changed usages) 1455 * 1456 * There are no timers for the default values set in the root dquot. 1457 */ 1458 if (dqp->q_core.d_id) { 1459 xfs_qm_adjust_dqlimits(mp, &dqp->q_core); 1460 xfs_qm_adjust_dqtimers(mp, &dqp->q_core); 1461 } 1462 1463 dqp->dq_flags |= XFS_DQ_DIRTY; 1464 xfs_qm_dqput(dqp); 1465 return 0; 1466 } 1467 1468 STATIC int 1469 xfs_qm_get_rtblks( 1470 xfs_inode_t *ip, 1471 xfs_qcnt_t *O_rtblks) 1472 { 1473 xfs_filblks_t rtblks; /* total rt blks */ 1474 xfs_extnum_t idx; /* extent record index */ 1475 xfs_ifork_t *ifp; /* inode fork pointer */ 1476 xfs_extnum_t nextents; /* number of extent entries */ 1477 int error; 1478 1479 ASSERT(XFS_IS_REALTIME_INODE(ip)); 1480 ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); 1481 if (!(ifp->if_flags & XFS_IFEXTENTS)) { 1482 if ((error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK))) 1483 return error; 1484 } 1485 rtblks = 0; 1486 nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); 1487 for (idx = 0; idx < nextents; idx++) 1488 rtblks += xfs_bmbt_get_blockcount(xfs_iext_get_ext(ifp, idx)); 1489 *O_rtblks = (xfs_qcnt_t)rtblks; 1490 return 0; 1491 } 1492 1493 /* 1494 * callback routine supplied to bulkstat(). Given an inumber, find its 1495 * dquots and update them to account for resources taken by that inode. 1496 */ 1497 /* ARGSUSED */ 1498 STATIC int 1499 xfs_qm_dqusage_adjust( 1500 xfs_mount_t *mp, /* mount point for filesystem */ 1501 xfs_ino_t ino, /* inode number to get data for */ 1502 void __user *buffer, /* not used */ 1503 int ubsize, /* not used */ 1504 int *ubused, /* not used */ 1505 int *res) /* result code value */ 1506 { 1507 xfs_inode_t *ip; 1508 xfs_qcnt_t nblks, rtblks = 0; 1509 int error; 1510 1511 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1512 1513 /* 1514 * rootino must have its resources accounted for, not so with the quota 1515 * inodes. 1516 */ 1517 if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { 1518 *res = BULKSTAT_RV_NOTHING; 1519 return XFS_ERROR(EINVAL); 1520 } 1521 1522 /* 1523 * We don't _need_ to take the ilock EXCL. However, the xfs_qm_dqget 1524 * interface expects the inode to be exclusively locked because that's 1525 * the case in all other instances. It's OK that we do this because 1526 * quotacheck is done only at mount time. 1527 */ 1528 error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_EXCL, &ip); 1529 if (error) { 1530 *res = BULKSTAT_RV_NOTHING; 1531 return error; 1532 } 1533 1534 ASSERT(ip->i_delayed_blks == 0); 1535 1536 if (XFS_IS_REALTIME_INODE(ip)) { 1537 /* 1538 * Walk thru the extent list and count the realtime blocks. 1539 */ 1540 error = xfs_qm_get_rtblks(ip, &rtblks); 1541 if (error) 1542 goto error0; 1543 } 1544 1545 nblks = (xfs_qcnt_t)ip->i_d.di_nblocks - rtblks; 1546 1547 /* 1548 * Add the (disk blocks and inode) resources occupied by this 1549 * inode to its dquots. We do this adjustment in the incore dquot, 1550 * and also copy the changes to its buffer. 1551 * We don't care about putting these changes in a transaction 1552 * envelope because if we crash in the middle of a 'quotacheck' 1553 * we have to start from the beginning anyway. 1554 * Once we're done, we'll log all the dquot bufs. 1555 * 1556 * The *QUOTA_ON checks below may look pretty racy, but quotachecks 1557 * and quotaoffs don't race. (Quotachecks happen at mount time only). 1558 */ 1559 if (XFS_IS_UQUOTA_ON(mp)) { 1560 error = xfs_qm_quotacheck_dqadjust(ip, ip->i_d.di_uid, 1561 XFS_DQ_USER, nblks, rtblks); 1562 if (error) 1563 goto error0; 1564 } 1565 1566 if (XFS_IS_GQUOTA_ON(mp)) { 1567 error = xfs_qm_quotacheck_dqadjust(ip, ip->i_d.di_gid, 1568 XFS_DQ_GROUP, nblks, rtblks); 1569 if (error) 1570 goto error0; 1571 } 1572 1573 if (XFS_IS_PQUOTA_ON(mp)) { 1574 error = xfs_qm_quotacheck_dqadjust(ip, xfs_get_projid(ip), 1575 XFS_DQ_PROJ, nblks, rtblks); 1576 if (error) 1577 goto error0; 1578 } 1579 1580 xfs_iunlock(ip, XFS_ILOCK_EXCL); 1581 IRELE(ip); 1582 *res = BULKSTAT_RV_DIDONE; 1583 return 0; 1584 1585 error0: 1586 xfs_iunlock(ip, XFS_ILOCK_EXCL); 1587 IRELE(ip); 1588 *res = BULKSTAT_RV_GIVEUP; 1589 return error; 1590 } 1591 1592 /* 1593 * Walk thru all the filesystem inodes and construct a consistent view 1594 * of the disk quota world. If the quotacheck fails, disable quotas. 1595 */ 1596 int 1597 xfs_qm_quotacheck( 1598 xfs_mount_t *mp) 1599 { 1600 int done, count, error; 1601 xfs_ino_t lastino; 1602 size_t structsz; 1603 xfs_inode_t *uip, *gip; 1604 uint flags; 1605 1606 count = INT_MAX; 1607 structsz = 1; 1608 lastino = 0; 1609 flags = 0; 1610 1611 ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); 1612 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1613 1614 /* 1615 * There should be no cached dquots. The (simplistic) quotacheck 1616 * algorithm doesn't like that. 1617 */ 1618 ASSERT(list_empty(&mp->m_quotainfo->qi_dqlist)); 1619 1620 xfs_notice(mp, "Quotacheck needed: Please wait."); 1621 1622 /* 1623 * First we go thru all the dquots on disk, USR and GRP/PRJ, and reset 1624 * their counters to zero. We need a clean slate. 1625 * We don't log our changes till later. 1626 */ 1627 uip = mp->m_quotainfo->qi_uquotaip; 1628 if (uip) { 1629 error = xfs_qm_dqiterate(mp, uip, XFS_QMOPT_UQUOTA); 1630 if (error) 1631 goto error_return; 1632 flags |= XFS_UQUOTA_CHKD; 1633 } 1634 1635 gip = mp->m_quotainfo->qi_gquotaip; 1636 if (gip) { 1637 error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? 1638 XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); 1639 if (error) 1640 goto error_return; 1641 flags |= XFS_OQUOTA_CHKD; 1642 } 1643 1644 do { 1645 /* 1646 * Iterate thru all the inodes in the file system, 1647 * adjusting the corresponding dquot counters in core. 1648 */ 1649 error = xfs_bulkstat(mp, &lastino, &count, 1650 xfs_qm_dqusage_adjust, 1651 structsz, NULL, &done); 1652 if (error) 1653 break; 1654 1655 } while (!done); 1656 1657 /* 1658 * We've made all the changes that we need to make incore. 1659 * Flush them down to disk buffers if everything was updated 1660 * successfully. 1661 */ 1662 if (!error) 1663 error = xfs_qm_dqflush_all(mp, 0); 1664 1665 /* 1666 * We can get this error if we couldn't do a dquot allocation inside 1667 * xfs_qm_dqusage_adjust (via bulkstat). We don't care about the 1668 * dirty dquots that might be cached, we just want to get rid of them 1669 * and turn quotaoff. The dquots won't be attached to any of the inodes 1670 * at this point (because we intentionally didn't in dqget_noattach). 1671 */ 1672 if (error) { 1673 xfs_qm_dqpurge_all(mp, XFS_QMOPT_QUOTALL); 1674 goto error_return; 1675 } 1676 1677 /* 1678 * We didn't log anything, because if we crashed, we'll have to 1679 * start the quotacheck from scratch anyway. However, we must make 1680 * sure that our dquot changes are secure before we put the 1681 * quotacheck'd stamp on the superblock. So, here we do a synchronous 1682 * flush. 1683 */ 1684 xfs_flush_buftarg(mp->m_ddev_targp, 1); 1685 1686 /* 1687 * If one type of quotas is off, then it will lose its 1688 * quotachecked status, since we won't be doing accounting for 1689 * that type anymore. 1690 */ 1691 mp->m_qflags &= ~(XFS_OQUOTA_CHKD | XFS_UQUOTA_CHKD); 1692 mp->m_qflags |= flags; 1693 1694 error_return: 1695 if (error) { 1696 xfs_warn(mp, 1697 "Quotacheck: Unsuccessful (Error %d): Disabling quotas.", 1698 error); 1699 /* 1700 * We must turn off quotas. 1701 */ 1702 ASSERT(mp->m_quotainfo != NULL); 1703 ASSERT(xfs_Gqm != NULL); 1704 xfs_qm_destroy_quotainfo(mp); 1705 if (xfs_mount_reset_sbqflags(mp)) { 1706 xfs_warn(mp, 1707 "Quotacheck: Failed to reset quota flags."); 1708 } 1709 } else 1710 xfs_notice(mp, "Quotacheck: Done."); 1711 return (error); 1712 } 1713 1714 /* 1715 * This is called after the superblock has been read in and we're ready to 1716 * iget the quota inodes. 1717 */ 1718 STATIC int 1719 xfs_qm_init_quotainos( 1720 xfs_mount_t *mp) 1721 { 1722 xfs_inode_t *uip, *gip; 1723 int error; 1724 __int64_t sbflags; 1725 uint flags; 1726 1727 ASSERT(mp->m_quotainfo); 1728 uip = gip = NULL; 1729 sbflags = 0; 1730 flags = 0; 1731 1732 /* 1733 * Get the uquota and gquota inodes 1734 */ 1735 if (xfs_sb_version_hasquota(&mp->m_sb)) { 1736 if (XFS_IS_UQUOTA_ON(mp) && 1737 mp->m_sb.sb_uquotino != NULLFSINO) { 1738 ASSERT(mp->m_sb.sb_uquotino > 0); 1739 if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, 1740 0, 0, &uip))) 1741 return XFS_ERROR(error); 1742 } 1743 if (XFS_IS_OQUOTA_ON(mp) && 1744 mp->m_sb.sb_gquotino != NULLFSINO) { 1745 ASSERT(mp->m_sb.sb_gquotino > 0); 1746 if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, 1747 0, 0, &gip))) { 1748 if (uip) 1749 IRELE(uip); 1750 return XFS_ERROR(error); 1751 } 1752 } 1753 } else { 1754 flags |= XFS_QMOPT_SBVERSION; 1755 sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1756 XFS_SB_GQUOTINO | XFS_SB_QFLAGS); 1757 } 1758 1759 /* 1760 * Create the two inodes, if they don't exist already. The changes 1761 * made above will get added to a transaction and logged in one of 1762 * the qino_alloc calls below. If the device is readonly, 1763 * temporarily switch to read-write to do this. 1764 */ 1765 if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { 1766 if ((error = xfs_qm_qino_alloc(mp, &uip, 1767 sbflags | XFS_SB_UQUOTINO, 1768 flags | XFS_QMOPT_UQUOTA))) 1769 return XFS_ERROR(error); 1770 1771 flags &= ~XFS_QMOPT_SBVERSION; 1772 } 1773 if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { 1774 flags |= (XFS_IS_GQUOTA_ON(mp) ? 1775 XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); 1776 error = xfs_qm_qino_alloc(mp, &gip, 1777 sbflags | XFS_SB_GQUOTINO, flags); 1778 if (error) { 1779 if (uip) 1780 IRELE(uip); 1781 1782 return XFS_ERROR(error); 1783 } 1784 } 1785 1786 mp->m_quotainfo->qi_uquotaip = uip; 1787 mp->m_quotainfo->qi_gquotaip = gip; 1788 1789 return 0; 1790 } 1791 1792 1793 1794 /* 1795 * Just pop the least recently used dquot off the freelist and 1796 * recycle it. The returned dquot is locked. 1797 */ 1798 STATIC xfs_dquot_t * 1799 xfs_qm_dqreclaim_one(void) 1800 { 1801 xfs_dquot_t *dqpout; 1802 xfs_dquot_t *dqp; 1803 int restarts; 1804 int startagain; 1805 1806 restarts = 0; 1807 dqpout = NULL; 1808 1809 /* lockorder: hashchainlock, freelistlock, mplistlock, dqlock, dqflock */ 1810 again: 1811 startagain = 0; 1812 mutex_lock(&xfs_Gqm->qm_dqfrlist_lock); 1813 1814 list_for_each_entry(dqp, &xfs_Gqm->qm_dqfrlist, q_freelist) { 1815 struct xfs_mount *mp = dqp->q_mount; 1816 xfs_dqlock(dqp); 1817 1818 /* 1819 * We are racing with dqlookup here. Naturally we don't 1820 * want to reclaim a dquot that lookup wants. We release the 1821 * freelist lock and start over, so that lookup will grab 1822 * both the dquot and the freelistlock. 1823 */ 1824 if (dqp->dq_flags & XFS_DQ_WANT) { 1825 ASSERT(! (dqp->dq_flags & XFS_DQ_INACTIVE)); 1826 1827 trace_xfs_dqreclaim_want(dqp); 1828 XQM_STATS_INC(xqmstats.xs_qm_dqwants); 1829 restarts++; 1830 startagain = 1; 1831 goto dqunlock; 1832 } 1833 1834 /* 1835 * If the dquot is inactive, we are assured that it is 1836 * not on the mplist or the hashlist, and that makes our 1837 * life easier. 1838 */ 1839 if (dqp->dq_flags & XFS_DQ_INACTIVE) { 1840 ASSERT(mp == NULL); 1841 ASSERT(! XFS_DQ_IS_DIRTY(dqp)); 1842 ASSERT(list_empty(&dqp->q_hashlist)); 1843 ASSERT(list_empty(&dqp->q_mplist)); 1844 list_del_init(&dqp->q_freelist); 1845 xfs_Gqm->qm_dqfrlist_cnt--; 1846 dqpout = dqp; 1847 XQM_STATS_INC(xqmstats.xs_qm_dqinact_reclaims); 1848 goto dqunlock; 1849 } 1850 1851 ASSERT(dqp->q_hash); 1852 ASSERT(!list_empty(&dqp->q_mplist)); 1853 1854 /* 1855 * Try to grab the flush lock. If this dquot is in the process 1856 * of getting flushed to disk, we don't want to reclaim it. 1857 */ 1858 if (!xfs_dqflock_nowait(dqp)) 1859 goto dqunlock; 1860 1861 /* 1862 * We have the flush lock so we know that this is not in the 1863 * process of being flushed. So, if this is dirty, flush it 1864 * DELWRI so that we don't get a freelist infested with 1865 * dirty dquots. 1866 */ 1867 if (XFS_DQ_IS_DIRTY(dqp)) { 1868 int error; 1869 1870 trace_xfs_dqreclaim_dirty(dqp); 1871 1872 /* 1873 * We flush it delayed write, so don't bother 1874 * releasing the freelist lock. 1875 */ 1876 error = xfs_qm_dqflush(dqp, 0); 1877 if (error) { 1878 xfs_warn(mp, "%s: dquot %p flush failed", 1879 __func__, dqp); 1880 } 1881 goto dqunlock; 1882 } 1883 1884 /* 1885 * We're trying to get the hashlock out of order. This races 1886 * with dqlookup; so, we giveup and goto the next dquot if 1887 * we couldn't get the hashlock. This way, we won't starve 1888 * a dqlookup process that holds the hashlock that is 1889 * waiting for the freelist lock. 1890 */ 1891 if (!mutex_trylock(&dqp->q_hash->qh_lock)) { 1892 restarts++; 1893 goto dqfunlock; 1894 } 1895 1896 /* 1897 * This races with dquot allocation code as well as dqflush_all 1898 * and reclaim code. So, if we failed to grab the mplist lock, 1899 * giveup everything and start over. 1900 */ 1901 if (!mutex_trylock(&mp->m_quotainfo->qi_dqlist_lock)) { 1902 restarts++; 1903 startagain = 1; 1904 goto qhunlock; 1905 } 1906 1907 ASSERT(dqp->q_nrefs == 0); 1908 list_del_init(&dqp->q_mplist); 1909 mp->m_quotainfo->qi_dquots--; 1910 mp->m_quotainfo->qi_dqreclaims++; 1911 list_del_init(&dqp->q_hashlist); 1912 dqp->q_hash->qh_version++; 1913 list_del_init(&dqp->q_freelist); 1914 xfs_Gqm->qm_dqfrlist_cnt--; 1915 dqpout = dqp; 1916 mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock); 1917 qhunlock: 1918 mutex_unlock(&dqp->q_hash->qh_lock); 1919 dqfunlock: 1920 xfs_dqfunlock(dqp); 1921 dqunlock: 1922 xfs_dqunlock(dqp); 1923 if (dqpout) 1924 break; 1925 if (restarts >= XFS_QM_RECLAIM_MAX_RESTARTS) 1926 break; 1927 if (startagain) { 1928 mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); 1929 goto again; 1930 } 1931 } 1932 mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock); 1933 return dqpout; 1934 } 1935 1936 /* 1937 * Traverse the freelist of dquots and attempt to reclaim a maximum of 1938 * 'howmany' dquots. This operation races with dqlookup(), and attempts to 1939 * favor the lookup function ... 1940 */ 1941 STATIC int 1942 xfs_qm_shake_freelist( 1943 int howmany) 1944 { 1945 int nreclaimed = 0; 1946 xfs_dquot_t *dqp; 1947 1948 if (howmany <= 0) 1949 return 0; 1950 1951 while (nreclaimed < howmany) { 1952 dqp = xfs_qm_dqreclaim_one(); 1953 if (!dqp) 1954 return nreclaimed; 1955 xfs_qm_dqdestroy(dqp); 1956 nreclaimed++; 1957 } 1958 return nreclaimed; 1959 } 1960 1961 /* 1962 * The kmem_shake interface is invoked when memory is running low. 1963 */ 1964 /* ARGSUSED */ 1965 STATIC int 1966 xfs_qm_shake( 1967 struct shrinker *shrink, 1968 struct shrink_control *sc) 1969 { 1970 int ndqused, nfree, n; 1971 gfp_t gfp_mask = sc->gfp_mask; 1972 1973 if (!kmem_shake_allow(gfp_mask)) 1974 return 0; 1975 if (!xfs_Gqm) 1976 return 0; 1977 1978 nfree = xfs_Gqm->qm_dqfrlist_cnt; /* free dquots */ 1979 /* incore dquots in all f/s's */ 1980 ndqused = atomic_read(&xfs_Gqm->qm_totaldquots) - nfree; 1981 1982 ASSERT(ndqused >= 0); 1983 1984 if (nfree <= ndqused && nfree < ndquot) 1985 return 0; 1986 1987 ndqused *= xfs_Gqm->qm_dqfree_ratio; /* target # of free dquots */ 1988 n = nfree - ndqused - ndquot; /* # over target */ 1989 1990 return xfs_qm_shake_freelist(MAX(nfree, n)); 1991 } 1992 1993 1994 /*------------------------------------------------------------------*/ 1995 1996 /* 1997 * Return a new incore dquot. Depending on the number of 1998 * dquots in the system, we either allocate a new one on the kernel heap, 1999 * or reclaim a free one. 2000 * Return value is B_TRUE if we allocated a new dquot, B_FALSE if we managed 2001 * to reclaim an existing one from the freelist. 2002 */ 2003 boolean_t 2004 xfs_qm_dqalloc_incore( 2005 xfs_dquot_t **O_dqpp) 2006 { 2007 xfs_dquot_t *dqp; 2008 2009 /* 2010 * Check against high water mark to see if we want to pop 2011 * a nincompoop dquot off the freelist. 2012 */ 2013 if (atomic_read(&xfs_Gqm->qm_totaldquots) >= ndquot) { 2014 /* 2015 * Try to recycle a dquot from the freelist. 2016 */ 2017 if ((dqp = xfs_qm_dqreclaim_one())) { 2018 XQM_STATS_INC(xqmstats.xs_qm_dqreclaims); 2019 /* 2020 * Just zero the core here. The rest will get 2021 * reinitialized by caller. XXX we shouldn't even 2022 * do this zero ... 2023 */ 2024 memset(&dqp->q_core, 0, sizeof(dqp->q_core)); 2025 *O_dqpp = dqp; 2026 return B_FALSE; 2027 } 2028 XQM_STATS_INC(xqmstats.xs_qm_dqreclaim_misses); 2029 } 2030 2031 /* 2032 * Allocate a brand new dquot on the kernel heap and return it 2033 * to the caller to initialize. 2034 */ 2035 ASSERT(xfs_Gqm->qm_dqzone != NULL); 2036 *O_dqpp = kmem_zone_zalloc(xfs_Gqm->qm_dqzone, KM_SLEEP); 2037 atomic_inc(&xfs_Gqm->qm_totaldquots); 2038 2039 return B_TRUE; 2040 } 2041 2042 2043 /* 2044 * Start a transaction and write the incore superblock changes to 2045 * disk. flags parameter indicates which fields have changed. 2046 */ 2047 int 2048 xfs_qm_write_sb_changes( 2049 xfs_mount_t *mp, 2050 __int64_t flags) 2051 { 2052 xfs_trans_t *tp; 2053 int error; 2054 2055 tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE); 2056 if ((error = xfs_trans_reserve(tp, 0, 2057 mp->m_sb.sb_sectsize + 128, 0, 2058 0, 2059 XFS_DEFAULT_LOG_COUNT))) { 2060 xfs_trans_cancel(tp, 0); 2061 return error; 2062 } 2063 2064 xfs_mod_sb(tp, flags); 2065 error = xfs_trans_commit(tp, 0); 2066 2067 return error; 2068 } 2069 2070 2071 /* --------------- utility functions for vnodeops ---------------- */ 2072 2073 2074 /* 2075 * Given an inode, a uid, gid and prid make sure that we have 2076 * allocated relevant dquot(s) on disk, and that we won't exceed inode 2077 * quotas by creating this file. 2078 * This also attaches dquot(s) to the given inode after locking it, 2079 * and returns the dquots corresponding to the uid and/or gid. 2080 * 2081 * in : inode (unlocked) 2082 * out : udquot, gdquot with references taken and unlocked 2083 */ 2084 int 2085 xfs_qm_vop_dqalloc( 2086 struct xfs_inode *ip, 2087 uid_t uid, 2088 gid_t gid, 2089 prid_t prid, 2090 uint flags, 2091 struct xfs_dquot **O_udqpp, 2092 struct xfs_dquot **O_gdqpp) 2093 { 2094 struct xfs_mount *mp = ip->i_mount; 2095 struct xfs_dquot *uq, *gq; 2096 int error; 2097 uint lockflags; 2098 2099 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 2100 return 0; 2101 2102 lockflags = XFS_ILOCK_EXCL; 2103 xfs_ilock(ip, lockflags); 2104 2105 if ((flags & XFS_QMOPT_INHERIT) && XFS_INHERIT_GID(ip)) 2106 gid = ip->i_d.di_gid; 2107 2108 /* 2109 * Attach the dquot(s) to this inode, doing a dquot allocation 2110 * if necessary. The dquot(s) will not be locked. 2111 */ 2112 if (XFS_NOT_DQATTACHED(mp, ip)) { 2113 error = xfs_qm_dqattach_locked(ip, XFS_QMOPT_DQALLOC); 2114 if (error) { 2115 xfs_iunlock(ip, lockflags); 2116 return error; 2117 } 2118 } 2119 2120 uq = gq = NULL; 2121 if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { 2122 if (ip->i_d.di_uid != uid) { 2123 /* 2124 * What we need is the dquot that has this uid, and 2125 * if we send the inode to dqget, the uid of the inode 2126 * takes priority over what's sent in the uid argument. 2127 * We must unlock inode here before calling dqget if 2128 * we're not sending the inode, because otherwise 2129 * we'll deadlock by doing trans_reserve while 2130 * holding ilock. 2131 */ 2132 xfs_iunlock(ip, lockflags); 2133 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, 2134 XFS_DQ_USER, 2135 XFS_QMOPT_DQALLOC | 2136 XFS_QMOPT_DOWARN, 2137 &uq))) { 2138 ASSERT(error != ENOENT); 2139 return error; 2140 } 2141 /* 2142 * Get the ilock in the right order. 2143 */ 2144 xfs_dqunlock(uq); 2145 lockflags = XFS_ILOCK_SHARED; 2146 xfs_ilock(ip, lockflags); 2147 } else { 2148 /* 2149 * Take an extra reference, because we'll return 2150 * this to caller 2151 */ 2152 ASSERT(ip->i_udquot); 2153 uq = ip->i_udquot; 2154 xfs_dqlock(uq); 2155 XFS_DQHOLD(uq); 2156 xfs_dqunlock(uq); 2157 } 2158 } 2159 if ((flags & XFS_QMOPT_GQUOTA) && XFS_IS_GQUOTA_ON(mp)) { 2160 if (ip->i_d.di_gid != gid) { 2161 xfs_iunlock(ip, lockflags); 2162 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, 2163 XFS_DQ_GROUP, 2164 XFS_QMOPT_DQALLOC | 2165 XFS_QMOPT_DOWARN, 2166 &gq))) { 2167 if (uq) 2168 xfs_qm_dqrele(uq); 2169 ASSERT(error != ENOENT); 2170 return error; 2171 } 2172 xfs_dqunlock(gq); 2173 lockflags = XFS_ILOCK_SHARED; 2174 xfs_ilock(ip, lockflags); 2175 } else { 2176 ASSERT(ip->i_gdquot); 2177 gq = ip->i_gdquot; 2178 xfs_dqlock(gq); 2179 XFS_DQHOLD(gq); 2180 xfs_dqunlock(gq); 2181 } 2182 } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { 2183 if (xfs_get_projid(ip) != prid) { 2184 xfs_iunlock(ip, lockflags); 2185 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, 2186 XFS_DQ_PROJ, 2187 XFS_QMOPT_DQALLOC | 2188 XFS_QMOPT_DOWARN, 2189 &gq))) { 2190 if (uq) 2191 xfs_qm_dqrele(uq); 2192 ASSERT(error != ENOENT); 2193 return (error); 2194 } 2195 xfs_dqunlock(gq); 2196 lockflags = XFS_ILOCK_SHARED; 2197 xfs_ilock(ip, lockflags); 2198 } else { 2199 ASSERT(ip->i_gdquot); 2200 gq = ip->i_gdquot; 2201 xfs_dqlock(gq); 2202 XFS_DQHOLD(gq); 2203 xfs_dqunlock(gq); 2204 } 2205 } 2206 if (uq) 2207 trace_xfs_dquot_dqalloc(ip); 2208 2209 xfs_iunlock(ip, lockflags); 2210 if (O_udqpp) 2211 *O_udqpp = uq; 2212 else if (uq) 2213 xfs_qm_dqrele(uq); 2214 if (O_gdqpp) 2215 *O_gdqpp = gq; 2216 else if (gq) 2217 xfs_qm_dqrele(gq); 2218 return 0; 2219 } 2220 2221 /* 2222 * Actually transfer ownership, and do dquot modifications. 2223 * These were already reserved. 2224 */ 2225 xfs_dquot_t * 2226 xfs_qm_vop_chown( 2227 xfs_trans_t *tp, 2228 xfs_inode_t *ip, 2229 xfs_dquot_t **IO_olddq, 2230 xfs_dquot_t *newdq) 2231 { 2232 xfs_dquot_t *prevdq; 2233 uint bfield = XFS_IS_REALTIME_INODE(ip) ? 2234 XFS_TRANS_DQ_RTBCOUNT : XFS_TRANS_DQ_BCOUNT; 2235 2236 2237 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 2238 ASSERT(XFS_IS_QUOTA_RUNNING(ip->i_mount)); 2239 2240 /* old dquot */ 2241 prevdq = *IO_olddq; 2242 ASSERT(prevdq); 2243 ASSERT(prevdq != newdq); 2244 2245 xfs_trans_mod_dquot(tp, prevdq, bfield, -(ip->i_d.di_nblocks)); 2246 xfs_trans_mod_dquot(tp, prevdq, XFS_TRANS_DQ_ICOUNT, -1); 2247 2248 /* the sparkling new dquot */ 2249 xfs_trans_mod_dquot(tp, newdq, bfield, ip->i_d.di_nblocks); 2250 xfs_trans_mod_dquot(tp, newdq, XFS_TRANS_DQ_ICOUNT, 1); 2251 2252 /* 2253 * Take an extra reference, because the inode 2254 * is going to keep this dquot pointer even 2255 * after the trans_commit. 2256 */ 2257 xfs_dqlock(newdq); 2258 XFS_DQHOLD(newdq); 2259 xfs_dqunlock(newdq); 2260 *IO_olddq = newdq; 2261 2262 return prevdq; 2263 } 2264 2265 /* 2266 * Quota reservations for setattr(AT_UID|AT_GID|AT_PROJID). 2267 */ 2268 int 2269 xfs_qm_vop_chown_reserve( 2270 xfs_trans_t *tp, 2271 xfs_inode_t *ip, 2272 xfs_dquot_t *udqp, 2273 xfs_dquot_t *gdqp, 2274 uint flags) 2275 { 2276 xfs_mount_t *mp = ip->i_mount; 2277 uint delblks, blkflags, prjflags = 0; 2278 xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; 2279 int error; 2280 2281 2282 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); 2283 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 2284 2285 delblks = ip->i_delayed_blks; 2286 delblksudq = delblksgdq = unresudq = unresgdq = NULL; 2287 blkflags = XFS_IS_REALTIME_INODE(ip) ? 2288 XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; 2289 2290 if (XFS_IS_UQUOTA_ON(mp) && udqp && 2291 ip->i_d.di_uid != (uid_t)be32_to_cpu(udqp->q_core.d_id)) { 2292 delblksudq = udqp; 2293 /* 2294 * If there are delayed allocation blocks, then we have to 2295 * unreserve those from the old dquot, and add them to the 2296 * new dquot. 2297 */ 2298 if (delblks) { 2299 ASSERT(ip->i_udquot); 2300 unresudq = ip->i_udquot; 2301 } 2302 } 2303 if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { 2304 if (XFS_IS_PQUOTA_ON(ip->i_mount) && 2305 xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) 2306 prjflags = XFS_QMOPT_ENOSPC; 2307 2308 if (prjflags || 2309 (XFS_IS_GQUOTA_ON(ip->i_mount) && 2310 ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { 2311 delblksgdq = gdqp; 2312 if (delblks) { 2313 ASSERT(ip->i_gdquot); 2314 unresgdq = ip->i_gdquot; 2315 } 2316 } 2317 } 2318 2319 if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, 2320 delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, 2321 flags | blkflags | prjflags))) 2322 return (error); 2323 2324 /* 2325 * Do the delayed blks reservations/unreservations now. Since, these 2326 * are done without the help of a transaction, if a reservation fails 2327 * its previous reservations won't be automatically undone by trans 2328 * code. So, we have to do it manually here. 2329 */ 2330 if (delblks) { 2331 /* 2332 * Do the reservations first. Unreservation can't fail. 2333 */ 2334 ASSERT(delblksudq || delblksgdq); 2335 ASSERT(unresudq || unresgdq); 2336 if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, 2337 delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, 2338 flags | blkflags | prjflags))) 2339 return (error); 2340 xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, 2341 unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, 2342 blkflags); 2343 } 2344 2345 return (0); 2346 } 2347 2348 int 2349 xfs_qm_vop_rename_dqattach( 2350 struct xfs_inode **i_tab) 2351 { 2352 struct xfs_mount *mp = i_tab[0]->i_mount; 2353 int i; 2354 2355 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 2356 return 0; 2357 2358 for (i = 0; (i < 4 && i_tab[i]); i++) { 2359 struct xfs_inode *ip = i_tab[i]; 2360 int error; 2361 2362 /* 2363 * Watch out for duplicate entries in the table. 2364 */ 2365 if (i == 0 || ip != i_tab[i-1]) { 2366 if (XFS_NOT_DQATTACHED(mp, ip)) { 2367 error = xfs_qm_dqattach(ip, 0); 2368 if (error) 2369 return error; 2370 } 2371 } 2372 } 2373 return 0; 2374 } 2375 2376 void 2377 xfs_qm_vop_create_dqattach( 2378 struct xfs_trans *tp, 2379 struct xfs_inode *ip, 2380 struct xfs_dquot *udqp, 2381 struct xfs_dquot *gdqp) 2382 { 2383 struct xfs_mount *mp = tp->t_mountp; 2384 2385 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 2386 return; 2387 2388 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 2389 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 2390 2391 if (udqp) { 2392 xfs_dqlock(udqp); 2393 XFS_DQHOLD(udqp); 2394 xfs_dqunlock(udqp); 2395 ASSERT(ip->i_udquot == NULL); 2396 ip->i_udquot = udqp; 2397 ASSERT(XFS_IS_UQUOTA_ON(mp)); 2398 ASSERT(ip->i_d.di_uid == be32_to_cpu(udqp->q_core.d_id)); 2399 xfs_trans_mod_dquot(tp, udqp, XFS_TRANS_DQ_ICOUNT, 1); 2400 } 2401 if (gdqp) { 2402 xfs_dqlock(gdqp); 2403 XFS_DQHOLD(gdqp); 2404 xfs_dqunlock(gdqp); 2405 ASSERT(ip->i_gdquot == NULL); 2406 ip->i_gdquot = gdqp; 2407 ASSERT(XFS_IS_OQUOTA_ON(mp)); 2408 ASSERT((XFS_IS_GQUOTA_ON(mp) ? 2409 ip->i_d.di_gid : xfs_get_projid(ip)) == 2410 be32_to_cpu(gdqp->q_core.d_id)); 2411 xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); 2412 } 2413 } 2414 2415