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 STATIC int xfs_qm_init_quotainos(xfs_mount_t *); 52 STATIC int xfs_qm_init_quotainfo(xfs_mount_t *); 53 STATIC int xfs_qm_shake(struct shrinker *, struct shrink_control *); 54 55 /* 56 * We use the batch lookup interface to iterate over the dquots as it 57 * currently is the only interface into the radix tree code that allows 58 * fuzzy lookups instead of exact matches. Holding the lock over multiple 59 * operations is fine as all callers are used either during mount/umount 60 * or quotaoff. 61 */ 62 #define XFS_DQ_LOOKUP_BATCH 32 63 64 STATIC int 65 xfs_qm_dquot_walk( 66 struct xfs_mount *mp, 67 int type, 68 int (*execute)(struct xfs_dquot *dqp)) 69 { 70 struct xfs_quotainfo *qi = mp->m_quotainfo; 71 struct radix_tree_root *tree = XFS_DQUOT_TREE(qi, type); 72 uint32_t next_index; 73 int last_error = 0; 74 int skipped; 75 int nr_found; 76 77 restart: 78 skipped = 0; 79 next_index = 0; 80 nr_found = 0; 81 82 while (1) { 83 struct xfs_dquot *batch[XFS_DQ_LOOKUP_BATCH]; 84 int error = 0; 85 int i; 86 87 mutex_lock(&qi->qi_tree_lock); 88 nr_found = radix_tree_gang_lookup(tree, (void **)batch, 89 next_index, XFS_DQ_LOOKUP_BATCH); 90 if (!nr_found) { 91 mutex_unlock(&qi->qi_tree_lock); 92 break; 93 } 94 95 for (i = 0; i < nr_found; i++) { 96 struct xfs_dquot *dqp = batch[i]; 97 98 next_index = be32_to_cpu(dqp->q_core.d_id) + 1; 99 100 error = execute(batch[i]); 101 if (error == EAGAIN) { 102 skipped++; 103 continue; 104 } 105 if (error && last_error != EFSCORRUPTED) 106 last_error = error; 107 } 108 109 mutex_unlock(&qi->qi_tree_lock); 110 111 /* bail out if the filesystem is corrupted. */ 112 if (last_error == EFSCORRUPTED) { 113 skipped = 0; 114 break; 115 } 116 } 117 118 if (skipped) { 119 delay(1); 120 goto restart; 121 } 122 123 return last_error; 124 } 125 126 127 /* 128 * Purge a dquot from all tracking data structures and free it. 129 */ 130 STATIC int 131 xfs_qm_dqpurge( 132 struct xfs_dquot *dqp) 133 { 134 struct xfs_mount *mp = dqp->q_mount; 135 struct xfs_quotainfo *qi = mp->m_quotainfo; 136 struct xfs_dquot *gdqp = NULL; 137 138 xfs_dqlock(dqp); 139 if ((dqp->dq_flags & XFS_DQ_FREEING) || dqp->q_nrefs != 0) { 140 xfs_dqunlock(dqp); 141 return EAGAIN; 142 } 143 144 /* 145 * If this quota has a group hint attached, prepare for releasing it 146 * now. 147 */ 148 gdqp = dqp->q_gdquot; 149 if (gdqp) { 150 xfs_dqlock(gdqp); 151 dqp->q_gdquot = NULL; 152 } 153 154 dqp->dq_flags |= XFS_DQ_FREEING; 155 156 /* 157 * If we're turning off quotas, we have to make sure that, for 158 * example, we don't delete quota disk blocks while dquots are 159 * in the process of getting written to those disk blocks. 160 * This dquot might well be on AIL, and we can't leave it there 161 * if we're turning off quotas. Basically, we need this flush 162 * lock, and are willing to block on it. 163 */ 164 if (!xfs_dqflock_nowait(dqp)) { 165 /* 166 * Block on the flush lock after nudging dquot buffer, 167 * if it is incore. 168 */ 169 xfs_dqflock_pushbuf_wait(dqp); 170 } 171 172 /* 173 * If we are turning this type of quotas off, we don't care 174 * about the dirty metadata sitting in this dquot. OTOH, if 175 * we're unmounting, we do care, so we flush it and wait. 176 */ 177 if (XFS_DQ_IS_DIRTY(dqp)) { 178 int error; 179 180 /* 181 * We don't care about getting disk errors here. We need 182 * to purge this dquot anyway, so we go ahead regardless. 183 */ 184 error = xfs_qm_dqflush(dqp, SYNC_WAIT); 185 if (error) 186 xfs_warn(mp, "%s: dquot %p flush failed", 187 __func__, dqp); 188 xfs_dqflock(dqp); 189 } 190 191 ASSERT(atomic_read(&dqp->q_pincount) == 0); 192 ASSERT(XFS_FORCED_SHUTDOWN(mp) || 193 !(dqp->q_logitem.qli_item.li_flags & XFS_LI_IN_AIL)); 194 195 xfs_dqfunlock(dqp); 196 xfs_dqunlock(dqp); 197 198 radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), 199 be32_to_cpu(dqp->q_core.d_id)); 200 qi->qi_dquots--; 201 202 /* 203 * We move dquots to the freelist as soon as their reference count 204 * hits zero, so it really should be on the freelist here. 205 */ 206 mutex_lock(&qi->qi_lru_lock); 207 ASSERT(!list_empty(&dqp->q_lru)); 208 list_del_init(&dqp->q_lru); 209 qi->qi_lru_count--; 210 XFS_STATS_DEC(xs_qm_dquot_unused); 211 mutex_unlock(&qi->qi_lru_lock); 212 213 xfs_qm_dqdestroy(dqp); 214 215 if (gdqp) 216 xfs_qm_dqput(gdqp); 217 return 0; 218 } 219 220 /* 221 * Purge the dquot cache. 222 */ 223 void 224 xfs_qm_dqpurge_all( 225 struct xfs_mount *mp, 226 uint flags) 227 { 228 if (flags & XFS_QMOPT_UQUOTA) 229 xfs_qm_dquot_walk(mp, XFS_DQ_USER, xfs_qm_dqpurge); 230 if (flags & XFS_QMOPT_GQUOTA) 231 xfs_qm_dquot_walk(mp, XFS_DQ_GROUP, xfs_qm_dqpurge); 232 if (flags & XFS_QMOPT_PQUOTA) 233 xfs_qm_dquot_walk(mp, XFS_DQ_PROJ, xfs_qm_dqpurge); 234 } 235 236 /* 237 * Just destroy the quotainfo structure. 238 */ 239 void 240 xfs_qm_unmount( 241 struct xfs_mount *mp) 242 { 243 if (mp->m_quotainfo) { 244 xfs_qm_dqpurge_all(mp, XFS_QMOPT_QUOTALL); 245 xfs_qm_destroy_quotainfo(mp); 246 } 247 } 248 249 250 /* 251 * This is called from xfs_mountfs to start quotas and initialize all 252 * necessary data structures like quotainfo. This is also responsible for 253 * running a quotacheck as necessary. We are guaranteed that the superblock 254 * is consistently read in at this point. 255 * 256 * If we fail here, the mount will continue with quota turned off. We don't 257 * need to inidicate success or failure at all. 258 */ 259 void 260 xfs_qm_mount_quotas( 261 xfs_mount_t *mp) 262 { 263 int error = 0; 264 uint sbf; 265 266 /* 267 * If quotas on realtime volumes is not supported, we disable 268 * quotas immediately. 269 */ 270 if (mp->m_sb.sb_rextents) { 271 xfs_notice(mp, "Cannot turn on quotas for realtime filesystem"); 272 mp->m_qflags = 0; 273 goto write_changes; 274 } 275 276 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 277 278 /* 279 * Allocate the quotainfo structure inside the mount struct, and 280 * create quotainode(s), and change/rev superblock if necessary. 281 */ 282 error = xfs_qm_init_quotainfo(mp); 283 if (error) { 284 /* 285 * We must turn off quotas. 286 */ 287 ASSERT(mp->m_quotainfo == NULL); 288 mp->m_qflags = 0; 289 goto write_changes; 290 } 291 /* 292 * If any of the quotas are not consistent, do a quotacheck. 293 */ 294 if (XFS_QM_NEED_QUOTACHECK(mp)) { 295 error = xfs_qm_quotacheck(mp); 296 if (error) { 297 /* Quotacheck failed and disabled quotas. */ 298 return; 299 } 300 } 301 /* 302 * If one type of quotas is off, then it will lose its 303 * quotachecked status, since we won't be doing accounting for 304 * that type anymore. 305 */ 306 if (!XFS_IS_UQUOTA_ON(mp)) 307 mp->m_qflags &= ~XFS_UQUOTA_CHKD; 308 if (!(XFS_IS_GQUOTA_ON(mp) || XFS_IS_PQUOTA_ON(mp))) 309 mp->m_qflags &= ~XFS_OQUOTA_CHKD; 310 311 write_changes: 312 /* 313 * We actually don't have to acquire the m_sb_lock at all. 314 * This can only be called from mount, and that's single threaded. XXX 315 */ 316 spin_lock(&mp->m_sb_lock); 317 sbf = mp->m_sb.sb_qflags; 318 mp->m_sb.sb_qflags = mp->m_qflags & XFS_MOUNT_QUOTA_ALL; 319 spin_unlock(&mp->m_sb_lock); 320 321 if (sbf != (mp->m_qflags & XFS_MOUNT_QUOTA_ALL)) { 322 if (xfs_qm_write_sb_changes(mp, XFS_SB_QFLAGS)) { 323 /* 324 * We could only have been turning quotas off. 325 * We aren't in very good shape actually because 326 * the incore structures are convinced that quotas are 327 * off, but the on disk superblock doesn't know that ! 328 */ 329 ASSERT(!(XFS_IS_QUOTA_RUNNING(mp))); 330 xfs_alert(mp, "%s: Superblock update failed!", 331 __func__); 332 } 333 } 334 335 if (error) { 336 xfs_warn(mp, "Failed to initialize disk quotas."); 337 return; 338 } 339 } 340 341 /* 342 * Called from the vfsops layer. 343 */ 344 void 345 xfs_qm_unmount_quotas( 346 xfs_mount_t *mp) 347 { 348 /* 349 * Release the dquots that root inode, et al might be holding, 350 * before we flush quotas and blow away the quotainfo structure. 351 */ 352 ASSERT(mp->m_rootip); 353 xfs_qm_dqdetach(mp->m_rootip); 354 if (mp->m_rbmip) 355 xfs_qm_dqdetach(mp->m_rbmip); 356 if (mp->m_rsumip) 357 xfs_qm_dqdetach(mp->m_rsumip); 358 359 /* 360 * Release the quota inodes. 361 */ 362 if (mp->m_quotainfo) { 363 if (mp->m_quotainfo->qi_uquotaip) { 364 IRELE(mp->m_quotainfo->qi_uquotaip); 365 mp->m_quotainfo->qi_uquotaip = NULL; 366 } 367 if (mp->m_quotainfo->qi_gquotaip) { 368 IRELE(mp->m_quotainfo->qi_gquotaip); 369 mp->m_quotainfo->qi_gquotaip = NULL; 370 } 371 } 372 } 373 374 STATIC int 375 xfs_qm_dqattach_one( 376 xfs_inode_t *ip, 377 xfs_dqid_t id, 378 uint type, 379 uint doalloc, 380 xfs_dquot_t *udqhint, /* hint */ 381 xfs_dquot_t **IO_idqpp) 382 { 383 xfs_dquot_t *dqp; 384 int error; 385 386 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 387 error = 0; 388 389 /* 390 * See if we already have it in the inode itself. IO_idqpp is 391 * &i_udquot or &i_gdquot. This made the code look weird, but 392 * made the logic a lot simpler. 393 */ 394 dqp = *IO_idqpp; 395 if (dqp) { 396 trace_xfs_dqattach_found(dqp); 397 return 0; 398 } 399 400 /* 401 * udqhint is the i_udquot field in inode, and is non-NULL only 402 * when the type arg is group/project. Its purpose is to save a 403 * lookup by dqid (xfs_qm_dqget) by caching a group dquot inside 404 * the user dquot. 405 */ 406 if (udqhint) { 407 ASSERT(type == XFS_DQ_GROUP || type == XFS_DQ_PROJ); 408 xfs_dqlock(udqhint); 409 410 /* 411 * No need to take dqlock to look at the id. 412 * 413 * The ID can't change until it gets reclaimed, and it won't 414 * be reclaimed as long as we have a ref from inode and we 415 * hold the ilock. 416 */ 417 dqp = udqhint->q_gdquot; 418 if (dqp && be32_to_cpu(dqp->q_core.d_id) == id) { 419 ASSERT(*IO_idqpp == NULL); 420 421 *IO_idqpp = xfs_qm_dqhold(dqp); 422 xfs_dqunlock(udqhint); 423 return 0; 424 } 425 426 /* 427 * We can't hold a dquot lock when we call the dqget code. 428 * We'll deadlock in no time, because of (not conforming to) 429 * lock ordering - the inodelock comes before any dquot lock, 430 * and we may drop and reacquire the ilock in xfs_qm_dqget(). 431 */ 432 xfs_dqunlock(udqhint); 433 } 434 435 /* 436 * Find the dquot from somewhere. This bumps the 437 * reference count of dquot and returns it locked. 438 * This can return ENOENT if dquot didn't exist on 439 * disk and we didn't ask it to allocate; 440 * ESRCH if quotas got turned off suddenly. 441 */ 442 error = xfs_qm_dqget(ip->i_mount, ip, id, type, 443 doalloc | XFS_QMOPT_DOWARN, &dqp); 444 if (error) 445 return error; 446 447 trace_xfs_dqattach_get(dqp); 448 449 /* 450 * dqget may have dropped and re-acquired the ilock, but it guarantees 451 * that the dquot returned is the one that should go in the inode. 452 */ 453 *IO_idqpp = dqp; 454 xfs_dqunlock(dqp); 455 return 0; 456 } 457 458 459 /* 460 * Given a udquot and gdquot, attach a ptr to the group dquot in the 461 * udquot as a hint for future lookups. 462 */ 463 STATIC void 464 xfs_qm_dqattach_grouphint( 465 xfs_dquot_t *udq, 466 xfs_dquot_t *gdq) 467 { 468 xfs_dquot_t *tmp; 469 470 xfs_dqlock(udq); 471 472 tmp = udq->q_gdquot; 473 if (tmp) { 474 if (tmp == gdq) 475 goto done; 476 477 udq->q_gdquot = NULL; 478 xfs_qm_dqrele(tmp); 479 } 480 481 udq->q_gdquot = xfs_qm_dqhold(gdq); 482 done: 483 xfs_dqunlock(udq); 484 } 485 486 487 /* 488 * Given a locked inode, attach dquot(s) to it, taking U/G/P-QUOTAON 489 * into account. 490 * If XFS_QMOPT_DQALLOC, the dquot(s) will be allocated if needed. 491 * Inode may get unlocked and relocked in here, and the caller must deal with 492 * the consequences. 493 */ 494 int 495 xfs_qm_dqattach_locked( 496 xfs_inode_t *ip, 497 uint flags) 498 { 499 xfs_mount_t *mp = ip->i_mount; 500 uint nquotas = 0; 501 int error = 0; 502 503 if (!XFS_IS_QUOTA_RUNNING(mp) || 504 !XFS_IS_QUOTA_ON(mp) || 505 !XFS_NOT_DQATTACHED(mp, ip) || 506 ip->i_ino == mp->m_sb.sb_uquotino || 507 ip->i_ino == mp->m_sb.sb_gquotino) 508 return 0; 509 510 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 511 512 if (XFS_IS_UQUOTA_ON(mp)) { 513 error = xfs_qm_dqattach_one(ip, ip->i_d.di_uid, XFS_DQ_USER, 514 flags & XFS_QMOPT_DQALLOC, 515 NULL, &ip->i_udquot); 516 if (error) 517 goto done; 518 nquotas++; 519 } 520 521 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 522 if (XFS_IS_OQUOTA_ON(mp)) { 523 error = XFS_IS_GQUOTA_ON(mp) ? 524 xfs_qm_dqattach_one(ip, ip->i_d.di_gid, XFS_DQ_GROUP, 525 flags & XFS_QMOPT_DQALLOC, 526 ip->i_udquot, &ip->i_gdquot) : 527 xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, 528 flags & XFS_QMOPT_DQALLOC, 529 ip->i_udquot, &ip->i_gdquot); 530 /* 531 * Don't worry about the udquot that we may have 532 * attached above. It'll get detached, if not already. 533 */ 534 if (error) 535 goto done; 536 nquotas++; 537 } 538 539 /* 540 * Attach this group quota to the user quota as a hint. 541 * This WON'T, in general, result in a thrash. 542 */ 543 if (nquotas == 2) { 544 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 545 ASSERT(ip->i_udquot); 546 ASSERT(ip->i_gdquot); 547 548 /* 549 * We do not have i_udquot locked at this point, but this check 550 * is OK since we don't depend on the i_gdquot to be accurate 551 * 100% all the time. It is just a hint, and this will 552 * succeed in general. 553 */ 554 if (ip->i_udquot->q_gdquot != ip->i_gdquot) 555 xfs_qm_dqattach_grouphint(ip->i_udquot, ip->i_gdquot); 556 } 557 558 done: 559 #ifdef DEBUG 560 if (!error) { 561 if (XFS_IS_UQUOTA_ON(mp)) 562 ASSERT(ip->i_udquot); 563 if (XFS_IS_OQUOTA_ON(mp)) 564 ASSERT(ip->i_gdquot); 565 } 566 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 567 #endif 568 return error; 569 } 570 571 int 572 xfs_qm_dqattach( 573 struct xfs_inode *ip, 574 uint flags) 575 { 576 int error; 577 578 xfs_ilock(ip, XFS_ILOCK_EXCL); 579 error = xfs_qm_dqattach_locked(ip, flags); 580 xfs_iunlock(ip, XFS_ILOCK_EXCL); 581 582 return error; 583 } 584 585 /* 586 * Release dquots (and their references) if any. 587 * The inode should be locked EXCL except when this's called by 588 * xfs_ireclaim. 589 */ 590 void 591 xfs_qm_dqdetach( 592 xfs_inode_t *ip) 593 { 594 if (!(ip->i_udquot || ip->i_gdquot)) 595 return; 596 597 trace_xfs_dquot_dqdetach(ip); 598 599 ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_uquotino); 600 ASSERT(ip->i_ino != ip->i_mount->m_sb.sb_gquotino); 601 if (ip->i_udquot) { 602 xfs_qm_dqrele(ip->i_udquot); 603 ip->i_udquot = NULL; 604 } 605 if (ip->i_gdquot) { 606 xfs_qm_dqrele(ip->i_gdquot); 607 ip->i_gdquot = NULL; 608 } 609 } 610 611 /* 612 * This initializes all the quota information that's kept in the 613 * mount structure 614 */ 615 STATIC int 616 xfs_qm_init_quotainfo( 617 xfs_mount_t *mp) 618 { 619 xfs_quotainfo_t *qinf; 620 int error; 621 xfs_dquot_t *dqp; 622 623 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 624 625 qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP); 626 627 /* 628 * See if quotainodes are setup, and if not, allocate them, 629 * and change the superblock accordingly. 630 */ 631 if ((error = xfs_qm_init_quotainos(mp))) { 632 kmem_free(qinf); 633 mp->m_quotainfo = NULL; 634 return error; 635 } 636 637 INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); 638 INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); 639 mutex_init(&qinf->qi_tree_lock); 640 641 INIT_LIST_HEAD(&qinf->qi_lru_list); 642 qinf->qi_lru_count = 0; 643 mutex_init(&qinf->qi_lru_lock); 644 645 /* mutex used to serialize quotaoffs */ 646 mutex_init(&qinf->qi_quotaofflock); 647 648 /* Precalc some constants */ 649 qinf->qi_dqchunklen = XFS_FSB_TO_BB(mp, XFS_DQUOT_CLUSTER_SIZE_FSB); 650 ASSERT(qinf->qi_dqchunklen); 651 qinf->qi_dqperchunk = BBTOB(qinf->qi_dqchunklen); 652 do_div(qinf->qi_dqperchunk, sizeof(xfs_dqblk_t)); 653 654 mp->m_qflags |= (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_CHKD); 655 656 /* 657 * We try to get the limits from the superuser's limits fields. 658 * This is quite hacky, but it is standard quota practice. 659 * 660 * We look at the USR dquot with id == 0 first, but if user quotas 661 * are not enabled we goto the GRP dquot with id == 0. 662 * We don't really care to keep separate default limits for user 663 * and group quotas, at least not at this point. 664 * 665 * Since we may not have done a quotacheck by this point, just read 666 * the dquot without attaching it to any hashtables or lists. 667 */ 668 error = xfs_qm_dqread(mp, 0, 669 XFS_IS_UQUOTA_RUNNING(mp) ? XFS_DQ_USER : 670 (XFS_IS_GQUOTA_RUNNING(mp) ? XFS_DQ_GROUP : 671 XFS_DQ_PROJ), 672 XFS_QMOPT_DOWARN, &dqp); 673 if (!error) { 674 xfs_disk_dquot_t *ddqp = &dqp->q_core; 675 676 /* 677 * The warnings and timers set the grace period given to 678 * a user or group before he or she can not perform any 679 * more writing. If it is zero, a default is used. 680 */ 681 qinf->qi_btimelimit = ddqp->d_btimer ? 682 be32_to_cpu(ddqp->d_btimer) : XFS_QM_BTIMELIMIT; 683 qinf->qi_itimelimit = ddqp->d_itimer ? 684 be32_to_cpu(ddqp->d_itimer) : XFS_QM_ITIMELIMIT; 685 qinf->qi_rtbtimelimit = ddqp->d_rtbtimer ? 686 be32_to_cpu(ddqp->d_rtbtimer) : XFS_QM_RTBTIMELIMIT; 687 qinf->qi_bwarnlimit = ddqp->d_bwarns ? 688 be16_to_cpu(ddqp->d_bwarns) : XFS_QM_BWARNLIMIT; 689 qinf->qi_iwarnlimit = ddqp->d_iwarns ? 690 be16_to_cpu(ddqp->d_iwarns) : XFS_QM_IWARNLIMIT; 691 qinf->qi_rtbwarnlimit = ddqp->d_rtbwarns ? 692 be16_to_cpu(ddqp->d_rtbwarns) : XFS_QM_RTBWARNLIMIT; 693 qinf->qi_bhardlimit = be64_to_cpu(ddqp->d_blk_hardlimit); 694 qinf->qi_bsoftlimit = be64_to_cpu(ddqp->d_blk_softlimit); 695 qinf->qi_ihardlimit = be64_to_cpu(ddqp->d_ino_hardlimit); 696 qinf->qi_isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit); 697 qinf->qi_rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit); 698 qinf->qi_rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit); 699 700 xfs_qm_dqdestroy(dqp); 701 } else { 702 qinf->qi_btimelimit = XFS_QM_BTIMELIMIT; 703 qinf->qi_itimelimit = XFS_QM_ITIMELIMIT; 704 qinf->qi_rtbtimelimit = XFS_QM_RTBTIMELIMIT; 705 qinf->qi_bwarnlimit = XFS_QM_BWARNLIMIT; 706 qinf->qi_iwarnlimit = XFS_QM_IWARNLIMIT; 707 qinf->qi_rtbwarnlimit = XFS_QM_RTBWARNLIMIT; 708 } 709 710 qinf->qi_shrinker.shrink = xfs_qm_shake; 711 qinf->qi_shrinker.seeks = DEFAULT_SEEKS; 712 register_shrinker(&qinf->qi_shrinker); 713 return 0; 714 } 715 716 717 /* 718 * Gets called when unmounting a filesystem or when all quotas get 719 * turned off. 720 * This purges the quota inodes, destroys locks and frees itself. 721 */ 722 void 723 xfs_qm_destroy_quotainfo( 724 xfs_mount_t *mp) 725 { 726 xfs_quotainfo_t *qi; 727 728 qi = mp->m_quotainfo; 729 ASSERT(qi != NULL); 730 731 unregister_shrinker(&qi->qi_shrinker); 732 733 if (qi->qi_uquotaip) { 734 IRELE(qi->qi_uquotaip); 735 qi->qi_uquotaip = NULL; /* paranoia */ 736 } 737 if (qi->qi_gquotaip) { 738 IRELE(qi->qi_gquotaip); 739 qi->qi_gquotaip = NULL; 740 } 741 mutex_destroy(&qi->qi_quotaofflock); 742 kmem_free(qi); 743 mp->m_quotainfo = NULL; 744 } 745 746 /* 747 * Create an inode and return with a reference already taken, but unlocked 748 * This is how we create quota inodes 749 */ 750 STATIC int 751 xfs_qm_qino_alloc( 752 xfs_mount_t *mp, 753 xfs_inode_t **ip, 754 __int64_t sbfields, 755 uint flags) 756 { 757 xfs_trans_t *tp; 758 int error; 759 int committed; 760 761 tp = xfs_trans_alloc(mp, XFS_TRANS_QM_QINOCREATE); 762 if ((error = xfs_trans_reserve(tp, 763 XFS_QM_QINOCREATE_SPACE_RES(mp), 764 XFS_CREATE_LOG_RES(mp), 0, 765 XFS_TRANS_PERM_LOG_RES, 766 XFS_CREATE_LOG_COUNT))) { 767 xfs_trans_cancel(tp, 0); 768 return error; 769 } 770 771 error = xfs_dir_ialloc(&tp, NULL, S_IFREG, 1, 0, 0, 1, ip, &committed); 772 if (error) { 773 xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | 774 XFS_TRANS_ABORT); 775 return error; 776 } 777 778 /* 779 * Make the changes in the superblock, and log those too. 780 * sbfields arg may contain fields other than *QUOTINO; 781 * VERSIONNUM for example. 782 */ 783 spin_lock(&mp->m_sb_lock); 784 if (flags & XFS_QMOPT_SBVERSION) { 785 ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); 786 ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 787 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == 788 (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 789 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); 790 791 xfs_sb_version_addquota(&mp->m_sb); 792 mp->m_sb.sb_uquotino = NULLFSINO; 793 mp->m_sb.sb_gquotino = NULLFSINO; 794 795 /* qflags will get updated _after_ quotacheck */ 796 mp->m_sb.sb_qflags = 0; 797 } 798 if (flags & XFS_QMOPT_UQUOTA) 799 mp->m_sb.sb_uquotino = (*ip)->i_ino; 800 else 801 mp->m_sb.sb_gquotino = (*ip)->i_ino; 802 spin_unlock(&mp->m_sb_lock); 803 xfs_mod_sb(tp, sbfields); 804 805 if ((error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES))) { 806 xfs_alert(mp, "%s failed (error %d)!", __func__, error); 807 return error; 808 } 809 return 0; 810 } 811 812 813 STATIC void 814 xfs_qm_reset_dqcounts( 815 xfs_mount_t *mp, 816 xfs_buf_t *bp, 817 xfs_dqid_t id, 818 uint type) 819 { 820 xfs_disk_dquot_t *ddq; 821 int j; 822 823 trace_xfs_reset_dqcounts(bp, _RET_IP_); 824 825 /* 826 * Reset all counters and timers. They'll be 827 * started afresh by xfs_qm_quotacheck. 828 */ 829 #ifdef DEBUG 830 j = XFS_FSB_TO_B(mp, XFS_DQUOT_CLUSTER_SIZE_FSB); 831 do_div(j, sizeof(xfs_dqblk_t)); 832 ASSERT(mp->m_quotainfo->qi_dqperchunk == j); 833 #endif 834 ddq = bp->b_addr; 835 for (j = 0; j < mp->m_quotainfo->qi_dqperchunk; j++) { 836 /* 837 * Do a sanity check, and if needed, repair the dqblk. Don't 838 * output any warnings because it's perfectly possible to 839 * find uninitialised dquot blks. See comment in xfs_qm_dqcheck. 840 */ 841 (void) xfs_qm_dqcheck(mp, ddq, id+j, type, XFS_QMOPT_DQREPAIR, 842 "xfs_quotacheck"); 843 ddq->d_bcount = 0; 844 ddq->d_icount = 0; 845 ddq->d_rtbcount = 0; 846 ddq->d_btimer = 0; 847 ddq->d_itimer = 0; 848 ddq->d_rtbtimer = 0; 849 ddq->d_bwarns = 0; 850 ddq->d_iwarns = 0; 851 ddq->d_rtbwarns = 0; 852 ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1); 853 } 854 } 855 856 STATIC int 857 xfs_qm_dqiter_bufs( 858 xfs_mount_t *mp, 859 xfs_dqid_t firstid, 860 xfs_fsblock_t bno, 861 xfs_filblks_t blkcnt, 862 uint flags) 863 { 864 xfs_buf_t *bp; 865 int error; 866 int type; 867 868 ASSERT(blkcnt > 0); 869 type = flags & XFS_QMOPT_UQUOTA ? XFS_DQ_USER : 870 (flags & XFS_QMOPT_PQUOTA ? XFS_DQ_PROJ : XFS_DQ_GROUP); 871 error = 0; 872 873 /* 874 * Blkcnt arg can be a very big number, and might even be 875 * larger than the log itself. So, we have to break it up into 876 * manageable-sized transactions. 877 * Note that we don't start a permanent transaction here; we might 878 * not be able to get a log reservation for the whole thing up front, 879 * and we don't really care to either, because we just discard 880 * everything if we were to crash in the middle of this loop. 881 */ 882 while (blkcnt--) { 883 error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, 884 XFS_FSB_TO_DADDR(mp, bno), 885 mp->m_quotainfo->qi_dqchunklen, 0, &bp); 886 if (error) 887 break; 888 889 xfs_qm_reset_dqcounts(mp, bp, firstid, type); 890 xfs_buf_delwri_queue(bp); 891 xfs_buf_relse(bp); 892 /* 893 * goto the next block. 894 */ 895 bno++; 896 firstid += mp->m_quotainfo->qi_dqperchunk; 897 } 898 return error; 899 } 900 901 /* 902 * Iterate over all allocated USR/GRP/PRJ dquots in the system, calling a 903 * caller supplied function for every chunk of dquots that we find. 904 */ 905 STATIC int 906 xfs_qm_dqiterate( 907 xfs_mount_t *mp, 908 xfs_inode_t *qip, 909 uint flags) 910 { 911 xfs_bmbt_irec_t *map; 912 int i, nmaps; /* number of map entries */ 913 int error; /* return value */ 914 xfs_fileoff_t lblkno; 915 xfs_filblks_t maxlblkcnt; 916 xfs_dqid_t firstid; 917 xfs_fsblock_t rablkno; 918 xfs_filblks_t rablkcnt; 919 920 error = 0; 921 /* 922 * This looks racy, but we can't keep an inode lock across a 923 * trans_reserve. But, this gets called during quotacheck, and that 924 * happens only at mount time which is single threaded. 925 */ 926 if (qip->i_d.di_nblocks == 0) 927 return 0; 928 929 map = kmem_alloc(XFS_DQITER_MAP_SIZE * sizeof(*map), KM_SLEEP); 930 931 lblkno = 0; 932 maxlblkcnt = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_MAXIOFFSET(mp)); 933 do { 934 nmaps = XFS_DQITER_MAP_SIZE; 935 /* 936 * We aren't changing the inode itself. Just changing 937 * some of its data. No new blocks are added here, and 938 * the inode is never added to the transaction. 939 */ 940 xfs_ilock(qip, XFS_ILOCK_SHARED); 941 error = xfs_bmapi_read(qip, lblkno, maxlblkcnt - lblkno, 942 map, &nmaps, 0); 943 xfs_iunlock(qip, XFS_ILOCK_SHARED); 944 if (error) 945 break; 946 947 ASSERT(nmaps <= XFS_DQITER_MAP_SIZE); 948 for (i = 0; i < nmaps; i++) { 949 ASSERT(map[i].br_startblock != DELAYSTARTBLOCK); 950 ASSERT(map[i].br_blockcount); 951 952 953 lblkno += map[i].br_blockcount; 954 955 if (map[i].br_startblock == HOLESTARTBLOCK) 956 continue; 957 958 firstid = (xfs_dqid_t) map[i].br_startoff * 959 mp->m_quotainfo->qi_dqperchunk; 960 /* 961 * Do a read-ahead on the next extent. 962 */ 963 if ((i+1 < nmaps) && 964 (map[i+1].br_startblock != HOLESTARTBLOCK)) { 965 rablkcnt = map[i+1].br_blockcount; 966 rablkno = map[i+1].br_startblock; 967 while (rablkcnt--) { 968 xfs_buf_readahead(mp->m_ddev_targp, 969 XFS_FSB_TO_DADDR(mp, rablkno), 970 mp->m_quotainfo->qi_dqchunklen); 971 rablkno++; 972 } 973 } 974 /* 975 * Iterate thru all the blks in the extent and 976 * reset the counters of all the dquots inside them. 977 */ 978 if ((error = xfs_qm_dqiter_bufs(mp, 979 firstid, 980 map[i].br_startblock, 981 map[i].br_blockcount, 982 flags))) { 983 break; 984 } 985 } 986 987 if (error) 988 break; 989 } while (nmaps > 0); 990 991 kmem_free(map); 992 993 return error; 994 } 995 996 /* 997 * Called by dqusage_adjust in doing a quotacheck. 998 * 999 * Given the inode, and a dquot id this updates both the incore dqout as well 1000 * as the buffer copy. This is so that once the quotacheck is done, we can 1001 * just log all the buffers, as opposed to logging numerous updates to 1002 * individual dquots. 1003 */ 1004 STATIC int 1005 xfs_qm_quotacheck_dqadjust( 1006 struct xfs_inode *ip, 1007 xfs_dqid_t id, 1008 uint type, 1009 xfs_qcnt_t nblks, 1010 xfs_qcnt_t rtblks) 1011 { 1012 struct xfs_mount *mp = ip->i_mount; 1013 struct xfs_dquot *dqp; 1014 int error; 1015 1016 error = xfs_qm_dqget(mp, ip, id, type, 1017 XFS_QMOPT_DQALLOC | XFS_QMOPT_DOWARN, &dqp); 1018 if (error) { 1019 /* 1020 * Shouldn't be able to turn off quotas here. 1021 */ 1022 ASSERT(error != ESRCH); 1023 ASSERT(error != ENOENT); 1024 return error; 1025 } 1026 1027 trace_xfs_dqadjust(dqp); 1028 1029 /* 1030 * Adjust the inode count and the block count to reflect this inode's 1031 * resource usage. 1032 */ 1033 be64_add_cpu(&dqp->q_core.d_icount, 1); 1034 dqp->q_res_icount++; 1035 if (nblks) { 1036 be64_add_cpu(&dqp->q_core.d_bcount, nblks); 1037 dqp->q_res_bcount += nblks; 1038 } 1039 if (rtblks) { 1040 be64_add_cpu(&dqp->q_core.d_rtbcount, rtblks); 1041 dqp->q_res_rtbcount += rtblks; 1042 } 1043 1044 /* 1045 * Set default limits, adjust timers (since we changed usages) 1046 * 1047 * There are no timers for the default values set in the root dquot. 1048 */ 1049 if (dqp->q_core.d_id) { 1050 xfs_qm_adjust_dqlimits(mp, &dqp->q_core); 1051 xfs_qm_adjust_dqtimers(mp, &dqp->q_core); 1052 } 1053 1054 dqp->dq_flags |= XFS_DQ_DIRTY; 1055 xfs_qm_dqput(dqp); 1056 return 0; 1057 } 1058 1059 STATIC int 1060 xfs_qm_get_rtblks( 1061 xfs_inode_t *ip, 1062 xfs_qcnt_t *O_rtblks) 1063 { 1064 xfs_filblks_t rtblks; /* total rt blks */ 1065 xfs_extnum_t idx; /* extent record index */ 1066 xfs_ifork_t *ifp; /* inode fork pointer */ 1067 xfs_extnum_t nextents; /* number of extent entries */ 1068 int error; 1069 1070 ASSERT(XFS_IS_REALTIME_INODE(ip)); 1071 ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); 1072 if (!(ifp->if_flags & XFS_IFEXTENTS)) { 1073 if ((error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK))) 1074 return error; 1075 } 1076 rtblks = 0; 1077 nextents = ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t); 1078 for (idx = 0; idx < nextents; idx++) 1079 rtblks += xfs_bmbt_get_blockcount(xfs_iext_get_ext(ifp, idx)); 1080 *O_rtblks = (xfs_qcnt_t)rtblks; 1081 return 0; 1082 } 1083 1084 /* 1085 * callback routine supplied to bulkstat(). Given an inumber, find its 1086 * dquots and update them to account for resources taken by that inode. 1087 */ 1088 /* ARGSUSED */ 1089 STATIC int 1090 xfs_qm_dqusage_adjust( 1091 xfs_mount_t *mp, /* mount point for filesystem */ 1092 xfs_ino_t ino, /* inode number to get data for */ 1093 void __user *buffer, /* not used */ 1094 int ubsize, /* not used */ 1095 int *ubused, /* not used */ 1096 int *res) /* result code value */ 1097 { 1098 xfs_inode_t *ip; 1099 xfs_qcnt_t nblks, rtblks = 0; 1100 int error; 1101 1102 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1103 1104 /* 1105 * rootino must have its resources accounted for, not so with the quota 1106 * inodes. 1107 */ 1108 if (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino) { 1109 *res = BULKSTAT_RV_NOTHING; 1110 return XFS_ERROR(EINVAL); 1111 } 1112 1113 /* 1114 * We don't _need_ to take the ilock EXCL. However, the xfs_qm_dqget 1115 * interface expects the inode to be exclusively locked because that's 1116 * the case in all other instances. It's OK that we do this because 1117 * quotacheck is done only at mount time. 1118 */ 1119 error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_EXCL, &ip); 1120 if (error) { 1121 *res = BULKSTAT_RV_NOTHING; 1122 return error; 1123 } 1124 1125 ASSERT(ip->i_delayed_blks == 0); 1126 1127 if (XFS_IS_REALTIME_INODE(ip)) { 1128 /* 1129 * Walk thru the extent list and count the realtime blocks. 1130 */ 1131 error = xfs_qm_get_rtblks(ip, &rtblks); 1132 if (error) 1133 goto error0; 1134 } 1135 1136 nblks = (xfs_qcnt_t)ip->i_d.di_nblocks - rtblks; 1137 1138 /* 1139 * Add the (disk blocks and inode) resources occupied by this 1140 * inode to its dquots. We do this adjustment in the incore dquot, 1141 * and also copy the changes to its buffer. 1142 * We don't care about putting these changes in a transaction 1143 * envelope because if we crash in the middle of a 'quotacheck' 1144 * we have to start from the beginning anyway. 1145 * Once we're done, we'll log all the dquot bufs. 1146 * 1147 * The *QUOTA_ON checks below may look pretty racy, but quotachecks 1148 * and quotaoffs don't race. (Quotachecks happen at mount time only). 1149 */ 1150 if (XFS_IS_UQUOTA_ON(mp)) { 1151 error = xfs_qm_quotacheck_dqadjust(ip, ip->i_d.di_uid, 1152 XFS_DQ_USER, nblks, rtblks); 1153 if (error) 1154 goto error0; 1155 } 1156 1157 if (XFS_IS_GQUOTA_ON(mp)) { 1158 error = xfs_qm_quotacheck_dqadjust(ip, ip->i_d.di_gid, 1159 XFS_DQ_GROUP, nblks, rtblks); 1160 if (error) 1161 goto error0; 1162 } 1163 1164 if (XFS_IS_PQUOTA_ON(mp)) { 1165 error = xfs_qm_quotacheck_dqadjust(ip, xfs_get_projid(ip), 1166 XFS_DQ_PROJ, nblks, rtblks); 1167 if (error) 1168 goto error0; 1169 } 1170 1171 xfs_iunlock(ip, XFS_ILOCK_EXCL); 1172 IRELE(ip); 1173 *res = BULKSTAT_RV_DIDONE; 1174 return 0; 1175 1176 error0: 1177 xfs_iunlock(ip, XFS_ILOCK_EXCL); 1178 IRELE(ip); 1179 *res = BULKSTAT_RV_GIVEUP; 1180 return error; 1181 } 1182 1183 STATIC int 1184 xfs_qm_flush_one( 1185 struct xfs_dquot *dqp) 1186 { 1187 int error = 0; 1188 1189 xfs_dqlock(dqp); 1190 if (dqp->dq_flags & XFS_DQ_FREEING) 1191 goto out_unlock; 1192 if (!XFS_DQ_IS_DIRTY(dqp)) 1193 goto out_unlock; 1194 1195 if (!xfs_dqflock_nowait(dqp)) 1196 xfs_dqflock_pushbuf_wait(dqp); 1197 1198 error = xfs_qm_dqflush(dqp, 0); 1199 1200 out_unlock: 1201 xfs_dqunlock(dqp); 1202 return error; 1203 } 1204 1205 /* 1206 * Walk thru all the filesystem inodes and construct a consistent view 1207 * of the disk quota world. If the quotacheck fails, disable quotas. 1208 */ 1209 int 1210 xfs_qm_quotacheck( 1211 xfs_mount_t *mp) 1212 { 1213 int done, count, error, error2; 1214 xfs_ino_t lastino; 1215 size_t structsz; 1216 xfs_inode_t *uip, *gip; 1217 uint flags; 1218 1219 count = INT_MAX; 1220 structsz = 1; 1221 lastino = 0; 1222 flags = 0; 1223 1224 ASSERT(mp->m_quotainfo->qi_uquotaip || mp->m_quotainfo->qi_gquotaip); 1225 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1226 1227 xfs_notice(mp, "Quotacheck needed: Please wait."); 1228 1229 /* 1230 * First we go thru all the dquots on disk, USR and GRP/PRJ, and reset 1231 * their counters to zero. We need a clean slate. 1232 * We don't log our changes till later. 1233 */ 1234 uip = mp->m_quotainfo->qi_uquotaip; 1235 if (uip) { 1236 error = xfs_qm_dqiterate(mp, uip, XFS_QMOPT_UQUOTA); 1237 if (error) 1238 goto error_return; 1239 flags |= XFS_UQUOTA_CHKD; 1240 } 1241 1242 gip = mp->m_quotainfo->qi_gquotaip; 1243 if (gip) { 1244 error = xfs_qm_dqiterate(mp, gip, XFS_IS_GQUOTA_ON(mp) ? 1245 XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); 1246 if (error) 1247 goto error_return; 1248 flags |= XFS_OQUOTA_CHKD; 1249 } 1250 1251 do { 1252 /* 1253 * Iterate thru all the inodes in the file system, 1254 * adjusting the corresponding dquot counters in core. 1255 */ 1256 error = xfs_bulkstat(mp, &lastino, &count, 1257 xfs_qm_dqusage_adjust, 1258 structsz, NULL, &done); 1259 if (error) 1260 break; 1261 1262 } while (!done); 1263 1264 /* 1265 * We've made all the changes that we need to make incore. Flush them 1266 * down to disk buffers if everything was updated successfully. 1267 */ 1268 if (XFS_IS_UQUOTA_ON(mp)) 1269 error = xfs_qm_dquot_walk(mp, XFS_DQ_USER, xfs_qm_flush_one); 1270 if (XFS_IS_GQUOTA_ON(mp)) { 1271 error2 = xfs_qm_dquot_walk(mp, XFS_DQ_GROUP, xfs_qm_flush_one); 1272 if (!error) 1273 error = error2; 1274 } 1275 if (XFS_IS_PQUOTA_ON(mp)) { 1276 error2 = xfs_qm_dquot_walk(mp, XFS_DQ_PROJ, xfs_qm_flush_one); 1277 if (!error) 1278 error = error2; 1279 } 1280 1281 /* 1282 * We can get this error if we couldn't do a dquot allocation inside 1283 * xfs_qm_dqusage_adjust (via bulkstat). We don't care about the 1284 * dirty dquots that might be cached, we just want to get rid of them 1285 * and turn quotaoff. The dquots won't be attached to any of the inodes 1286 * at this point (because we intentionally didn't in dqget_noattach). 1287 */ 1288 if (error) { 1289 xfs_qm_dqpurge_all(mp, XFS_QMOPT_QUOTALL); 1290 goto error_return; 1291 } 1292 1293 /* 1294 * We didn't log anything, because if we crashed, we'll have to 1295 * start the quotacheck from scratch anyway. However, we must make 1296 * sure that our dquot changes are secure before we put the 1297 * quotacheck'd stamp on the superblock. So, here we do a synchronous 1298 * flush. 1299 */ 1300 xfs_flush_buftarg(mp->m_ddev_targp, 1); 1301 1302 /* 1303 * If one type of quotas is off, then it will lose its 1304 * quotachecked status, since we won't be doing accounting for 1305 * that type anymore. 1306 */ 1307 mp->m_qflags &= ~XFS_ALL_QUOTA_CHKD; 1308 mp->m_qflags |= flags; 1309 1310 error_return: 1311 if (error) { 1312 xfs_warn(mp, 1313 "Quotacheck: Unsuccessful (Error %d): Disabling quotas.", 1314 error); 1315 /* 1316 * We must turn off quotas. 1317 */ 1318 ASSERT(mp->m_quotainfo != NULL); 1319 xfs_qm_destroy_quotainfo(mp); 1320 if (xfs_mount_reset_sbqflags(mp)) { 1321 xfs_warn(mp, 1322 "Quotacheck: Failed to reset quota flags."); 1323 } 1324 } else 1325 xfs_notice(mp, "Quotacheck: Done."); 1326 return (error); 1327 } 1328 1329 /* 1330 * This is called after the superblock has been read in and we're ready to 1331 * iget the quota inodes. 1332 */ 1333 STATIC int 1334 xfs_qm_init_quotainos( 1335 xfs_mount_t *mp) 1336 { 1337 xfs_inode_t *uip, *gip; 1338 int error; 1339 __int64_t sbflags; 1340 uint flags; 1341 1342 ASSERT(mp->m_quotainfo); 1343 uip = gip = NULL; 1344 sbflags = 0; 1345 flags = 0; 1346 1347 /* 1348 * Get the uquota and gquota inodes 1349 */ 1350 if (xfs_sb_version_hasquota(&mp->m_sb)) { 1351 if (XFS_IS_UQUOTA_ON(mp) && 1352 mp->m_sb.sb_uquotino != NULLFSINO) { 1353 ASSERT(mp->m_sb.sb_uquotino > 0); 1354 if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_uquotino, 1355 0, 0, &uip))) 1356 return XFS_ERROR(error); 1357 } 1358 if (XFS_IS_OQUOTA_ON(mp) && 1359 mp->m_sb.sb_gquotino != NULLFSINO) { 1360 ASSERT(mp->m_sb.sb_gquotino > 0); 1361 if ((error = xfs_iget(mp, NULL, mp->m_sb.sb_gquotino, 1362 0, 0, &gip))) { 1363 if (uip) 1364 IRELE(uip); 1365 return XFS_ERROR(error); 1366 } 1367 } 1368 } else { 1369 flags |= XFS_QMOPT_SBVERSION; 1370 sbflags |= (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1371 XFS_SB_GQUOTINO | XFS_SB_QFLAGS); 1372 } 1373 1374 /* 1375 * Create the two inodes, if they don't exist already. The changes 1376 * made above will get added to a transaction and logged in one of 1377 * the qino_alloc calls below. If the device is readonly, 1378 * temporarily switch to read-write to do this. 1379 */ 1380 if (XFS_IS_UQUOTA_ON(mp) && uip == NULL) { 1381 if ((error = xfs_qm_qino_alloc(mp, &uip, 1382 sbflags | XFS_SB_UQUOTINO, 1383 flags | XFS_QMOPT_UQUOTA))) 1384 return XFS_ERROR(error); 1385 1386 flags &= ~XFS_QMOPT_SBVERSION; 1387 } 1388 if (XFS_IS_OQUOTA_ON(mp) && gip == NULL) { 1389 flags |= (XFS_IS_GQUOTA_ON(mp) ? 1390 XFS_QMOPT_GQUOTA : XFS_QMOPT_PQUOTA); 1391 error = xfs_qm_qino_alloc(mp, &gip, 1392 sbflags | XFS_SB_GQUOTINO, flags); 1393 if (error) { 1394 if (uip) 1395 IRELE(uip); 1396 1397 return XFS_ERROR(error); 1398 } 1399 } 1400 1401 mp->m_quotainfo->qi_uquotaip = uip; 1402 mp->m_quotainfo->qi_gquotaip = gip; 1403 1404 return 0; 1405 } 1406 1407 STATIC void 1408 xfs_qm_dqfree_one( 1409 struct xfs_dquot *dqp) 1410 { 1411 struct xfs_mount *mp = dqp->q_mount; 1412 struct xfs_quotainfo *qi = mp->m_quotainfo; 1413 1414 mutex_lock(&qi->qi_tree_lock); 1415 radix_tree_delete(XFS_DQUOT_TREE(qi, dqp->q_core.d_flags), 1416 be32_to_cpu(dqp->q_core.d_id)); 1417 1418 qi->qi_dquots--; 1419 mutex_unlock(&qi->qi_tree_lock); 1420 1421 xfs_qm_dqdestroy(dqp); 1422 } 1423 1424 STATIC void 1425 xfs_qm_dqreclaim_one( 1426 struct xfs_dquot *dqp, 1427 struct list_head *dispose_list) 1428 { 1429 struct xfs_mount *mp = dqp->q_mount; 1430 struct xfs_quotainfo *qi = mp->m_quotainfo; 1431 int error; 1432 1433 if (!xfs_dqlock_nowait(dqp)) 1434 goto out_busy; 1435 1436 /* 1437 * This dquot has acquired a reference in the meantime remove it from 1438 * the freelist and try again. 1439 */ 1440 if (dqp->q_nrefs) { 1441 xfs_dqunlock(dqp); 1442 1443 trace_xfs_dqreclaim_want(dqp); 1444 XFS_STATS_INC(xs_qm_dqwants); 1445 1446 list_del_init(&dqp->q_lru); 1447 qi->qi_lru_count--; 1448 XFS_STATS_DEC(xs_qm_dquot_unused); 1449 return; 1450 } 1451 1452 /* 1453 * Try to grab the flush lock. If this dquot is in the process of 1454 * getting flushed to disk, we don't want to reclaim it. 1455 */ 1456 if (!xfs_dqflock_nowait(dqp)) 1457 goto out_busy; 1458 1459 /* 1460 * We have the flush lock so we know that this is not in the 1461 * process of being flushed. So, if this is dirty, flush it 1462 * DELWRI so that we don't get a freelist infested with 1463 * dirty dquots. 1464 */ 1465 if (XFS_DQ_IS_DIRTY(dqp)) { 1466 trace_xfs_dqreclaim_dirty(dqp); 1467 1468 /* 1469 * We flush it delayed write, so don't bother releasing the 1470 * freelist lock. 1471 */ 1472 error = xfs_qm_dqflush(dqp, 0); 1473 if (error) { 1474 xfs_warn(mp, "%s: dquot %p flush failed", 1475 __func__, dqp); 1476 } 1477 1478 /* 1479 * Give the dquot another try on the freelist, as the 1480 * flushing will take some time. 1481 */ 1482 goto out_busy; 1483 } 1484 xfs_dqfunlock(dqp); 1485 1486 /* 1487 * Prevent lookups now that we are past the point of no return. 1488 */ 1489 dqp->dq_flags |= XFS_DQ_FREEING; 1490 xfs_dqunlock(dqp); 1491 1492 ASSERT(dqp->q_nrefs == 0); 1493 list_move_tail(&dqp->q_lru, dispose_list); 1494 qi->qi_lru_count--; 1495 XFS_STATS_DEC(xs_qm_dquot_unused); 1496 1497 trace_xfs_dqreclaim_done(dqp); 1498 XFS_STATS_INC(xs_qm_dqreclaims); 1499 return; 1500 1501 out_busy: 1502 xfs_dqunlock(dqp); 1503 1504 /* 1505 * Move the dquot to the tail of the list so that we don't spin on it. 1506 */ 1507 list_move_tail(&dqp->q_lru, &qi->qi_lru_list); 1508 1509 trace_xfs_dqreclaim_busy(dqp); 1510 XFS_STATS_INC(xs_qm_dqreclaim_misses); 1511 } 1512 1513 STATIC int 1514 xfs_qm_shake( 1515 struct shrinker *shrink, 1516 struct shrink_control *sc) 1517 { 1518 struct xfs_quotainfo *qi = 1519 container_of(shrink, struct xfs_quotainfo, qi_shrinker); 1520 int nr_to_scan = sc->nr_to_scan; 1521 LIST_HEAD (dispose_list); 1522 struct xfs_dquot *dqp; 1523 1524 if ((sc->gfp_mask & (__GFP_FS|__GFP_WAIT)) != (__GFP_FS|__GFP_WAIT)) 1525 return 0; 1526 if (!nr_to_scan) 1527 goto out; 1528 1529 mutex_lock(&qi->qi_lru_lock); 1530 while (!list_empty(&qi->qi_lru_list)) { 1531 if (nr_to_scan-- <= 0) 1532 break; 1533 dqp = list_first_entry(&qi->qi_lru_list, struct xfs_dquot, 1534 q_lru); 1535 xfs_qm_dqreclaim_one(dqp, &dispose_list); 1536 } 1537 mutex_unlock(&qi->qi_lru_lock); 1538 1539 while (!list_empty(&dispose_list)) { 1540 dqp = list_first_entry(&dispose_list, struct xfs_dquot, q_lru); 1541 list_del_init(&dqp->q_lru); 1542 xfs_qm_dqfree_one(dqp); 1543 } 1544 out: 1545 return (qi->qi_lru_count / 100) * sysctl_vfs_cache_pressure; 1546 } 1547 1548 /* 1549 * Start a transaction and write the incore superblock changes to 1550 * disk. flags parameter indicates which fields have changed. 1551 */ 1552 int 1553 xfs_qm_write_sb_changes( 1554 xfs_mount_t *mp, 1555 __int64_t flags) 1556 { 1557 xfs_trans_t *tp; 1558 int error; 1559 1560 tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE); 1561 if ((error = xfs_trans_reserve(tp, 0, 1562 mp->m_sb.sb_sectsize + 128, 0, 1563 0, 1564 XFS_DEFAULT_LOG_COUNT))) { 1565 xfs_trans_cancel(tp, 0); 1566 return error; 1567 } 1568 1569 xfs_mod_sb(tp, flags); 1570 error = xfs_trans_commit(tp, 0); 1571 1572 return error; 1573 } 1574 1575 1576 /* --------------- utility functions for vnodeops ---------------- */ 1577 1578 1579 /* 1580 * Given an inode, a uid, gid and prid make sure that we have 1581 * allocated relevant dquot(s) on disk, and that we won't exceed inode 1582 * quotas by creating this file. 1583 * This also attaches dquot(s) to the given inode after locking it, 1584 * and returns the dquots corresponding to the uid and/or gid. 1585 * 1586 * in : inode (unlocked) 1587 * out : udquot, gdquot with references taken and unlocked 1588 */ 1589 int 1590 xfs_qm_vop_dqalloc( 1591 struct xfs_inode *ip, 1592 uid_t uid, 1593 gid_t gid, 1594 prid_t prid, 1595 uint flags, 1596 struct xfs_dquot **O_udqpp, 1597 struct xfs_dquot **O_gdqpp) 1598 { 1599 struct xfs_mount *mp = ip->i_mount; 1600 struct xfs_dquot *uq, *gq; 1601 int error; 1602 uint lockflags; 1603 1604 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 1605 return 0; 1606 1607 lockflags = XFS_ILOCK_EXCL; 1608 xfs_ilock(ip, lockflags); 1609 1610 if ((flags & XFS_QMOPT_INHERIT) && XFS_INHERIT_GID(ip)) 1611 gid = ip->i_d.di_gid; 1612 1613 /* 1614 * Attach the dquot(s) to this inode, doing a dquot allocation 1615 * if necessary. The dquot(s) will not be locked. 1616 */ 1617 if (XFS_NOT_DQATTACHED(mp, ip)) { 1618 error = xfs_qm_dqattach_locked(ip, XFS_QMOPT_DQALLOC); 1619 if (error) { 1620 xfs_iunlock(ip, lockflags); 1621 return error; 1622 } 1623 } 1624 1625 uq = gq = NULL; 1626 if ((flags & XFS_QMOPT_UQUOTA) && XFS_IS_UQUOTA_ON(mp)) { 1627 if (ip->i_d.di_uid != uid) { 1628 /* 1629 * What we need is the dquot that has this uid, and 1630 * if we send the inode to dqget, the uid of the inode 1631 * takes priority over what's sent in the uid argument. 1632 * We must unlock inode here before calling dqget if 1633 * we're not sending the inode, because otherwise 1634 * we'll deadlock by doing trans_reserve while 1635 * holding ilock. 1636 */ 1637 xfs_iunlock(ip, lockflags); 1638 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t) uid, 1639 XFS_DQ_USER, 1640 XFS_QMOPT_DQALLOC | 1641 XFS_QMOPT_DOWARN, 1642 &uq))) { 1643 ASSERT(error != ENOENT); 1644 return error; 1645 } 1646 /* 1647 * Get the ilock in the right order. 1648 */ 1649 xfs_dqunlock(uq); 1650 lockflags = XFS_ILOCK_SHARED; 1651 xfs_ilock(ip, lockflags); 1652 } else { 1653 /* 1654 * Take an extra reference, because we'll return 1655 * this to caller 1656 */ 1657 ASSERT(ip->i_udquot); 1658 uq = xfs_qm_dqhold(ip->i_udquot); 1659 } 1660 } 1661 if ((flags & XFS_QMOPT_GQUOTA) && XFS_IS_GQUOTA_ON(mp)) { 1662 if (ip->i_d.di_gid != gid) { 1663 xfs_iunlock(ip, lockflags); 1664 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)gid, 1665 XFS_DQ_GROUP, 1666 XFS_QMOPT_DQALLOC | 1667 XFS_QMOPT_DOWARN, 1668 &gq))) { 1669 if (uq) 1670 xfs_qm_dqrele(uq); 1671 ASSERT(error != ENOENT); 1672 return error; 1673 } 1674 xfs_dqunlock(gq); 1675 lockflags = XFS_ILOCK_SHARED; 1676 xfs_ilock(ip, lockflags); 1677 } else { 1678 ASSERT(ip->i_gdquot); 1679 gq = xfs_qm_dqhold(ip->i_gdquot); 1680 } 1681 } else if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { 1682 if (xfs_get_projid(ip) != prid) { 1683 xfs_iunlock(ip, lockflags); 1684 if ((error = xfs_qm_dqget(mp, NULL, (xfs_dqid_t)prid, 1685 XFS_DQ_PROJ, 1686 XFS_QMOPT_DQALLOC | 1687 XFS_QMOPT_DOWARN, 1688 &gq))) { 1689 if (uq) 1690 xfs_qm_dqrele(uq); 1691 ASSERT(error != ENOENT); 1692 return (error); 1693 } 1694 xfs_dqunlock(gq); 1695 lockflags = XFS_ILOCK_SHARED; 1696 xfs_ilock(ip, lockflags); 1697 } else { 1698 ASSERT(ip->i_gdquot); 1699 gq = xfs_qm_dqhold(ip->i_gdquot); 1700 } 1701 } 1702 if (uq) 1703 trace_xfs_dquot_dqalloc(ip); 1704 1705 xfs_iunlock(ip, lockflags); 1706 if (O_udqpp) 1707 *O_udqpp = uq; 1708 else if (uq) 1709 xfs_qm_dqrele(uq); 1710 if (O_gdqpp) 1711 *O_gdqpp = gq; 1712 else if (gq) 1713 xfs_qm_dqrele(gq); 1714 return 0; 1715 } 1716 1717 /* 1718 * Actually transfer ownership, and do dquot modifications. 1719 * These were already reserved. 1720 */ 1721 xfs_dquot_t * 1722 xfs_qm_vop_chown( 1723 xfs_trans_t *tp, 1724 xfs_inode_t *ip, 1725 xfs_dquot_t **IO_olddq, 1726 xfs_dquot_t *newdq) 1727 { 1728 xfs_dquot_t *prevdq; 1729 uint bfield = XFS_IS_REALTIME_INODE(ip) ? 1730 XFS_TRANS_DQ_RTBCOUNT : XFS_TRANS_DQ_BCOUNT; 1731 1732 1733 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 1734 ASSERT(XFS_IS_QUOTA_RUNNING(ip->i_mount)); 1735 1736 /* old dquot */ 1737 prevdq = *IO_olddq; 1738 ASSERT(prevdq); 1739 ASSERT(prevdq != newdq); 1740 1741 xfs_trans_mod_dquot(tp, prevdq, bfield, -(ip->i_d.di_nblocks)); 1742 xfs_trans_mod_dquot(tp, prevdq, XFS_TRANS_DQ_ICOUNT, -1); 1743 1744 /* the sparkling new dquot */ 1745 xfs_trans_mod_dquot(tp, newdq, bfield, ip->i_d.di_nblocks); 1746 xfs_trans_mod_dquot(tp, newdq, XFS_TRANS_DQ_ICOUNT, 1); 1747 1748 /* 1749 * Take an extra reference, because the inode is going to keep 1750 * this dquot pointer even after the trans_commit. 1751 */ 1752 *IO_olddq = xfs_qm_dqhold(newdq); 1753 1754 return prevdq; 1755 } 1756 1757 /* 1758 * Quota reservations for setattr(AT_UID|AT_GID|AT_PROJID). 1759 */ 1760 int 1761 xfs_qm_vop_chown_reserve( 1762 xfs_trans_t *tp, 1763 xfs_inode_t *ip, 1764 xfs_dquot_t *udqp, 1765 xfs_dquot_t *gdqp, 1766 uint flags) 1767 { 1768 xfs_mount_t *mp = ip->i_mount; 1769 uint delblks, blkflags, prjflags = 0; 1770 xfs_dquot_t *unresudq, *unresgdq, *delblksudq, *delblksgdq; 1771 int error; 1772 1773 1774 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); 1775 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1776 1777 delblks = ip->i_delayed_blks; 1778 delblksudq = delblksgdq = unresudq = unresgdq = NULL; 1779 blkflags = XFS_IS_REALTIME_INODE(ip) ? 1780 XFS_QMOPT_RES_RTBLKS : XFS_QMOPT_RES_REGBLKS; 1781 1782 if (XFS_IS_UQUOTA_ON(mp) && udqp && 1783 ip->i_d.di_uid != (uid_t)be32_to_cpu(udqp->q_core.d_id)) { 1784 delblksudq = udqp; 1785 /* 1786 * If there are delayed allocation blocks, then we have to 1787 * unreserve those from the old dquot, and add them to the 1788 * new dquot. 1789 */ 1790 if (delblks) { 1791 ASSERT(ip->i_udquot); 1792 unresudq = ip->i_udquot; 1793 } 1794 } 1795 if (XFS_IS_OQUOTA_ON(ip->i_mount) && gdqp) { 1796 if (XFS_IS_PQUOTA_ON(ip->i_mount) && 1797 xfs_get_projid(ip) != be32_to_cpu(gdqp->q_core.d_id)) 1798 prjflags = XFS_QMOPT_ENOSPC; 1799 1800 if (prjflags || 1801 (XFS_IS_GQUOTA_ON(ip->i_mount) && 1802 ip->i_d.di_gid != be32_to_cpu(gdqp->q_core.d_id))) { 1803 delblksgdq = gdqp; 1804 if (delblks) { 1805 ASSERT(ip->i_gdquot); 1806 unresgdq = ip->i_gdquot; 1807 } 1808 } 1809 } 1810 1811 if ((error = xfs_trans_reserve_quota_bydquots(tp, ip->i_mount, 1812 delblksudq, delblksgdq, ip->i_d.di_nblocks, 1, 1813 flags | blkflags | prjflags))) 1814 return (error); 1815 1816 /* 1817 * Do the delayed blks reservations/unreservations now. Since, these 1818 * are done without the help of a transaction, if a reservation fails 1819 * its previous reservations won't be automatically undone by trans 1820 * code. So, we have to do it manually here. 1821 */ 1822 if (delblks) { 1823 /* 1824 * Do the reservations first. Unreservation can't fail. 1825 */ 1826 ASSERT(delblksudq || delblksgdq); 1827 ASSERT(unresudq || unresgdq); 1828 if ((error = xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, 1829 delblksudq, delblksgdq, (xfs_qcnt_t)delblks, 0, 1830 flags | blkflags | prjflags))) 1831 return (error); 1832 xfs_trans_reserve_quota_bydquots(NULL, ip->i_mount, 1833 unresudq, unresgdq, -((xfs_qcnt_t)delblks), 0, 1834 blkflags); 1835 } 1836 1837 return (0); 1838 } 1839 1840 int 1841 xfs_qm_vop_rename_dqattach( 1842 struct xfs_inode **i_tab) 1843 { 1844 struct xfs_mount *mp = i_tab[0]->i_mount; 1845 int i; 1846 1847 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 1848 return 0; 1849 1850 for (i = 0; (i < 4 && i_tab[i]); i++) { 1851 struct xfs_inode *ip = i_tab[i]; 1852 int error; 1853 1854 /* 1855 * Watch out for duplicate entries in the table. 1856 */ 1857 if (i == 0 || ip != i_tab[i-1]) { 1858 if (XFS_NOT_DQATTACHED(mp, ip)) { 1859 error = xfs_qm_dqattach(ip, 0); 1860 if (error) 1861 return error; 1862 } 1863 } 1864 } 1865 return 0; 1866 } 1867 1868 void 1869 xfs_qm_vop_create_dqattach( 1870 struct xfs_trans *tp, 1871 struct xfs_inode *ip, 1872 struct xfs_dquot *udqp, 1873 struct xfs_dquot *gdqp) 1874 { 1875 struct xfs_mount *mp = tp->t_mountp; 1876 1877 if (!XFS_IS_QUOTA_RUNNING(mp) || !XFS_IS_QUOTA_ON(mp)) 1878 return; 1879 1880 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 1881 ASSERT(XFS_IS_QUOTA_RUNNING(mp)); 1882 1883 if (udqp) { 1884 ASSERT(ip->i_udquot == NULL); 1885 ASSERT(XFS_IS_UQUOTA_ON(mp)); 1886 ASSERT(ip->i_d.di_uid == be32_to_cpu(udqp->q_core.d_id)); 1887 1888 ip->i_udquot = xfs_qm_dqhold(udqp); 1889 xfs_trans_mod_dquot(tp, udqp, XFS_TRANS_DQ_ICOUNT, 1); 1890 } 1891 if (gdqp) { 1892 ASSERT(ip->i_gdquot == NULL); 1893 ASSERT(XFS_IS_OQUOTA_ON(mp)); 1894 ASSERT((XFS_IS_GQUOTA_ON(mp) ? 1895 ip->i_d.di_gid : xfs_get_projid(ip)) == 1896 be32_to_cpu(gdqp->q_core.d_id)); 1897 1898 ip->i_gdquot = xfs_qm_dqhold(gdqp); 1899 xfs_trans_mod_dquot(tp, gdqp, XFS_TRANS_DQ_ICOUNT, 1); 1900 } 1901 } 1902 1903