aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_mount.c
diff options
context:
space:
mode:
authorDavid Chinner <dgc@sgi.com>2007-02-10 02:36:10 -0500
committerTim Shimmin <tes@sgi.com>2007-02-10 02:36:10 -0500
commit20f4ebf2bf2f57c1a9abb3655391336cc90314b3 (patch)
treed6081bf132eea97adbc13a1da980e75f4735141b /fs/xfs/xfs_mount.c
parentf74eaf59b36c0ad01f416b567f89c737bbf82bae (diff)
[XFS] Make growfs work for amounts greater than 2TB
The free block modification code has a 32bit interface, limiting the size the filesystem can be grown even on 64 bit machines. On 32 bit machines, there are other 32bit variables in transaction structures and interfaces that need to be expanded to allow this to work. SGI-PV: 959978 SGI-Modid: xfs-linux-melb:xfs-kern:27894a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Tim Shimmin <tes@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_mount.c')
-rw-r--r--fs/xfs/xfs_mount.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index cbe729310eee..0df07c1df76e 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -52,11 +52,11 @@ STATIC void xfs_unmountfs_wait(xfs_mount_t *);
52 52
53#ifdef HAVE_PERCPU_SB 53#ifdef HAVE_PERCPU_SB
54STATIC void xfs_icsb_destroy_counters(xfs_mount_t *); 54STATIC void xfs_icsb_destroy_counters(xfs_mount_t *);
55STATIC void xfs_icsb_balance_counter(xfs_mount_t *, xfs_sb_field_t, int, 55STATIC void xfs_icsb_balance_counter(xfs_mount_t *, xfs_sb_field_t,
56int); 56 int, int);
57STATIC void xfs_icsb_sync_counters(xfs_mount_t *); 57STATIC void xfs_icsb_sync_counters(xfs_mount_t *);
58STATIC int xfs_icsb_modify_counters(xfs_mount_t *, xfs_sb_field_t, 58STATIC int xfs_icsb_modify_counters(xfs_mount_t *, xfs_sb_field_t,
59 int, int); 59 int64_t, int);
60STATIC int xfs_icsb_disable_counter(xfs_mount_t *, xfs_sb_field_t); 60STATIC int xfs_icsb_disable_counter(xfs_mount_t *, xfs_sb_field_t);
61 61
62#else 62#else
@@ -1254,8 +1254,11 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields)
1254 * The SB_LOCK must be held when this routine is called. 1254 * The SB_LOCK must be held when this routine is called.
1255 */ 1255 */
1256int 1256int
1257xfs_mod_incore_sb_unlocked(xfs_mount_t *mp, xfs_sb_field_t field, 1257xfs_mod_incore_sb_unlocked(
1258 int delta, int rsvd) 1258 xfs_mount_t *mp,
1259 xfs_sb_field_t field,
1260 int64_t delta,
1261 int rsvd)
1259{ 1262{
1260 int scounter; /* short counter for 32 bit fields */ 1263 int scounter; /* short counter for 32 bit fields */
1261 long long lcounter; /* long counter for 64 bit fields */ 1264 long long lcounter; /* long counter for 64 bit fields */
@@ -1287,7 +1290,6 @@ xfs_mod_incore_sb_unlocked(xfs_mount_t *mp, xfs_sb_field_t field,
1287 mp->m_sb.sb_ifree = lcounter; 1290 mp->m_sb.sb_ifree = lcounter;
1288 return 0; 1291 return 0;
1289 case XFS_SBS_FDBLOCKS: 1292 case XFS_SBS_FDBLOCKS:
1290
1291 lcounter = (long long) 1293 lcounter = (long long)
1292 mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp); 1294 mp->m_sb.sb_fdblocks - XFS_ALLOC_SET_ASIDE(mp);
1293 res_used = (long long)(mp->m_resblks - mp->m_resblks_avail); 1295 res_used = (long long)(mp->m_resblks - mp->m_resblks_avail);
@@ -1418,7 +1420,11 @@ xfs_mod_incore_sb_unlocked(xfs_mount_t *mp, xfs_sb_field_t field,
1418 * routine to do the work. 1420 * routine to do the work.
1419 */ 1421 */
1420int 1422int
1421xfs_mod_incore_sb(xfs_mount_t *mp, xfs_sb_field_t field, int delta, int rsvd) 1423xfs_mod_incore_sb(
1424 xfs_mount_t *mp,
1425 xfs_sb_field_t field,
1426 int64_t delta,
1427 int rsvd)
1422{ 1428{
1423 unsigned long s; 1429 unsigned long s;
1424 int status; 1430 int status;
@@ -2092,7 +2098,7 @@ int
2092xfs_icsb_modify_counters( 2098xfs_icsb_modify_counters(
2093 xfs_mount_t *mp, 2099 xfs_mount_t *mp,
2094 xfs_sb_field_t field, 2100 xfs_sb_field_t field,
2095 int delta, 2101 int64_t delta,
2096 int rsvd) 2102 int rsvd)
2097{ 2103{
2098 xfs_icsb_cnts_t *icsbp; 2104 xfs_icsb_cnts_t *icsbp;