diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_bmap.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_bmap.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index b5eb4743f75a..61ec015dca16 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c | |||
| @@ -973,7 +973,11 @@ xfs_bmap_local_to_extents( | |||
| 973 | *firstblock = args.fsbno; | 973 | *firstblock = args.fsbno; |
| 974 | bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); | 974 | bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); |
| 975 | 975 | ||
| 976 | /* initialise the block and copy the data */ | 976 | /* |
| 977 | * Initialise the block and copy the data | ||
| 978 | * | ||
| 979 | * Note: init_fn must set the buffer log item type correctly! | ||
| 980 | */ | ||
| 977 | init_fn(tp, bp, ip, ifp); | 981 | init_fn(tp, bp, ip, ifp); |
| 978 | 982 | ||
| 979 | /* account for the change in fork size and log everything */ | 983 | /* account for the change in fork size and log everything */ |
| @@ -1221,22 +1225,20 @@ xfs_bmap_add_attrfork( | |||
| 1221 | goto bmap_cancel; | 1225 | goto bmap_cancel; |
| 1222 | if (!xfs_sb_version_hasattr(&mp->m_sb) || | 1226 | if (!xfs_sb_version_hasattr(&mp->m_sb) || |
| 1223 | (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2)) { | 1227 | (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2)) { |
| 1224 | __int64_t sbfields = 0; | 1228 | bool log_sb = false; |
| 1225 | 1229 | ||
| 1226 | spin_lock(&mp->m_sb_lock); | 1230 | spin_lock(&mp->m_sb_lock); |
| 1227 | if (!xfs_sb_version_hasattr(&mp->m_sb)) { | 1231 | if (!xfs_sb_version_hasattr(&mp->m_sb)) { |
| 1228 | xfs_sb_version_addattr(&mp->m_sb); | 1232 | xfs_sb_version_addattr(&mp->m_sb); |
| 1229 | sbfields |= XFS_SB_VERSIONNUM; | 1233 | log_sb = true; |
| 1230 | } | 1234 | } |
| 1231 | if (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2) { | 1235 | if (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2) { |
| 1232 | xfs_sb_version_addattr2(&mp->m_sb); | 1236 | xfs_sb_version_addattr2(&mp->m_sb); |
| 1233 | sbfields |= (XFS_SB_VERSIONNUM | XFS_SB_FEATURES2); | 1237 | log_sb = true; |
| 1234 | } | 1238 | } |
| 1235 | if (sbfields) { | 1239 | spin_unlock(&mp->m_sb_lock); |
| 1236 | spin_unlock(&mp->m_sb_lock); | 1240 | if (log_sb) |
| 1237 | xfs_mod_sb(tp, sbfields); | 1241 | xfs_log_sb(tp); |
| 1238 | } else | ||
| 1239 | spin_unlock(&mp->m_sb_lock); | ||
| 1240 | } | 1242 | } |
| 1241 | 1243 | ||
| 1242 | error = xfs_bmap_finish(&tp, &flist, &committed); | 1244 | error = xfs_bmap_finish(&tp, &flist, &committed); |
