aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/linux-2.6/xfs_super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_super.c')
-rw-r--r--fs/xfs/linux-2.6/xfs_super.c171
1 files changed, 53 insertions, 118 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
index 80938c736c2..758df94690e 100644
--- a/fs/xfs/linux-2.6/xfs_super.c
+++ b/fs/xfs/linux-2.6/xfs_super.c
@@ -25,14 +25,11 @@
25#include "xfs_ag.h" 25#include "xfs_ag.h"
26#include "xfs_dir2.h" 26#include "xfs_dir2.h"
27#include "xfs_alloc.h" 27#include "xfs_alloc.h"
28#include "xfs_dmapi.h"
29#include "xfs_quota.h" 28#include "xfs_quota.h"
30#include "xfs_mount.h" 29#include "xfs_mount.h"
31#include "xfs_bmap_btree.h" 30#include "xfs_bmap_btree.h"
32#include "xfs_alloc_btree.h" 31#include "xfs_alloc_btree.h"
33#include "xfs_ialloc_btree.h" 32#include "xfs_ialloc_btree.h"
34#include "xfs_dir2_sf.h"
35#include "xfs_attr_sf.h"
36#include "xfs_dinode.h" 33#include "xfs_dinode.h"
37#include "xfs_inode.h" 34#include "xfs_inode.h"
38#include "xfs_btree.h" 35#include "xfs_btree.h"
@@ -43,7 +40,6 @@
43#include "xfs_error.h" 40#include "xfs_error.h"
44#include "xfs_itable.h" 41#include "xfs_itable.h"
45#include "xfs_fsops.h" 42#include "xfs_fsops.h"
46#include "xfs_rw.h"
47#include "xfs_attr.h" 43#include "xfs_attr.h"
48#include "xfs_buf_item.h" 44#include "xfs_buf_item.h"
49#include "xfs_utils.h" 45#include "xfs_utils.h"
@@ -94,7 +90,6 @@ mempool_t *xfs_ioend_pool;
94#define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and 90#define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and
95 * unwritten extent conversion */ 91 * unwritten extent conversion */
96#define MNTOPT_NOBARRIER "nobarrier" /* .. disable */ 92#define MNTOPT_NOBARRIER "nobarrier" /* .. disable */
97#define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */
98#define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */ 93#define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */
99#define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */ 94#define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */
100#define MNTOPT_NOIKEEP "noikeep" /* free empty inode clusters */ 95#define MNTOPT_NOIKEEP "noikeep" /* free empty inode clusters */
@@ -116,9 +111,6 @@ mempool_t *xfs_ioend_pool;
116#define MNTOPT_GQUOTANOENF "gqnoenforce"/* group quota limit enforcement */ 111#define MNTOPT_GQUOTANOENF "gqnoenforce"/* group quota limit enforcement */
117#define MNTOPT_PQUOTANOENF "pqnoenforce"/* project quota limit enforcement */ 112#define MNTOPT_PQUOTANOENF "pqnoenforce"/* project quota limit enforcement */
118#define MNTOPT_QUOTANOENF "qnoenforce" /* same as uqnoenforce */ 113#define MNTOPT_QUOTANOENF "qnoenforce" /* same as uqnoenforce */
119#define MNTOPT_DMAPI "dmapi" /* DMI enabled (DMAPI / XDSM) */
120#define MNTOPT_XDSM "xdsm" /* DMI enabled (DMAPI / XDSM) */
121#define MNTOPT_DMI "dmi" /* DMI enabled (DMAPI / XDSM) */
122#define MNTOPT_DELAYLOG "delaylog" /* Delayed loging enabled */ 114#define MNTOPT_DELAYLOG "delaylog" /* Delayed loging enabled */
123#define MNTOPT_NODELAYLOG "nodelaylog" /* Delayed loging disabled */ 115#define MNTOPT_NODELAYLOG "nodelaylog" /* Delayed loging disabled */
124 116
@@ -172,15 +164,13 @@ suffix_strtoul(char *s, char **endp, unsigned int base)
172STATIC int 164STATIC int
173xfs_parseargs( 165xfs_parseargs(
174 struct xfs_mount *mp, 166 struct xfs_mount *mp,
175 char *options, 167 char *options)
176 char **mtpt)
177{ 168{
178 struct super_block *sb = mp->m_super; 169 struct super_block *sb = mp->m_super;
179 char *this_char, *value, *eov; 170 char *this_char, *value, *eov;
180 int dsunit = 0; 171 int dsunit = 0;
181 int dswidth = 0; 172 int dswidth = 0;
182 int iosize = 0; 173 int iosize = 0;
183 int dmapi_implies_ikeep = 1;
184 __uint8_t iosizelog = 0; 174 __uint8_t iosizelog = 0;
185 175
186 /* 176 /*
@@ -243,15 +233,10 @@ xfs_parseargs(
243 if (!mp->m_logname) 233 if (!mp->m_logname)
244 return ENOMEM; 234 return ENOMEM;
245 } else if (!strcmp(this_char, MNTOPT_MTPT)) { 235 } else if (!strcmp(this_char, MNTOPT_MTPT)) {
246 if (!value || !*value) { 236 cmn_err(CE_WARN,
247 cmn_err(CE_WARN, 237 "XFS: %s option not allowed on this system",
248 "XFS: %s option requires an argument", 238 this_char);
249 this_char); 239 return EINVAL;
250 return EINVAL;
251 }
252 *mtpt = kstrndup(value, MAXNAMELEN, GFP_KERNEL);
253 if (!*mtpt)
254 return ENOMEM;
255 } else if (!strcmp(this_char, MNTOPT_RTDEV)) { 240 } else if (!strcmp(this_char, MNTOPT_RTDEV)) {
256 if (!value || !*value) { 241 if (!value || !*value) {
257 cmn_err(CE_WARN, 242 cmn_err(CE_WARN,
@@ -288,8 +273,6 @@ xfs_parseargs(
288 mp->m_flags &= ~XFS_MOUNT_GRPID; 273 mp->m_flags &= ~XFS_MOUNT_GRPID;
289 } else if (!strcmp(this_char, MNTOPT_WSYNC)) { 274 } else if (!strcmp(this_char, MNTOPT_WSYNC)) {
290 mp->m_flags |= XFS_MOUNT_WSYNC; 275 mp->m_flags |= XFS_MOUNT_WSYNC;
291 } else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) {
292 mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC;
293 } else if (!strcmp(this_char, MNTOPT_NORECOVERY)) { 276 } else if (!strcmp(this_char, MNTOPT_NORECOVERY)) {
294 mp->m_flags |= XFS_MOUNT_NORECOVERY; 277 mp->m_flags |= XFS_MOUNT_NORECOVERY;
295 } else if (!strcmp(this_char, MNTOPT_NOALIGN)) { 278 } else if (!strcmp(this_char, MNTOPT_NOALIGN)) {
@@ -329,7 +312,6 @@ xfs_parseargs(
329 } else if (!strcmp(this_char, MNTOPT_IKEEP)) { 312 } else if (!strcmp(this_char, MNTOPT_IKEEP)) {
330 mp->m_flags |= XFS_MOUNT_IKEEP; 313 mp->m_flags |= XFS_MOUNT_IKEEP;
331 } else if (!strcmp(this_char, MNTOPT_NOIKEEP)) { 314 } else if (!strcmp(this_char, MNTOPT_NOIKEEP)) {
332 dmapi_implies_ikeep = 0;
333 mp->m_flags &= ~XFS_MOUNT_IKEEP; 315 mp->m_flags &= ~XFS_MOUNT_IKEEP;
334 } else if (!strcmp(this_char, MNTOPT_LARGEIO)) { 316 } else if (!strcmp(this_char, MNTOPT_LARGEIO)) {
335 mp->m_flags &= ~XFS_MOUNT_COMPAT_IOSIZE; 317 mp->m_flags &= ~XFS_MOUNT_COMPAT_IOSIZE;
@@ -370,12 +352,6 @@ xfs_parseargs(
370 } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { 352 } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) {
371 mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); 353 mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
372 mp->m_qflags &= ~XFS_OQUOTA_ENFD; 354 mp->m_qflags &= ~XFS_OQUOTA_ENFD;
373 } else if (!strcmp(this_char, MNTOPT_DMAPI)) {
374 mp->m_flags |= XFS_MOUNT_DMAPI;
375 } else if (!strcmp(this_char, MNTOPT_XDSM)) {
376 mp->m_flags |= XFS_MOUNT_DMAPI;
377 } else if (!strcmp(this_char, MNTOPT_DMI)) {
378 mp->m_flags |= XFS_MOUNT_DMAPI;
379 } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) { 355 } else if (!strcmp(this_char, MNTOPT_DELAYLOG)) {
380 mp->m_flags |= XFS_MOUNT_DELAYLOG; 356 mp->m_flags |= XFS_MOUNT_DELAYLOG;
381 cmn_err(CE_WARN, 357 cmn_err(CE_WARN,
@@ -387,9 +363,11 @@ xfs_parseargs(
387 cmn_err(CE_WARN, 363 cmn_err(CE_WARN,
388 "XFS: ihashsize no longer used, option is deprecated."); 364 "XFS: ihashsize no longer used, option is deprecated.");
389 } else if (!strcmp(this_char, "osyncisdsync")) { 365 } else if (!strcmp(this_char, "osyncisdsync")) {
390 /* no-op, this is now the default */
391 cmn_err(CE_WARN, 366 cmn_err(CE_WARN,
392 "XFS: osyncisdsync is now the default, option is deprecated."); 367 "XFS: osyncisdsync has no effect, option is deprecated.");
368 } else if (!strcmp(this_char, "osyncisosync")) {
369 cmn_err(CE_WARN,
370 "XFS: osyncisosync has no effect, option is deprecated.");
393 } else if (!strcmp(this_char, "irixsgid")) { 371 } else if (!strcmp(this_char, "irixsgid")) {
394 cmn_err(CE_WARN, 372 cmn_err(CE_WARN,
395 "XFS: irixsgid is now a sysctl(2) variable, option is deprecated."); 373 "XFS: irixsgid is now a sysctl(2) variable, option is deprecated.");
@@ -430,12 +408,6 @@ xfs_parseargs(
430 return EINVAL; 408 return EINVAL;
431 } 409 }
432 410
433 if ((mp->m_flags & XFS_MOUNT_DMAPI) && (!*mtpt || *mtpt[0] == '\0')) {
434 printk("XFS: %s option needs the mount point option as well\n",
435 MNTOPT_DMAPI);
436 return EINVAL;
437 }
438
439 if ((dsunit && !dswidth) || (!dsunit && dswidth)) { 411 if ((dsunit && !dswidth) || (!dsunit && dswidth)) {
440 cmn_err(CE_WARN, 412 cmn_err(CE_WARN,
441 "XFS: sunit and swidth must be specified together"); 413 "XFS: sunit and swidth must be specified together");
@@ -449,18 +421,6 @@ xfs_parseargs(
449 return EINVAL; 421 return EINVAL;
450 } 422 }
451 423
452 /*
453 * Applications using DMI filesystems often expect the
454 * inode generation number to be monotonically increasing.
455 * If we delete inode chunks we break this assumption, so
456 * keep unused inode chunks on disk for DMI filesystems
457 * until we come up with a better solution.
458 * Note that if "ikeep" or "noikeep" mount options are
459 * supplied, then they are honored.
460 */
461 if ((mp->m_flags & XFS_MOUNT_DMAPI) && dmapi_implies_ikeep)
462 mp->m_flags |= XFS_MOUNT_IKEEP;
463
464done: 424done:
465 if (!(mp->m_flags & XFS_MOUNT_NOALIGN)) { 425 if (!(mp->m_flags & XFS_MOUNT_NOALIGN)) {
466 /* 426 /*
@@ -539,10 +499,8 @@ xfs_showargs(
539 { XFS_MOUNT_SWALLOC, "," MNTOPT_SWALLOC }, 499 { XFS_MOUNT_SWALLOC, "," MNTOPT_SWALLOC },
540 { XFS_MOUNT_NOUUID, "," MNTOPT_NOUUID }, 500 { XFS_MOUNT_NOUUID, "," MNTOPT_NOUUID },
541 { XFS_MOUNT_NORECOVERY, "," MNTOPT_NORECOVERY }, 501 { XFS_MOUNT_NORECOVERY, "," MNTOPT_NORECOVERY },
542 { XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC },
543 { XFS_MOUNT_ATTR2, "," MNTOPT_ATTR2 }, 502 { XFS_MOUNT_ATTR2, "," MNTOPT_ATTR2 },
544 { XFS_MOUNT_FILESTREAMS, "," MNTOPT_FILESTREAM }, 503 { XFS_MOUNT_FILESTREAMS, "," MNTOPT_FILESTREAM },
545 { XFS_MOUNT_DMAPI, "," MNTOPT_DMAPI },
546 { XFS_MOUNT_GRPID, "," MNTOPT_GRPID }, 504 { XFS_MOUNT_GRPID, "," MNTOPT_GRPID },
547 { XFS_MOUNT_DELAYLOG, "," MNTOPT_DELAYLOG }, 505 { XFS_MOUNT_DELAYLOG, "," MNTOPT_DELAYLOG },
548 { 0, NULL } 506 { 0, NULL }
@@ -947,7 +905,7 @@ xfs_fs_destroy_inode(
947{ 905{
948 struct xfs_inode *ip = XFS_I(inode); 906 struct xfs_inode *ip = XFS_I(inode);
949 907
950 xfs_itrace_entry(ip); 908 trace_xfs_destroy_inode(ip);
951 909
952 XFS_STATS_INC(vn_reclaim); 910 XFS_STATS_INC(vn_reclaim);
953 911
@@ -1063,10 +1021,8 @@ xfs_log_inode(
1063 * an inode in another recent transaction. So we play it safe and 1021 * an inode in another recent transaction. So we play it safe and
1064 * fire off the transaction anyway. 1022 * fire off the transaction anyway.
1065 */ 1023 */
1066 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); 1024 xfs_trans_ijoin(tp, ip);
1067 xfs_trans_ihold(tp, ip);
1068 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 1025 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1069 xfs_trans_set_sync(tp);
1070 error = xfs_trans_commit(tp, 0); 1026 error = xfs_trans_commit(tp, 0);
1071 xfs_ilock_demote(ip, XFS_ILOCK_EXCL); 1027 xfs_ilock_demote(ip, XFS_ILOCK_EXCL);
1072 1028
@@ -1082,27 +1038,18 @@ xfs_fs_write_inode(
1082 struct xfs_mount *mp = ip->i_mount; 1038 struct xfs_mount *mp = ip->i_mount;
1083 int error = EAGAIN; 1039 int error = EAGAIN;
1084 1040
1085 xfs_itrace_entry(ip); 1041 trace_xfs_write_inode(ip);
1086 1042
1087 if (XFS_FORCED_SHUTDOWN(mp)) 1043 if (XFS_FORCED_SHUTDOWN(mp))
1088 return XFS_ERROR(EIO); 1044 return XFS_ERROR(EIO);
1089 1045
1090 if (wbc->sync_mode == WB_SYNC_ALL) { 1046 if (wbc->sync_mode == WB_SYNC_ALL) {
1091 /* 1047 /*
1092 * Make sure the inode has hit stable storage. By using the 1048 * Make sure the inode has made it it into the log. Instead
1093 * log and the fsync transactions we reduce the IOs we have 1049 * of forcing it all the way to stable storage using a
1094 * to do here from two (log and inode) to just the log. 1050 * synchronous transaction we let the log force inside the
1095 * 1051 * ->sync_fs call do that for thus, which reduces the number
1096 * Note: We still need to do a delwri write of the inode after 1052 * of synchronous log foces dramatically.
1097 * this to flush it to the backing buffer so that bulkstat
1098 * works properly if this is the first time the inode has been
1099 * written. Because we hold the ilock atomically over the
1100 * transaction commit and the inode flush we are guaranteed
1101 * that the inode is not pinned when it returns. If the flush
1102 * lock is already held, then the inode has already been
1103 * flushed once and we don't need to flush it again. Hence
1104 * the code will only flush the inode if it isn't already
1105 * being flushed.
1106 */ 1053 */
1107 xfs_ioend_wait(ip); 1054 xfs_ioend_wait(ip);
1108 xfs_ilock(ip, XFS_ILOCK_SHARED); 1055 xfs_ilock(ip, XFS_ILOCK_SHARED);
@@ -1116,27 +1063,29 @@ xfs_fs_write_inode(
1116 * We make this non-blocking if the inode is contended, return 1063 * We make this non-blocking if the inode is contended, return
1117 * EAGAIN to indicate to the caller that they did not succeed. 1064 * EAGAIN to indicate to the caller that they did not succeed.
1118 * This prevents the flush path from blocking on inodes inside 1065 * This prevents the flush path from blocking on inodes inside
1119 * another operation right now, they get caught later by xfs_sync. 1066 * another operation right now, they get caught later by
1067 * xfs_sync.
1120 */ 1068 */
1121 if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED)) 1069 if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED))
1122 goto out; 1070 goto out;
1123 }
1124 1071
1125 if (xfs_ipincount(ip) || !xfs_iflock_nowait(ip)) 1072 if (xfs_ipincount(ip) || !xfs_iflock_nowait(ip))
1126 goto out_unlock; 1073 goto out_unlock;
1127 1074
1128 /* 1075 /*
1129 * Now we have the flush lock and the inode is not pinned, we can check 1076 * Now we have the flush lock and the inode is not pinned, we
1130 * if the inode is really clean as we know that there are no pending 1077 * can check if the inode is really clean as we know that
1131 * transaction completions, it is not waiting on the delayed write 1078 * there are no pending transaction completions, it is not
1132 * queue and there is no IO in progress. 1079 * waiting on the delayed write queue and there is no IO in
1133 */ 1080 * progress.
1134 if (xfs_inode_clean(ip)) { 1081 */
1135 xfs_ifunlock(ip); 1082 if (xfs_inode_clean(ip)) {
1136 error = 0; 1083 xfs_ifunlock(ip);
1137 goto out_unlock; 1084 error = 0;
1085 goto out_unlock;
1086 }
1087 error = xfs_iflush(ip, 0);
1138 } 1088 }
1139 error = xfs_iflush(ip, 0);
1140 1089
1141 out_unlock: 1090 out_unlock:
1142 xfs_iunlock(ip, XFS_ILOCK_SHARED); 1091 xfs_iunlock(ip, XFS_ILOCK_SHARED);
@@ -1156,7 +1105,8 @@ xfs_fs_clear_inode(
1156{ 1105{
1157 xfs_inode_t *ip = XFS_I(inode); 1106 xfs_inode_t *ip = XFS_I(inode);
1158 1107
1159 xfs_itrace_entry(ip); 1108 trace_xfs_clear_inode(ip);
1109
1160 XFS_STATS_INC(vn_rele); 1110 XFS_STATS_INC(vn_rele);
1161 XFS_STATS_INC(vn_remove); 1111 XFS_STATS_INC(vn_remove);
1162 XFS_STATS_DEC(vn_active); 1112 XFS_STATS_DEC(vn_active);
@@ -1193,22 +1143,13 @@ xfs_fs_put_super(
1193{ 1143{
1194 struct xfs_mount *mp = XFS_M(sb); 1144 struct xfs_mount *mp = XFS_M(sb);
1195 1145
1146 /*
1147 * Unregister the memory shrinker before we tear down the mount
1148 * structure so we don't have memory reclaim racing with us here.
1149 */
1150 xfs_inode_shrinker_unregister(mp);
1196 xfs_syncd_stop(mp); 1151 xfs_syncd_stop(mp);
1197 1152
1198 if (!(sb->s_flags & MS_RDONLY)) {
1199 /*
1200 * XXX(hch): this should be SYNC_WAIT.
1201 *
1202 * Or more likely not needed at all because the VFS is already
1203 * calling ->sync_fs after shutting down all filestem
1204 * operations and just before calling ->put_super.
1205 */
1206 xfs_sync_data(mp, 0);
1207 xfs_sync_attr(mp, 0);
1208 }
1209
1210 XFS_SEND_PREUNMOUNT(mp);
1211
1212 /* 1153 /*
1213 * Blow away any referenced inode in the filestreams cache. 1154 * Blow away any referenced inode in the filestreams cache.
1214 * This can and will cause log traffic as inodes go inactive 1155 * This can and will cause log traffic as inodes go inactive
@@ -1218,14 +1159,10 @@ xfs_fs_put_super(
1218 1159
1219 XFS_bflush(mp->m_ddev_targp); 1160 XFS_bflush(mp->m_ddev_targp);
1220 1161
1221 XFS_SEND_UNMOUNT(mp);
1222
1223 xfs_unmountfs(mp); 1162 xfs_unmountfs(mp);
1224 xfs_freesb(mp); 1163 xfs_freesb(mp);
1225 xfs_inode_shrinker_unregister(mp);
1226 xfs_icsb_destroy_counters(mp); 1164 xfs_icsb_destroy_counters(mp);
1227 xfs_close_devices(mp); 1165 xfs_close_devices(mp);
1228 xfs_dmops_put(mp);
1229 xfs_free_fsname(mp); 1166 xfs_free_fsname(mp);
1230 kfree(mp); 1167 kfree(mp);
1231} 1168}
@@ -1543,7 +1480,6 @@ xfs_fs_fill_super(
1543 struct inode *root; 1480 struct inode *root;
1544 struct xfs_mount *mp = NULL; 1481 struct xfs_mount *mp = NULL;
1545 int flags = 0, error = ENOMEM; 1482 int flags = 0, error = ENOMEM;
1546 char *mtpt = NULL;
1547 1483
1548 mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL); 1484 mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL);
1549 if (!mp) 1485 if (!mp)
@@ -1559,7 +1495,7 @@ xfs_fs_fill_super(
1559 mp->m_super = sb; 1495 mp->m_super = sb;
1560 sb->s_fs_info = mp; 1496 sb->s_fs_info = mp;
1561 1497
1562 error = xfs_parseargs(mp, (char *)data, &mtpt); 1498 error = xfs_parseargs(mp, (char *)data);
1563 if (error) 1499 if (error)
1564 goto out_free_fsname; 1500 goto out_free_fsname;
1565 1501
@@ -1571,16 +1507,12 @@ xfs_fs_fill_super(
1571#endif 1507#endif
1572 sb->s_op = &xfs_super_operations; 1508 sb->s_op = &xfs_super_operations;
1573 1509
1574 error = xfs_dmops_get(mp);
1575 if (error)
1576 goto out_free_fsname;
1577
1578 if (silent) 1510 if (silent)
1579 flags |= XFS_MFSI_QUIET; 1511 flags |= XFS_MFSI_QUIET;
1580 1512
1581 error = xfs_open_devices(mp); 1513 error = xfs_open_devices(mp);
1582 if (error) 1514 if (error)
1583 goto out_put_dmops; 1515 goto out_free_fsname;
1584 1516
1585 if (xfs_icsb_init_counters(mp)) 1517 if (xfs_icsb_init_counters(mp))
1586 mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; 1518 mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB;
@@ -1608,8 +1540,6 @@ xfs_fs_fill_super(
1608 if (error) 1540 if (error)
1609 goto out_filestream_unmount; 1541 goto out_filestream_unmount;
1610 1542
1611 XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, mtpt, mp->m_fsname);
1612
1613 sb->s_magic = XFS_SB_MAGIC; 1543 sb->s_magic = XFS_SB_MAGIC;
1614 sb->s_blocksize = mp->m_sb.sb_blocksize; 1544 sb->s_blocksize = mp->m_sb.sb_blocksize;
1615 sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1; 1545 sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
@@ -1638,7 +1568,6 @@ xfs_fs_fill_super(
1638 1568
1639 xfs_inode_shrinker_register(mp); 1569 xfs_inode_shrinker_register(mp);
1640 1570
1641 kfree(mtpt);
1642 return 0; 1571 return 0;
1643 1572
1644 out_filestream_unmount: 1573 out_filestream_unmount:
@@ -1648,11 +1577,8 @@ xfs_fs_fill_super(
1648 out_destroy_counters: 1577 out_destroy_counters:
1649 xfs_icsb_destroy_counters(mp); 1578 xfs_icsb_destroy_counters(mp);
1650 xfs_close_devices(mp); 1579 xfs_close_devices(mp);
1651 out_put_dmops:
1652 xfs_dmops_put(mp);
1653 out_free_fsname: 1580 out_free_fsname:
1654 xfs_free_fsname(mp); 1581 xfs_free_fsname(mp);
1655 kfree(mtpt);
1656 kfree(mp); 1582 kfree(mp);
1657 out: 1583 out:
1658 return -error; 1584 return -error;
@@ -1759,6 +1685,12 @@ xfs_init_zones(void)
1759 if (!xfs_trans_zone) 1685 if (!xfs_trans_zone)
1760 goto out_destroy_ifork_zone; 1686 goto out_destroy_ifork_zone;
1761 1687
1688 xfs_log_item_desc_zone =
1689 kmem_zone_init(sizeof(struct xfs_log_item_desc),
1690 "xfs_log_item_desc");
1691 if (!xfs_log_item_desc_zone)
1692 goto out_destroy_trans_zone;
1693
1762 /* 1694 /*
1763 * The size of the zone allocated buf log item is the maximum 1695 * The size of the zone allocated buf log item is the maximum
1764 * size possible under XFS. This wastes a little bit of memory, 1696 * size possible under XFS. This wastes a little bit of memory,
@@ -1768,7 +1700,7 @@ xfs_init_zones(void)
1768 (((XFS_MAX_BLOCKSIZE / XFS_BLF_CHUNK) / 1700 (((XFS_MAX_BLOCKSIZE / XFS_BLF_CHUNK) /
1769 NBWORD) * sizeof(int))), "xfs_buf_item"); 1701 NBWORD) * sizeof(int))), "xfs_buf_item");
1770 if (!xfs_buf_item_zone) 1702 if (!xfs_buf_item_zone)
1771 goto out_destroy_trans_zone; 1703 goto out_destroy_log_item_desc_zone;
1772 1704
1773 xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) + 1705 xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) +
1774 ((XFS_EFD_MAX_FAST_EXTENTS - 1) * 1706 ((XFS_EFD_MAX_FAST_EXTENTS - 1) *
@@ -1805,6 +1737,8 @@ xfs_init_zones(void)
1805 kmem_zone_destroy(xfs_efd_zone); 1737 kmem_zone_destroy(xfs_efd_zone);
1806 out_destroy_buf_item_zone: 1738 out_destroy_buf_item_zone:
1807 kmem_zone_destroy(xfs_buf_item_zone); 1739 kmem_zone_destroy(xfs_buf_item_zone);
1740 out_destroy_log_item_desc_zone:
1741 kmem_zone_destroy(xfs_log_item_desc_zone);
1808 out_destroy_trans_zone: 1742 out_destroy_trans_zone:
1809 kmem_zone_destroy(xfs_trans_zone); 1743 kmem_zone_destroy(xfs_trans_zone);
1810 out_destroy_ifork_zone: 1744 out_destroy_ifork_zone:
@@ -1835,6 +1769,7 @@ xfs_destroy_zones(void)
1835 kmem_zone_destroy(xfs_efi_zone); 1769 kmem_zone_destroy(xfs_efi_zone);
1836 kmem_zone_destroy(xfs_efd_zone); 1770 kmem_zone_destroy(xfs_efd_zone);
1837 kmem_zone_destroy(xfs_buf_item_zone); 1771 kmem_zone_destroy(xfs_buf_item_zone);
1772 kmem_zone_destroy(xfs_log_item_desc_zone);
1838 kmem_zone_destroy(xfs_trans_zone); 1773 kmem_zone_destroy(xfs_trans_zone);
1839 kmem_zone_destroy(xfs_ifork_zone); 1774 kmem_zone_destroy(xfs_ifork_zone);
1840 kmem_zone_destroy(xfs_dabuf_zone); 1775 kmem_zone_destroy(xfs_dabuf_zone);