LSRCFILES = configure configure.in Makepkgs install-sh README VERSION
LDIRT = config.log config.status config.cache confdefs.h conftest* \
- Logs/* install.* install-dev.* *.gz
+ Logs/* built .census install.* install-dev.* *.gz
SUBDIRS = include libxfs libxlog libhandle libdisk \
bmap db freeze fsck growfs imap logprint mkfile mkfs repair rtcp \
* Loop over allocation groups twice; first time with
* trylock set, second time without.
*/
+ mrlock(&mp->m_peraglock, MR_ACCESS, PINOD);
for (;;) {
- mrlock(&mp->m_peraglock, MR_ACCESS, PINOD);
args->pag = &mp->m_perag[args->agno];
if ((error = xfs_alloc_fix_freelist(args, flags))) {
TRACE_ALLOC("nofix", args);
if (args->agbp) {
if ((error = xfs_alloc_ag_vextent(args)))
goto error0;
- mrunlock(&mp->m_peraglock);
break;
}
- mrunlock(&mp->m_peraglock);
TRACE_ALLOC("loopfailed", args);
/*
* Didn't work, figure out the next iteration.
}
}
}
+ mrunlock(&mp->m_peraglock);
if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG))
mp->m_agfrotor = (args->agno + 1) % mp->m_sb.sb_agcount;
break;
*/
agno = pagno;
flags = XFS_ALLOC_FLAG_TRYLOCK;
+ mraccess(&mp->m_peraglock);
for (;;) {
- mraccess(&mp->m_peraglock);
pag = &mp->m_perag[agno];
if (!pag->pagi_init) {
if (xfs_ialloc_read_agi(mp, tp, agno, &agbp)) {
agbp = NULL;
- mraccunlock(&mp->m_peraglock);
goto nextag;
}
} else
if (agbp == NULL &&
xfs_ialloc_read_agi(mp, tp, agno, &agbp)) {
agbp = NULL;
- mraccunlock(&mp->m_peraglock);
goto nextag;
}
(void)xfs_alloc_pagf_init(mp, tp, agno, flags);
if (agbp == NULL &&
xfs_ialloc_read_agi(mp, tp, agno, &agbp)) {
agbp = NULL;
- mraccunlock(&mp->m_peraglock);
goto nextag;
}
mraccunlock(&mp->m_peraglock);
}
}
unlock_nextag:
- mraccunlock(&mp->m_peraglock);
if (agbp)
xfs_trans_brelse(tp, agbp);
nextag:
* No point in iterating over the rest, if we're shutting
* down.
*/
- if (XFS_FORCED_SHUTDOWN(mp))
+ if (XFS_FORCED_SHUTDOWN(mp)) {
+ mraccunlock(&mp->m_peraglock);
return (xfs_buf_t *)0;
+ }
agno++;
if (agno >= agcount)
agno = 0;
if (agno == pagno) {
- if (flags == 0)
+ if (flags == 0) {
+ mraccunlock(&mp->m_peraglock);
return (xfs_buf_t *)0;
+ }
flags = 0;
}
}