public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: xfs-oss <xfs@oss.sgi.com>
Subject: [PATCH] log reasons for mount-time sunit/swidth rejection
Date: Tue, 09 Sep 2008 21:48:50 -0500	[thread overview]
Message-ID: <48C73592.6050806@sandeen.net> (raw)

In xfs_mountfs ....

        /*
         * Check if sb_agblocks is aligned at stripe boundary
         * If sb_agblocks is NOT aligned turn off m_dalign since
         * allocator alignment is within an ag, therefore ag has
         * to be aligned at stripe boundary.
         */
        update_flags = 0LL;
        if (mp->m_dalign && !(mfsi_flags & XFS_MFSI_SECOND)) {
                /*
                 * If stripe unit and stripe width are not multiples
                 * of the fs blocksize turn off alignment.
                 */
                if ((BBTOB(mp->m_dalign) & mp->m_blockmask) ||
                    (BBTOB(mp->m_swidth) & mp->m_blockmask)) {
                        if (mp->m_flags & XFS_MOUNT_RETERR) {
                                cmn_err(CE_WARN,
                                        "XFS: alignment check 1 failed");
                                error = XFS_ERROR(EINVAL);
                                goto error1;
                        }

^^^^ here we fail with an oh-so-helpful warning

                        mp->m_dalign = mp->m_swidth = 0;
                } else {
                        /*
                         * Convert the stripe unit and width to FSBs.
                         */
                        mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign);
                        if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) {
                                if (mp->m_flags & XFS_MOUNT_RETERR) {
                                        error = XFS_ERROR(EINVAL);
                                        goto error1;
                                }

^^^ here we fail with no message from mount whatsoever!

                                xfs_fs_cmn_err(CE_WARN, mp,
"stripe alignment turned off: sunit(%d)/swidth(%d) incompatible with agsize(%d)",
                                        mp->m_dalign, mp->m_swidth,
                                        sbp->sb_agblocks);

                                mp->m_dalign = 0;
                                mp->m_swidth = 0;
                        } else if (mp->m_dalign) {
                                mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth);
                        } else {
                                if (mp->m_flags & XFS_MOUNT_RETERR) {
                                        xfs_fs_cmn_err(CE_WARN, mp,
"stripe alignment turned off: sunit(%d) less than bsize(%d)",
                                                mp->m_dalign,
                                                mp->m_blockmask +1);
                                        error = XFS_ERROR(EINVAL);
                                        goto error1;
                                }

^^^ here we fail with a misleading message (it's not turned off; it's a failure
and we return as such).

                                mp->m_swidth = 0;
                        }
                }

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=1.342;r2=1.343

Did that commit just misplace one of the error messages?

I'm thinking that we should certainly printk a message in all cases, and the 
"turned off" messages should only come if !XFS_MOUNT_RETERR; something like this?
(might want to clean up messages or cmn_err vs. xfs_fs_cmn_err or whatnot,
but you get the idea ....

-----------------------------------

XFS: log reasons for mount-time sunit/swidth rejection

When mount-time sunit/swidth are deemed incompatible with fs
geometry, leave a message in the logs rather than failing
silently.

Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---


Index: linux-2.6.26.x86_64/fs/xfs/xfs_mount.c
===================================================================
--- linux-2.6.26.x86_64.orig/fs/xfs/xfs_mount.c
+++ linux-2.6.26.x86_64/fs/xfs/xfs_mount.c
@@ -745,11 +745,13 @@ xfs_update_alignment(xfs_mount_t *mp, in
 		 */
 		if ((BBTOB(mp->m_dalign) & mp->m_blockmask) ||
 		    (BBTOB(mp->m_swidth) & mp->m_blockmask)) {
-			if (mp->m_flags & XFS_MOUNT_RETERR) {
-				cmn_err(CE_WARN,
-					"XFS: alignment check 1 failed");
+			cmn_err(CE_WARN,
+				"XFS: sunit (%d) or swidth (%d) not "
+				"blocksize (%d) multiples",
+				mp->m_dalign, mp->m_swidth,
+				mp->m_blockmask +1);
+			if (mp->m_flags & XFS_MOUNT_RETERR)
 				return XFS_ERROR(EINVAL);
-			}
 			mp->m_dalign = mp->m_swidth = 0;
 		} else {
 			/*
@@ -757,28 +759,26 @@ xfs_update_alignment(xfs_mount_t *mp, in
 			 */
 			mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign);
 			if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) {
-				if (mp->m_flags & XFS_MOUNT_RETERR) {
-					return XFS_ERROR(EINVAL);
-				}
 				xfs_fs_cmn_err(CE_WARN, mp,
-"stripe alignment turned off: sunit(%d)/swidth(%d) incompatible with agsize(%d)",
-					mp->m_dalign, mp->m_swidth,
-					sbp->sb_agblocks);
-
+					"agsize (%d) not multiple of sunit (%d)",
+					sbp->sb_agblocks, mp->m_dalign);
+				if (mp->m_flags & XFS_MOUNT_RETERR)
+					return XFS_ERROR(EINVAL);
 				mp->m_dalign = 0;
 				mp->m_swidth = 0;
 			} else if (mp->m_dalign) {
 				mp->m_swidth = XFS_BB_TO_FSBT(mp, mp->m_swidth);
 			} else {
-				if (mp->m_flags & XFS_MOUNT_RETERR) {
-					xfs_fs_cmn_err(CE_WARN, mp,
-"stripe alignment turned off: sunit(%d) less than bsize(%d)",
-                                        	mp->m_dalign,
-						mp->m_blockmask +1);
+				xfs_fs_cmn_err(CE_WARN, mp,
+					"sunit (%d) less than bsize (%d)",
+                                       	mp->m_dalign, mp->m_blockmask +1);
+				if (mp->m_flags & XFS_MOUNT_RETERR)
 					return XFS_ERROR(EINVAL);
-				}
 				mp->m_swidth = 0;
 			}
+			if (mp->m_dalign == 0 && mp->m_swidth == 0)
+				xfs_fs_cmn_err(CE_WARN, mp,
+					"stripe aligment turned off.");
 		}
 
 		/*

             reply	other threads:[~2008-09-10  2:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-10  2:48 Eric Sandeen [this message]
2008-09-11  5:51 ` [PATCH] log reasons for mount-time sunit/swidth rejection Mark Goodwin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48C73592.6050806@sandeen.net \
    --to=sandeen@sandeen.net \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox