From: Nathan Scott Date: Mon, 3 Jun 2002 01:47:28 +0000 (+0000) Subject: sync with recent kernel changes, noop for userspace. X-Git-Tag: v2.1.0~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e56fcdce34f592812b61a5820f415ddc8b8f2d9b;p=thirdparty%2Fxfsprogs-dev.git sync with recent kernel changes, noop for userspace. --- diff --git a/include/xfs_mount.h b/include/xfs_mount.h index 05379c208..e3e83da06 100644 --- a/include/xfs_mount.h +++ b/include/xfs_mount.h @@ -257,7 +257,7 @@ typedef struct xfs_mount { uint m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */ uint m_in_maxlevels; /* XFS_IN_MAXLEVELS */ struct xfs_perag *m_perag; /* per-ag accounting info */ - mrlock_t m_peraglock; /* lock for m_perag (pointer) */ + struct rw_semaphore m_peraglock; /* lock for m_perag (pointer) */ sema_t m_growlock; /* growfs mutex */ int m_fixedfsid[2]; /* unchanged for life of FS */ uint m_dmevmask; /* DMI events for this FS */ diff --git a/libxfs/xfs.h b/libxfs/xfs.h index e4f088043..ddc46343e 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -253,6 +253,8 @@ typedef struct { dev_t dev; } buftarg_t; #define XFS_MOUNT_NOALIGN 0 /* ignored in userspace */ #define XFS_MOUNT_32BITINODES 0x1 /* enforce in userspace */ #define XFS_ILOCK_EXCL 0 +#define down_read(a) ((void) 0) +#define up_read(a) ((void) 0) #define mrlock(a,b,c) ((void) 0) #define mraccunlock(a) ((void) 0) #define mrunlock(a) ((void) 0) diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index d811e8f26..15aacfb92 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -2226,7 +2226,7 @@ xfs_alloc_vextent( * These three force us into a single a.g. */ args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); - mrlock(&mp->m_peraglock, MR_ACCESS, PINOD); + down_read(&mp->m_peraglock); args->pag = &mp->m_perag[args->agno]; minleft = args->minleft; args->minleft = 0; @@ -2237,14 +2237,14 @@ xfs_alloc_vextent( goto error0; } if (!args->agbp) { - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); TRACE_ALLOC("noagbp", args); break; } args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); if ((error = xfs_alloc_ag_vextent(args))) goto error0; - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); break; case XFS_ALLOCTYPE_START_BNO: /* @@ -2293,7 +2293,7 @@ xfs_alloc_vextent( * Loop over allocation groups twice; first time with * trylock set, second time without. */ - mrlock(&mp->m_peraglock, MR_ACCESS, PINOD); + down_read(&mp->m_peraglock); for (;;) { args->pag = &mp->m_perag[args->agno]; if ((error = xfs_alloc_fix_freelist(args, flags))) { @@ -2335,7 +2335,7 @@ xfs_alloc_vextent( } } } - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) mp->m_agfrotor = (args->agno + 1) % mp->m_sb.sb_agcount; break; @@ -2357,7 +2357,7 @@ xfs_alloc_vextent( } return 0; error0: - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); return error; } @@ -2386,7 +2386,7 @@ xfs_free_extent( args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); args.alignment = 1; args.minlen = args.minleft = args.minalignslop = 0; - mrlock(&args.mp->m_peraglock, MR_ACCESS, PINOD); + down_read(&args.mp->m_peraglock); args.pag = &args.mp->m_perag[args.agno]; if ((error = xfs_alloc_fix_freelist(&args, 0))) goto error0; @@ -2398,6 +2398,6 @@ xfs_free_extent( error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0); error0: - mrunlock(&args.mp->m_peraglock); + up_read(&args.mp->m_peraglock); return error; } diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index 71bbaeaa1..d20eccbb6 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -2044,13 +2044,13 @@ xfs_bmap_alloc( */ startag = ag = XFS_FSB_TO_AGNO(mp, args.fsbno); notinit = 0; - mrlock(&mp->m_peraglock, MR_ACCESS, PINOD); + down_read(&mp->m_peraglock); while (blen < ap->alen) { pag = &mp->m_perag[ag]; if (!pag->pagf_init && (error = xfs_alloc_pagf_init(mp, args.tp, ag, XFS_ALLOC_FLAG_TRYLOCK))) { - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); return error; } /* @@ -2073,7 +2073,7 @@ xfs_bmap_alloc( if (ag == startag) break; } - mrunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); /* * Since the above loop did a BUF_TRYLOCK, it is * possible that there is space for this request. diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index 49aa37611..0d91cf683 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -299,9 +299,9 @@ xfs_ialloc_ag_alloc( } INT_MOD(agi->agi_count, ARCH_CONVERT, newlen); INT_MOD(agi->agi_freecount, ARCH_CONVERT, newlen); - mraccess(&args.mp->m_peraglock); + down_read(&args.mp->m_peraglock); args.mp->m_perag[INT_GET(agi->agi_seqno, ARCH_CONVERT)].pagi_freecount += newlen; - mraccunlock(&args.mp->m_peraglock); + up_read(&args.mp->m_peraglock); INT_SET(agi->agi_newino, ARCH_CONVERT, newino); /* * Insert records describing the new inode chunk into the btree. @@ -385,7 +385,7 @@ xfs_ialloc_ag_select( */ agno = pagno; flags = XFS_ALLOC_FLAG_TRYLOCK; - mraccess(&mp->m_peraglock); + down_read(&mp->m_peraglock); for (;;) { pag = &mp->m_perag[agno]; if (!pag->pagi_init) { @@ -426,7 +426,7 @@ xfs_ialloc_ag_select( agbp = NULL; goto nextag; } - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); return agbp; } } @@ -439,7 +439,7 @@ nextag: * down. */ if (XFS_FORCED_SHUTDOWN(mp)) { - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); return (xfs_buf_t *)0; } agno++; @@ -447,7 +447,7 @@ nextag: agno = 0; if (agno == pagno) { if (flags == 0) { - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); return (xfs_buf_t *)0; } flags = 0; @@ -614,13 +614,13 @@ nextag: *inop = NULLFSINO; return noroom ? ENOSPC : 0; } - mraccess(&mp->m_peraglock); + down_read(&mp->m_peraglock); if (mp->m_perag[tagno].pagi_inodeok == 0) { - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); goto nextag; } error = xfs_ialloc_read_agi(mp, tp, tagno, &agbp); - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); if (error) goto nextag; agi = XFS_BUF_TO_AGI(agbp); @@ -868,9 +868,9 @@ nextag: goto error0; INT_MOD(agi->agi_freecount, ARCH_CONVERT, -1); xfs_ialloc_log_agi(tp, agbp, XFS_AGI_FREECOUNT); - mraccess(&mp->m_peraglock); + down_read(&mp->m_peraglock); mp->m_perag[tagno].pagi_freecount--; - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); #ifdef DEBUG if (cur->bc_nlevels == 1) { int freecount = 0; @@ -988,9 +988,9 @@ xfs_dilocate( offset_agbno = agbno & mp->m_inoalign_mask; chunk_agbno = agbno - offset_agbno; } else { - mraccess(&mp->m_peraglock); + down_read(&mp->m_peraglock); error = xfs_ialloc_read_agi(mp, tp, agno, &agbp); - mraccunlock(&mp->m_peraglock); + up_read(&mp->m_peraglock); if (error) { #ifdef DEBUG xfs_fs_cmn_err(CE_ALERT, mp, "xfs_dilocate: " diff --git a/libxlog/xfs_log_recover.c b/libxlog/xfs_log_recover.c index 85c32d87f..774ad5995 100644 --- a/libxlog/xfs_log_recover.c +++ b/libxlog/xfs_log_recover.c @@ -113,7 +113,7 @@ xlog_find_verify_cycle( xlog_t *log, for (j = 0; j < bcount; j++) { cycle = GET_CYCLE(buf, ARCH_CONVERT); if (cycle == stop_on_cycle_no) { - *new_blk = i; + *new_blk = i+j; goto out; }