diff -rNup xfs/linux-2.6/xfs_super.c xfs/linux-2.6/xfs_super.c --- xfs/linux-2.6/xfs_super.c 2008-08-25 14:25:11.000000000 +0200 +++ xfs/linux-2.6/xfs_super.c 2008-08-27 11:55:33.000000000 +0200 @@ -61,6 +61,9 @@ #include #include + +#define NO_2618_XFS + static struct quotactl_ops xfs_quotactl_operations; static struct super_operations xfs_super_operations; static kmem_zone_t *xfs_vnode_zone; @@ -1187,8 +1190,13 @@ xfs_fs_statfs( statp->f_bsize = sbp->sb_blocksize; lsize = sbp->sb_logstart ? sbp->sb_logblocks : 0; statp->f_blocks = sbp->sb_dblocks - lsize; +#ifndef NO_2618_XFS statp->f_bfree = statp->f_bavail = sbp->sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); +#else + statp->f_bfree = statp->f_bavail = sbp->sb_fdblocks; +#endif + fakeinos = statp->f_bfree << sbp->sb_inopblog; #if XFS_BIG_INUMS fakeinos += mp->m_inoadd; diff -rNup xfs/xfs_fsops.c xfs/xfs_fsops.c --- xfs/xfs_fsops.c 2008-08-25 14:25:13.000000000 +0200 +++ xfs/xfs_fsops.c 2008-08-27 11:56:30.000000000 +0200 @@ -46,6 +46,8 @@ #include "xfs_rw.h" #include "xfs_filestream.h" +#define NO_2618_XFS + /* * File system operations */ @@ -464,7 +466,11 @@ xfs_fs_counts( { xfs_icsb_sync_counters_flags(mp, XFS_ICSB_LAZY_COUNT); spin_lock(&mp->m_sb_lock); +#ifdef NO_2618_XFS + cnt->freedata = mp->m_sb.sb_fdblocks; +#else cnt->freedata = mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); +#endif cnt->freertx = mp->m_sb.sb_frextents; cnt->freeino = mp->m_sb.sb_ifree; cnt->allocino = mp->m_sb.sb_icount; @@ -539,24 +545,42 @@ retry: } mp->m_resblks = request; } else { +#ifndef NO_2618_XFS __int64_t free; free = mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); if (!free) goto out; /* ENOSPC and fdblks_delta = 0 */ - + +#endif delta = request - mp->m_resblks; + +#ifndef NO_2618_XFS lcounter = free - delta; +#else + lcounter = mp->m_sb.sb_fdblocks - delta; +#endif if (lcounter < 0) { /* We can't satisfy the request, just get what we can */ +#ifndef NO_2618_XFS mp->m_resblks += free; mp->m_resblks_avail += free; fdblks_delta = -free; mp->m_sb.sb_fdblocks = XFS_ALLOC_SET_ASIDE(mp); +#else + mp->m_resblks += mp->m_sb.sb_fdblocks; + mp->m_resblks_avail += mp->m_sb.sb_fdblocks; + fdblks_delta = -mp->m_sb.sb_fdblocks; + mp->m_sb.sb_fdblocks = 0; +#endif } else { fdblks_delta = -delta; +#ifndef NO_2618_XFS mp->m_sb.sb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp); +#else + mp->m_sb.sb_fdblocks = lcounter; +#endif mp->m_resblks = request; mp->m_resblks_avail += delta; } diff -rNup xfs/xfs_mount.c xfs/xfs_mount.c --- xfs/xfs_mount.c 2008-08-25 14:25:14.000000000 +0200 +++ xfs/xfs_mount.c 2008-08-27 14:42:02.000000000 +0200 @@ -44,6 +44,9 @@ #include "xfs_quota.h" #include "xfs_fsops.h" + +#define NO_2618_XFS + STATIC void xfs_mount_log_sb(xfs_mount_t *, __int64_t); STATIC int xfs_uuid_mount(xfs_mount_t *); STATIC void xfs_uuid_unmount(xfs_mount_t *mp); @@ -1525,6 +1528,11 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fi * * The m_sb_lock must be held when this routine is called. */ + +#ifdef NO_2618_XFS + #define SET_ASIDE_BLOCKS 8 +#endif + int xfs_mod_incore_sb_unlocked( xfs_mount_t *mp, @@ -1562,8 +1570,12 @@ xfs_mod_incore_sb_unlocked( mp->m_sb.sb_ifree = lcounter; return 0; case XFS_SBS_FDBLOCKS: +#ifndef NO_2618_XFS lcounter = (long long) mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); +#else + lcounter = (long long)mp->m_sb.sb_fdblocks - SET_ASIDE_BLOCKS; +#endif res_used = (long long)(mp->m_resblks - mp->m_resblks_avail); if (delta > 0) { /* Putting blocks back */ @@ -1596,8 +1608,11 @@ xfs_mod_incore_sb_unlocked( } } } - +#ifndef NO_2618_XFS mp->m_sb.sb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp); +#else + mp->m_sb.sb_fdblocks = lcounter + SET_ASIDE_BLOCKS; +#endif return 0; case XFS_SBS_FREXTENTS: lcounter = (long long)mp->m_sb.sb_frextents; @@ -2321,8 +2336,14 @@ xfs_icsb_sync_counters( */ #define XFS_ICSB_INO_CNTR_REENABLE (uint64_t)64 + +#ifndef NO_2618_XFS #define XFS_ICSB_FDBLK_CNTR_REENABLE(mp) \ (uint64_t)(512 + XFS_ALLOC_SET_ASIDE(mp)) +#else +#define XFS_ICSB_FDBLK_CNTR_REENABLE 512 +#endif + STATIC void xfs_icsb_balance_counter( xfs_mount_t *mp, @@ -2357,7 +2378,11 @@ xfs_icsb_balance_counter( case XFS_SBS_FDBLOCKS: count = mp->m_sb.sb_fdblocks; resid = do_div(count, weight); +#ifndef NO_2618_XFS if (count < max(min, XFS_ICSB_FDBLK_CNTR_REENABLE(mp))) +#else + if (count < max(min, XFS_ICSB_FDBLK_CNTR_REENABLE)) +#endif goto out; break; default: @@ -2418,12 +2443,19 @@ again: case XFS_SBS_FDBLOCKS: BUG_ON((mp->m_resblks - mp->m_resblks_avail) != 0); - +#ifndef NO_2618_XFS lcounter = icsbp->icsb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); +#else + lcounter = icsbp->icsb_fdblocks; +#endif lcounter += delta; if (unlikely(lcounter < 0)) goto balance_counter; +#ifndef NO_2618_XFS icsbp->icsb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp); +#else + icsbp->icsb_fdblocks = lcounter; +#endif break; default: BUG();