Lines Matching +full:soft +full:- +full:ip
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2018-2023 Oracle. All Rights Reserved.
62 struct xfs_mount *mp = sc->mp; in xrep_quota_item_fill_bmap_hole()
66 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_quota_item_fill_bmap_hole()
69 error = xfs_trans_reserve_more(sc->tp, XFS_QM_DQALLOC_SPACE_RES(mp), in xrep_quota_item_fill_bmap_hole()
74 error = xfs_bmapi_write(sc->tp, sc->ip, dq->q_fileoffset, in xrep_quota_item_fill_bmap_hole()
80 dq->q_blkno = XFS_FSB_TO_DADDR(mp, irec->br_startblock); in xrep_quota_item_fill_bmap_hole()
82 trace_xrep_dquot_item_fill_bmap_hole(sc->mp, dq->q_type, dq->q_id); in xrep_quota_item_fill_bmap_hole()
85 error = xfs_trans_get_buf(sc->tp, mp->m_ddev_targp, dq->q_blkno, in xrep_quota_item_fill_bmap_hole()
86 mp->m_quotainfo->qi_dqchunklen, 0, &bp); in xrep_quota_item_fill_bmap_hole()
89 bp->b_ops = &xfs_dquot_buf_ops; in xrep_quota_item_fill_bmap_hole()
91 xfs_qm_init_dquot_blk(sc->tp, dq->q_id, dq->q_type, bp); in xrep_quota_item_fill_bmap_hole()
96 * disconnect sc->ip from sc->tp. in xrep_quota_item_fill_bmap_hole()
101 return xfs_trans_roll(&sc->tp); in xrep_quota_item_fill_bmap_hole()
112 struct xfs_mount *mp = sc->mp; in xrep_quota_item_bmap()
113 struct xfs_quotainfo *qi = mp->m_quotainfo; in xrep_quota_item_bmap()
114 xfs_fileoff_t offset = dq->q_id / qi->qi_dqperchunk; in xrep_quota_item_bmap()
121 return -EFSCORRUPTED; in xrep_quota_item_bmap()
123 dq->q_fileoffset = offset; in xrep_quota_item_bmap()
125 error = xfs_bmapi_read(sc->ip, offset, 1, &irec, &nmaps, 0); in xrep_quota_item_bmap()
137 return -EFSCORRUPTED; in xrep_quota_item_bmap()
138 } else if (dq->q_blkno != XFS_FSB_TO_DADDR(mp, irec.br_startblock)) { in xrep_quota_item_bmap()
144 dq->q_blkno = XFS_FSB_TO_DADDR(mp, irec.br_startblock); in xrep_quota_item_bmap()
158 if ((res->softlimit && res->count > res->softlimit) || in xrep_quota_item_timer()
159 (res->hardlimit && res->count > res->hardlimit)) { in xrep_quota_item_timer()
160 if (!res->timer) in xrep_quota_item_timer()
163 if (res->timer) in xrep_quota_item_timer()
174 struct xfs_scrub *sc = rqi->sc; in xrep_quota_item()
175 struct xfs_mount *mp = sc->mp; in xrep_quota_item()
200 if (dq->q_blk.softlimit > dq->q_blk.hardlimit) { in xrep_quota_item()
201 dq->q_blk.softlimit = dq->q_blk.hardlimit; in xrep_quota_item()
205 if (dq->q_ino.softlimit > dq->q_ino.hardlimit) { in xrep_quota_item()
206 dq->q_ino.softlimit = dq->q_ino.hardlimit; in xrep_quota_item()
210 if (dq->q_rtb.softlimit > dq->q_rtb.hardlimit) { in xrep_quota_item()
211 dq->q_rtb.softlimit = dq->q_rtb.hardlimit; in xrep_quota_item()
221 if (!xfs_has_reflink(mp) && dq->q_blk.count > mp->m_sb.sb_dblocks) { in xrep_quota_item()
222 dq->q_blk.reserved -= dq->q_blk.count; in xrep_quota_item()
223 dq->q_blk.reserved += mp->m_sb.sb_dblocks; in xrep_quota_item()
224 dq->q_blk.count = mp->m_sb.sb_dblocks; in xrep_quota_item()
225 rqi->need_quotacheck = true; in xrep_quota_item()
228 fs_icount = percpu_counter_sum(&mp->m_icount); in xrep_quota_item()
229 if (dq->q_ino.count > fs_icount) { in xrep_quota_item()
230 dq->q_ino.reserved -= dq->q_ino.count; in xrep_quota_item()
231 dq->q_ino.reserved += fs_icount; in xrep_quota_item()
232 dq->q_ino.count = fs_icount; in xrep_quota_item()
233 rqi->need_quotacheck = true; in xrep_quota_item()
236 if (!xfs_has_reflink(mp) && dq->q_rtb.count > mp->m_sb.sb_rblocks) { in xrep_quota_item()
237 dq->q_rtb.reserved -= dq->q_rtb.count; in xrep_quota_item()
238 dq->q_rtb.reserved += mp->m_sb.sb_rblocks; in xrep_quota_item()
239 dq->q_rtb.count = mp->m_sb.sb_rblocks; in xrep_quota_item()
240 rqi->need_quotacheck = true; in xrep_quota_item()
244 xrep_quota_item_timer(sc, &dq->q_blk, &dirty); in xrep_quota_item()
245 xrep_quota_item_timer(sc, &dq->q_ino, &dirty); in xrep_quota_item()
246 xrep_quota_item_timer(sc, &dq->q_rtb, &dirty); in xrep_quota_item()
251 trace_xrep_dquot_item(sc->mp, dq->q_type, dq->q_id); in xrep_quota_item()
253 dq->q_flags |= XFS_DQFLAG_DIRTY; in xrep_quota_item()
254 xfs_trans_dqjoin(sc->tp, dq); in xrep_quota_item()
255 if (dq->q_id) { in xrep_quota_item()
259 xfs_trans_log_dquot(sc->tp, dq); in xrep_quota_item()
260 error = xfs_trans_roll(&sc->tp); in xrep_quota_item()
275 uint64_t soft = be64_to_cpu(softlimit); in xrep_quota_fix_timer() local
280 if (!soft || count <= soft || *timer != 0) in xrep_quota_fix_timer()
285 if (ddq->d_type & XFS_DQTYPE_BIGTIME) in xrep_quota_fix_timer()
303 struct xfs_quotainfo *qi = sc->mp->m_quotainfo; in xrep_quota_block()
310 error = xfs_trans_read_buf(sc->mp, sc->tp, sc->mp->m_ddev_targp, daddr, in xrep_quota_block()
311 qi->qi_dqchunklen, 0, &bp, &xfs_dquot_buf_ops); in xrep_quota_block()
313 case -EFSBADCRC: in xrep_quota_block()
314 case -EFSCORRUPTED: in xrep_quota_block()
316 error = xfs_trans_read_buf(sc->mp, sc->tp, in xrep_quota_block()
317 sc->mp->m_ddev_targp, daddr, qi->qi_dqchunklen, in xrep_quota_block()
323 dqblk = bp->b_addr; in xrep_quota_block()
330 if ((ddq->d_type & XFS_DQTYPE_REC_MASK) != dqtype || in xrep_quota_block()
331 id == be32_to_cpu(ddq->d_id)) { in xrep_quota_block()
332 xfs_trans_brelse(sc->tp, bp); in xrep_quota_block()
341 dqblk = bp->b_addr; in xrep_quota_block()
342 bp->b_ops = &xfs_dquot_buf_ops; in xrep_quota_block()
343 for (i = 0; i < qi->qi_dqperchunk; i++, dqblk++) { in xrep_quota_block()
344 ddq = &dqblk->dd_diskdq; in xrep_quota_block()
346 trace_xrep_disk_dquot(sc->mp, dqtype, id + i); in xrep_quota_block()
348 ddq->d_magic = cpu_to_be16(XFS_DQUOT_MAGIC); in xrep_quota_block()
349 ddq->d_version = XFS_DQUOT_VERSION; in xrep_quota_block()
350 ddq->d_type = dqtype; in xrep_quota_block()
351 ddq->d_id = cpu_to_be32(id + i); in xrep_quota_block()
353 if (xfs_has_bigtime(sc->mp) && ddq->d_id) in xrep_quota_block()
354 ddq->d_type |= XFS_DQTYPE_BIGTIME; in xrep_quota_block()
356 xrep_quota_fix_timer(sc->mp, ddq, ddq->d_blk_softlimit, in xrep_quota_block()
357 ddq->d_bcount, &ddq->d_btimer, in xrep_quota_block()
358 defq->blk.time); in xrep_quota_block()
360 xrep_quota_fix_timer(sc->mp, ddq, ddq->d_ino_softlimit, in xrep_quota_block()
361 ddq->d_icount, &ddq->d_itimer, in xrep_quota_block()
362 defq->ino.time); in xrep_quota_block()
364 xrep_quota_fix_timer(sc->mp, ddq, ddq->d_rtb_softlimit, in xrep_quota_block()
365 ddq->d_rtbcount, &ddq->d_rtbtimer, in xrep_quota_block()
366 defq->rtb.time); in xrep_quota_block()
369 uuid_copy(&dqblk->dd_uuid, &sc->mp->m_sb.sb_meta_uuid); in xrep_quota_block()
372 dqblk->dd_lsn = 0; in xrep_quota_block()
385 xfs_trans_buf_set_type(sc->tp, bp, buftype); in xrep_quota_block()
386 xfs_trans_log_buf(sc->tp, bp, 0, BBTOB(bp->b_length) - 1); in xrep_quota_block()
401 struct xfs_quotainfo *qi = sc->mp->m_quotainfo; in xrep_quota_data_fork()
415 max_dqid_off = XFS_DQ_ID_MAX / qi->qi_dqperchunk; in xrep_quota_data_fork()
416 ifp = xfs_ifork_ptr(sc->ip, XFS_DATA_FORK); in xrep_quota_data_fork()
419 error = -EFSCORRUPTED; in xrep_quota_data_fork()
424 irec.br_startoff + irec.br_blockcount - 1 > max_dqid_off) { in xrep_quota_data_fork()
435 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_quota_data_fork()
439 error = xfs_bmapi_write(sc->tp, sc->ip, in xrep_quota_data_fork()
447 error = xfs_defer_finish(&sc->tp); in xrep_quota_data_fork()
454 xfs_trans_ijoin(sc->tp, sc->ip, 0); in xrep_quota_data_fork()
460 error = xfs_bunmapi_range(&sc->tp, sc->ip, 0, in xrep_quota_data_fork()
461 max_dqid_off * sc->mp->m_sb.sb_blocksize, in xrep_quota_data_fork()
467 error = xfs_reflink_cancel_cow_blocks(sc->ip, &sc->tp, 0, in xrep_quota_data_fork()
471 sc->ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK; in xrep_quota_data_fork()
474 * Always re-log the inode so that our permanent transaction in xrep_quota_data_fork()
477 xfs_trans_log_inode(sc->tp, sc->ip, XFS_ILOG_CORE); in xrep_quota_data_fork()
487 XFS_FSB_TO_DADDR(sc->mp, fsbno), in xrep_quota_data_fork()
488 dqtype, off * qi->qi_dqperchunk); in xrep_quota_data_fork()
540 * Re-take the ILOCK so that we can fix any problems that we found in xrep_quota()
543 if (!(sc->ilock_flags & XFS_ILOCK_EXCL)) in xrep_quota()
557 error = xfs_trans_roll(&sc->tp); in xrep_quota()
560 xchk_iunlock(sc, sc->ilock_flags); in xrep_quota()