diff options
Diffstat (limited to 'fs/xfs/xfs_mount.c')
-rw-r--r-- | fs/xfs/xfs_mount.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 8b6c9e807efb..eb403b40e120 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
@@ -44,6 +44,8 @@ | |||
44 | #include "xfs_quota.h" | 44 | #include "xfs_quota.h" |
45 | #include "xfs_fsops.h" | 45 | #include "xfs_fsops.h" |
46 | #include "xfs_utils.h" | 46 | #include "xfs_utils.h" |
47 | #include "xfs_trace.h" | ||
48 | |||
47 | 49 | ||
48 | STATIC void xfs_unmountfs_wait(xfs_mount_t *); | 50 | STATIC void xfs_unmountfs_wait(xfs_mount_t *); |
49 | 51 | ||
@@ -583,8 +585,8 @@ xfs_readsb(xfs_mount_t *mp, int flags) | |||
583 | sector_size = xfs_getsize_buftarg(mp->m_ddev_targp); | 585 | sector_size = xfs_getsize_buftarg(mp->m_ddev_targp); |
584 | extra_flags = XFS_BUF_LOCK | XFS_BUF_MANAGE | XFS_BUF_MAPPED; | 586 | extra_flags = XFS_BUF_LOCK | XFS_BUF_MANAGE | XFS_BUF_MAPPED; |
585 | 587 | ||
586 | bp = xfs_buf_read_flags(mp->m_ddev_targp, XFS_SB_DADDR, | 588 | bp = xfs_buf_read(mp->m_ddev_targp, XFS_SB_DADDR, BTOBB(sector_size), |
587 | BTOBB(sector_size), extra_flags); | 589 | extra_flags); |
588 | if (!bp || XFS_BUF_ISERROR(bp)) { | 590 | if (!bp || XFS_BUF_ISERROR(bp)) { |
589 | xfs_fs_mount_cmn_err(flags, "SB read failed"); | 591 | xfs_fs_mount_cmn_err(flags, "SB read failed"); |
590 | error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM; | 592 | error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM; |
@@ -624,8 +626,8 @@ xfs_readsb(xfs_mount_t *mp, int flags) | |||
624 | XFS_BUF_UNMANAGE(bp); | 626 | XFS_BUF_UNMANAGE(bp); |
625 | xfs_buf_relse(bp); | 627 | xfs_buf_relse(bp); |
626 | sector_size = mp->m_sb.sb_sectsize; | 628 | sector_size = mp->m_sb.sb_sectsize; |
627 | bp = xfs_buf_read_flags(mp->m_ddev_targp, XFS_SB_DADDR, | 629 | bp = xfs_buf_read(mp->m_ddev_targp, XFS_SB_DADDR, |
628 | BTOBB(sector_size), extra_flags); | 630 | BTOBB(sector_size), extra_flags); |
629 | if (!bp || XFS_BUF_ISERROR(bp)) { | 631 | if (!bp || XFS_BUF_ISERROR(bp)) { |
630 | xfs_fs_mount_cmn_err(flags, "SB re-read failed"); | 632 | xfs_fs_mount_cmn_err(flags, "SB re-read failed"); |
631 | error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM; | 633 | error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM; |
@@ -1471,7 +1473,7 @@ xfs_log_sbcount( | |||
1471 | if (!xfs_sb_version_haslazysbcount(&mp->m_sb)) | 1473 | if (!xfs_sb_version_haslazysbcount(&mp->m_sb)) |
1472 | return 0; | 1474 | return 0; |
1473 | 1475 | ||
1474 | tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT); | 1476 | tp = _xfs_trans_alloc(mp, XFS_TRANS_SB_COUNT, KM_SLEEP); |
1475 | error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, | 1477 | error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, |
1476 | XFS_DEFAULT_LOG_COUNT); | 1478 | XFS_DEFAULT_LOG_COUNT); |
1477 | if (error) { | 1479 | if (error) { |
@@ -2123,7 +2125,7 @@ xfs_icsb_destroy_counters( | |||
2123 | mutex_destroy(&mp->m_icsb_mutex); | 2125 | mutex_destroy(&mp->m_icsb_mutex); |
2124 | } | 2126 | } |
2125 | 2127 | ||
2126 | STATIC_INLINE void | 2128 | STATIC void |
2127 | xfs_icsb_lock_cntr( | 2129 | xfs_icsb_lock_cntr( |
2128 | xfs_icsb_cnts_t *icsbp) | 2130 | xfs_icsb_cnts_t *icsbp) |
2129 | { | 2131 | { |
@@ -2132,7 +2134,7 @@ xfs_icsb_lock_cntr( | |||
2132 | } | 2134 | } |
2133 | } | 2135 | } |
2134 | 2136 | ||
2135 | STATIC_INLINE void | 2137 | STATIC void |
2136 | xfs_icsb_unlock_cntr( | 2138 | xfs_icsb_unlock_cntr( |
2137 | xfs_icsb_cnts_t *icsbp) | 2139 | xfs_icsb_cnts_t *icsbp) |
2138 | { | 2140 | { |
@@ -2140,7 +2142,7 @@ xfs_icsb_unlock_cntr( | |||
2140 | } | 2142 | } |
2141 | 2143 | ||
2142 | 2144 | ||
2143 | STATIC_INLINE void | 2145 | STATIC void |
2144 | xfs_icsb_lock_all_counters( | 2146 | xfs_icsb_lock_all_counters( |
2145 | xfs_mount_t *mp) | 2147 | xfs_mount_t *mp) |
2146 | { | 2148 | { |
@@ -2153,7 +2155,7 @@ xfs_icsb_lock_all_counters( | |||
2153 | } | 2155 | } |
2154 | } | 2156 | } |
2155 | 2157 | ||
2156 | STATIC_INLINE void | 2158 | STATIC void |
2157 | xfs_icsb_unlock_all_counters( | 2159 | xfs_icsb_unlock_all_counters( |
2158 | xfs_mount_t *mp) | 2160 | xfs_mount_t *mp) |
2159 | { | 2161 | { |
@@ -2389,12 +2391,12 @@ xfs_icsb_modify_counters( | |||
2389 | { | 2391 | { |
2390 | xfs_icsb_cnts_t *icsbp; | 2392 | xfs_icsb_cnts_t *icsbp; |
2391 | long long lcounter; /* long counter for 64 bit fields */ | 2393 | long long lcounter; /* long counter for 64 bit fields */ |
2392 | int cpu, ret = 0; | 2394 | int ret = 0; |
2393 | 2395 | ||
2394 | might_sleep(); | 2396 | might_sleep(); |
2395 | again: | 2397 | again: |
2396 | cpu = get_cpu(); | 2398 | preempt_disable(); |
2397 | icsbp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, cpu); | 2399 | icsbp = this_cpu_ptr(mp->m_sb_cnts); |
2398 | 2400 | ||
2399 | /* | 2401 | /* |
2400 | * if the counter is disabled, go to slow path | 2402 | * if the counter is disabled, go to slow path |
@@ -2438,11 +2440,11 @@ again: | |||
2438 | break; | 2440 | break; |
2439 | } | 2441 | } |
2440 | xfs_icsb_unlock_cntr(icsbp); | 2442 | xfs_icsb_unlock_cntr(icsbp); |
2441 | put_cpu(); | 2443 | preempt_enable(); |
2442 | return 0; | 2444 | return 0; |
2443 | 2445 | ||
2444 | slow_path: | 2446 | slow_path: |
2445 | put_cpu(); | 2447 | preempt_enable(); |
2446 | 2448 | ||
2447 | /* | 2449 | /* |
2448 | * serialise with a mutex so we don't burn lots of cpu on | 2450 | * serialise with a mutex so we don't burn lots of cpu on |
@@ -2490,7 +2492,7 @@ slow_path: | |||
2490 | 2492 | ||
2491 | balance_counter: | 2493 | balance_counter: |
2492 | xfs_icsb_unlock_cntr(icsbp); | 2494 | xfs_icsb_unlock_cntr(icsbp); |
2493 | put_cpu(); | 2495 | preempt_enable(); |
2494 | 2496 | ||
2495 | /* | 2497 | /* |
2496 | * We may have multiple threads here if multiple per-cpu | 2498 | * We may have multiple threads here if multiple per-cpu |