|
@@ -383,11 +383,9 @@ xfs_ialloc_ag_alloc(
|
|
|
newino = XFS_OFFBNO_TO_AGINO(args.mp, args.agbno, 0);
|
|
|
be32_add_cpu(&agi->agi_count, newlen);
|
|
|
be32_add_cpu(&agi->agi_freecount, newlen);
|
|
|
- down_read(&args.mp->m_peraglock);
|
|
|
pag = xfs_perag_get(args.mp, agno);
|
|
|
pag->pagi_freecount += newlen;
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&args.mp->m_peraglock);
|
|
|
agi->agi_newino = cpu_to_be32(newino);
|
|
|
|
|
|
/*
|
|
@@ -489,7 +487,6 @@ xfs_ialloc_ag_select(
|
|
|
*/
|
|
|
agno = pagno;
|
|
|
flags = XFS_ALLOC_FLAG_TRYLOCK;
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
for (;;) {
|
|
|
pag = xfs_perag_get(mp, agno);
|
|
|
if (!pag->pagi_init) {
|
|
@@ -531,7 +528,6 @@ xfs_ialloc_ag_select(
|
|
|
goto nextag;
|
|
|
}
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
return agbp;
|
|
|
}
|
|
|
}
|
|
@@ -544,18 +540,14 @@ nextag:
|
|
|
* No point in iterating over the rest, if we're shutting
|
|
|
* down.
|
|
|
*/
|
|
|
- if (XFS_FORCED_SHUTDOWN(mp)) {
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
+ if (XFS_FORCED_SHUTDOWN(mp))
|
|
|
return NULL;
|
|
|
- }
|
|
|
agno++;
|
|
|
if (agno >= agcount)
|
|
|
agno = 0;
|
|
|
if (agno == pagno) {
|
|
|
- if (flags == 0) {
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
+ if (flags == 0)
|
|
|
return NULL;
|
|
|
- }
|
|
|
flags = 0;
|
|
|
}
|
|
|
}
|
|
@@ -777,16 +769,13 @@ nextag:
|
|
|
*inop = NULLFSINO;
|
|
|
return noroom ? ENOSPC : 0;
|
|
|
}
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
pag = xfs_perag_get(mp, tagno);
|
|
|
if (pag->pagi_inodeok == 0) {
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
goto nextag;
|
|
|
}
|
|
|
error = xfs_ialloc_read_agi(mp, tp, tagno, &agbp);
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
if (error)
|
|
|
goto nextag;
|
|
|
agi = XFS_BUF_TO_AGI(agbp);
|
|
@@ -1015,9 +1004,7 @@ alloc_inode:
|
|
|
goto error0;
|
|
|
be32_add_cpu(&agi->agi_freecount, -1);
|
|
|
xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
pag->pagi_freecount--;
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
|
|
|
error = xfs_check_agi_freecount(cur, agi);
|
|
|
if (error)
|
|
@@ -1100,9 +1087,7 @@ xfs_difree(
|
|
|
/*
|
|
|
* Get the allocation group header.
|
|
|
*/
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
error = xfs_ialloc_read_agi(mp, tp, agno, &agbp);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
if (error) {
|
|
|
cmn_err(CE_WARN,
|
|
|
"xfs_difree: xfs_ialloc_read_agi() returned an error %d on %s. Returning error.",
|
|
@@ -1169,11 +1154,9 @@ xfs_difree(
|
|
|
be32_add_cpu(&agi->agi_count, -ilen);
|
|
|
be32_add_cpu(&agi->agi_freecount, -(ilen - 1));
|
|
|
xfs_ialloc_log_agi(tp, agbp, XFS_AGI_COUNT | XFS_AGI_FREECOUNT);
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
pag = xfs_perag_get(mp, agno);
|
|
|
pag->pagi_freecount -= ilen - 1;
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
xfs_trans_mod_sb(tp, XFS_TRANS_SB_ICOUNT, -ilen);
|
|
|
xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, -(ilen - 1));
|
|
|
|
|
@@ -1202,11 +1185,9 @@ xfs_difree(
|
|
|
*/
|
|
|
be32_add_cpu(&agi->agi_freecount, 1);
|
|
|
xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT);
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
pag = xfs_perag_get(mp, agno);
|
|
|
pag->pagi_freecount++;
|
|
|
xfs_perag_put(pag);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
xfs_trans_mod_sb(tp, XFS_TRANS_SB_IFREE, 1);
|
|
|
}
|
|
|
|
|
@@ -1328,9 +1309,7 @@ xfs_imap(
|
|
|
xfs_buf_t *agbp; /* agi buffer */
|
|
|
int i; /* temp state */
|
|
|
|
|
|
- down_read(&mp->m_peraglock);
|
|
|
error = xfs_ialloc_read_agi(mp, tp, agno, &agbp);
|
|
|
- up_read(&mp->m_peraglock);
|
|
|
if (error) {
|
|
|
xfs_fs_cmn_err(CE_ALERT, mp, "xfs_imap: "
|
|
|
"xfs_ialloc_read_agi() returned "
|