···213213STATIC int214214xfs_mount_validate_sb(215215 xfs_mount_t *mp,216216- xfs_sb_t *sbp)216216+ xfs_sb_t *sbp,217217+ int flags)217218{218219 /*219220 * If the log device and data device have the···224223 * a volume filesystem in a non-volume manner.225224 */226225 if (sbp->sb_magicnum != XFS_SB_MAGIC) {227227- cmn_err(CE_WARN, "XFS: bad magic number");226226+ xfs_fs_mount_cmn_err(flags, "bad magic number");228227 return XFS_ERROR(EWRONGFS);229228 }230229231230 if (!XFS_SB_GOOD_VERSION(sbp)) {232232- cmn_err(CE_WARN, "XFS: bad version");231231+ xfs_fs_mount_cmn_err(flags, "bad version");233232 return XFS_ERROR(EWRONGFS);234233 }235234236235 if (unlikely(237236 sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) {238238- cmn_err(CE_WARN,239239- "XFS: filesystem is marked as having an external log; "240240- "specify logdev on the\nmount command line.");241241- XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(1)",242242- XFS_ERRLEVEL_HIGH, mp, sbp);243243- return XFS_ERROR(EFSCORRUPTED);237237+ xfs_fs_mount_cmn_err(flags,238238+ "filesystem is marked as having an external log; "239239+ "specify logdev on the\nmount command line.");240240+ return XFS_ERROR(EINVAL);244241 }245242246243 if (unlikely(247244 sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) {248248- cmn_err(CE_WARN,249249- "XFS: filesystem is marked as having an internal log; "250250- "don't specify logdev on\nthe mount command line.");251251- XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(2)",252252- XFS_ERRLEVEL_HIGH, mp, sbp);253253- return XFS_ERROR(EFSCORRUPTED);245245+ xfs_fs_mount_cmn_err(flags,246246+ "filesystem is marked as having an internal log; "247247+ "do not specify logdev on\nthe mount command line.");248248+ return XFS_ERROR(EINVAL);254249 }255250256251 /*···271274 (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) ||272275 (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) ||273276 (sbp->sb_imax_pct > 100 || sbp->sb_imax_pct < 1))) {274274- cmn_err(CE_WARN, "XFS: SB sanity check 1 failed");275275- XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(3)",276276- XFS_ERRLEVEL_LOW, mp, sbp);277277+ xfs_fs_mount_cmn_err(flags, "SB sanity check 1 failed");277278 return XFS_ERROR(EFSCORRUPTED);278279 }279280···284289 (xfs_drfsbno_t)sbp->sb_agcount * sbp->sb_agblocks ||285290 sbp->sb_dblocks < (xfs_drfsbno_t)(sbp->sb_agcount - 1) *286291 sbp->sb_agblocks + XFS_MIN_AG_BLOCKS)) {287287- cmn_err(CE_WARN, "XFS: SB sanity check 2 failed");288288- XFS_ERROR_REPORT("xfs_mount_validate_sb(4)",289289- XFS_ERRLEVEL_LOW, mp);292292+ xfs_fs_mount_cmn_err(flags, "SB sanity check 2 failed");290293 return XFS_ERROR(EFSCORRUPTED);291294 }292295···300307 (sbp->sb_dblocks << (sbp->sb_blocklog - BBSHIFT)) > UINT_MAX ||301308 (sbp->sb_rblocks << (sbp->sb_blocklog - BBSHIFT)) > UINT_MAX)) {302309#endif303303- cmn_err(CE_WARN,304304- "XFS: File system is too large to be mounted on this system.");310310+ xfs_fs_mount_cmn_err(flags,311311+ "file system too large to be mounted on this system.");305312 return XFS_ERROR(E2BIG);306313 }307314308315 if (unlikely(sbp->sb_inprogress)) {309309- cmn_err(CE_WARN, "XFS: file system busy");310310- XFS_ERROR_REPORT("xfs_mount_validate_sb(5)",311311- XFS_ERRLEVEL_LOW, mp);316316+ xfs_fs_mount_cmn_err(flags, "file system busy");312317 return XFS_ERROR(EFSCORRUPTED);313318 }314319···314323 * Version 1 directory format has never worked on Linux.315324 */316325 if (unlikely(!XFS_SB_VERSION_HASDIRV2(sbp))) {317317- cmn_err(CE_WARN,318318- "XFS: Attempted to mount file system using version 1 directory format");326326+ xfs_fs_mount_cmn_err(flags,327327+ "file system using version 1 directory format");319328 return XFS_ERROR(ENOSYS);320329 }321330···323332 * Until this is fixed only page-sized or smaller data blocks work.324333 */325334 if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) {326326- cmn_err(CE_WARN,327327- "XFS: Attempted to mount file system with blocksize %d bytes",335335+ xfs_fs_mount_cmn_err(flags,336336+ "file system with blocksize %d bytes",328337 sbp->sb_blocksize);329329- cmn_err(CE_WARN,330330- "XFS: Only page-sized (%ld) or less blocksizes currently work.",338338+ xfs_fs_mount_cmn_err(flags,339339+ "only pagesize (%ld) or less will currently work.",331340 PAGE_SIZE);332341 return XFS_ERROR(ENOSYS);333342 }···475484 * Does the initial read of the superblock.476485 */477486int478478-xfs_readsb(xfs_mount_t *mp)487487+xfs_readsb(xfs_mount_t *mp, int flags)479488{480489 unsigned int sector_size;481490 unsigned int extra_flags;···497506 bp = xfs_buf_read_flags(mp->m_ddev_targp, XFS_SB_DADDR,498507 BTOBB(sector_size), extra_flags);499508 if (!bp || XFS_BUF_ISERROR(bp)) {500500- cmn_err(CE_WARN, "XFS: SB read failed");509509+ xfs_fs_mount_cmn_err(flags, "SB read failed");501510 error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM;502511 goto fail;503512 }···511520 sbp = XFS_BUF_TO_SBP(bp);512521 xfs_xlatesb(XFS_BUF_PTR(bp), &(mp->m_sb), 1, XFS_SB_ALL_BITS);513522514514- error = xfs_mount_validate_sb(mp, &(mp->m_sb));523523+ error = xfs_mount_validate_sb(mp, &(mp->m_sb), flags);515524 if (error) {516516- cmn_err(CE_WARN, "XFS: SB validate failed");525525+ xfs_fs_mount_cmn_err(flags, "SB validate failed");517526 goto fail;518527 }519528···521530 * We must be able to do sector-sized and sector-aligned IO.522531 */523532 if (sector_size > mp->m_sb.sb_sectsize) {524524- cmn_err(CE_WARN,525525- "XFS: device supports only %u byte sectors (not %u)",533533+ xfs_fs_mount_cmn_err(flags,534534+ "device supports only %u byte sectors (not %u)",526535 sector_size, mp->m_sb.sb_sectsize);527536 error = ENOSYS;528537 goto fail;···539548 bp = xfs_buf_read_flags(mp->m_ddev_targp, XFS_SB_DADDR,540549 BTOBB(sector_size), extra_flags);541550 if (!bp || XFS_BUF_ISERROR(bp)) {542542- cmn_err(CE_WARN, "XFS: SB re-read failed");551551+ xfs_fs_mount_cmn_err(flags, "SB re-read failed");543552 error = bp ? XFS_BUF_GETERROR(bp) : ENOMEM;544553 goto fail;545554 }···669678 int error = 0;670679671680 if (mp->m_sb_bp == NULL) {672672- if ((error = xfs_readsb(mp))) {681681+ if ((error = xfs_readsb(mp, mfsi_flags))) {673682 return error;674683 }675684 }
+4-1
fs/xfs/xfs_mount.h
···510510 */511511#define XFS_MFSI_SECOND 0x01 /* Secondary mount -- skip stuff */512512#define XFS_MFSI_CLIENT 0x02 /* Is a client -- skip lots of stuff */513513+/* XFS_MFSI_RRINODES */513514#define XFS_MFSI_NOUNLINK 0x08 /* Skip unlinked inode processing in */514515 /* log recovery */515516#define XFS_MFSI_NO_QUOTACHECK 0x10 /* Skip quotacheck processing */517517+/* XFS_MFSI_CONVERT_SUNIT */518518+#define XFS_MFSI_QUIET 0x40 /* Be silent if mount errors found */516519517520/*518521 * Macros for getting from mount to vfs and back.···584581extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *,585582 uint, int);586583extern struct xfs_buf *xfs_getsb(xfs_mount_t *, int);587587-extern int xfs_readsb(xfs_mount_t *mp);584584+extern int xfs_readsb(xfs_mount_t *, int);588585extern void xfs_freesb(xfs_mount_t *);589586extern void xfs_do_force_shutdown(bhv_desc_t *, int, char *, int);590587extern int xfs_syncsub(xfs_mount_t *, int, int, int *);
+4-1
fs/xfs/xfs_vfsops.c
···442442 p = vfs_bhv_lookup(vfsp, VFS_POSITION_IO);443443 mp->m_io_ops = p ? *(xfs_ioops_t *) vfs_bhv_custom(p) : xfs_iocore_xfs;444444445445+ if (args->flags & XFSMNT_QUIET)446446+ flags |= XFS_MFSI_QUIET;447447+445448 /*446449 * Open real time and log devices - order is important.447450 */···495492 error = xfs_start_flags(vfsp, args, mp);496493 if (error)497494 goto error1;498498- error = xfs_readsb(mp);495495+ error = xfs_readsb(mp, flags);499496 if (error)500497 goto error1;501498 error = xfs_finish_flags(vfsp, args, mp);