From: Timothy Shimmin <tes@sgi.com>
To: Christoph Hellwig <hch@lst.de>
Cc: xfs@oss.sgi.com, toei.rei@stargazer.at
Subject: Re: [PATCH] fix barrier fail detection
Date: Fri, 10 Oct 2008 15:17:03 +1100 [thread overview]
Message-ID: <48EED73F.1010208@sgi.com> (raw)
In-Reply-To: <48EEAC1A.2080309@sgi.com>
Timothy Shimmin wrote:
> Christoph Hellwig wrote:
>> Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c
>> ===================================================================
>> --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-10-09 13:36:50.000000000 +0200
>> +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-10-09 13:38:38.000000000 +0200
>> @@ -1007,6 +1007,7 @@ xfs_buf_iodone_work(
>> (bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) {
>> XB_TRACE(bp, "ordered_retry", bp->b_iodone);
>> bp->b_flags &= ~XBF_ORDERED;
>> + bp->b_flags |= _XFS_BARRIER_FAILED;
>> xfs_buf_iorequest(bp);
>> } else if (bp->b_iodone)
>> (*(bp->b_iodone))(bp);
>
> Actually, probably need to update the comment for this one.
>
>> Index: linux-2.6-xfs/fs/xfs/xfs_log.c
>> ===================================================================
>> --- linux-2.6-xfs.orig/fs/xfs/xfs_log.c 2008-10-09 13:38:44.000000000 +0200
>> +++ linux-2.6-xfs/fs/xfs/xfs_log.c 2008-10-09 13:39:32.000000000 +0200
>> @@ -1037,7 +1037,8 @@ xlog_iodone(xfs_buf_t *bp)
>> * layer, it means the underlyin device no longer supports
>> * barrier I/O. Warn loudly and turn off barriers.
>> */
>> - if ((l->l_mp->m_flags & XFS_MOUNT_BARRIER) && !XFS_BUF_ISORDERED(bp)) {
>> + if (bp->b_flags & _XFS_BARRIER_FAILED) {
>> + bp->b_flags &= ~_XFS_BARRIER_FAILED;
>> l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER;
>> xfs_fs_cmn_err(CE_WARN, l->l_mp,
>> "xlog_iodone: Barriers are no longer supported"
>>
> Okay, we probably should update this comment too.
>
> Might as well fix the existing typo "underlyin" in the comment as well :)
> Thanks,
> --Tim
>
i.e. something like:
Index: 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_buf.c
===================================================================
--- 2.6.x-xfs-quilt.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-09-19 13:47:36.000000000 +1000
+++ 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_buf.c 2008-10-10 15:07:51.316145158 +1100
@@ -1001,12 +1001,13 @@ xfs_buf_iodone_work(
* We can get an EOPNOTSUPP to ordered writes. Here we clear the
* ordered flag and reissue them. Because we can't tell the higher
* layers directly that they should not issue ordered I/O anymore, they
- * need to check if the ordered flag was cleared during I/O completion.
+ * need to check if the _XFS_BARRIER_FAILED flag was set during I/O completion.
*/
if ((bp->b_error == EOPNOTSUPP) &&
(bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) {
XB_TRACE(bp, "ordered_retry", bp->b_iodone);
bp->b_flags &= ~XBF_ORDERED;
+ bp->b_flags |= _XFS_BARRIER_FAILED;
xfs_buf_iorequest(bp);
} else if (bp->b_iodone)
(*(bp->b_iodone))(bp);
Index: 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_buf.h
===================================================================
--- 2.6.x-xfs-quilt.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-09-19 13:47:36.000000000 +1000
+++ 2.6.x-xfs-quilt/fs/xfs/linux-2.6/xfs_buf.h 2008-10-10 11:54:23.269373217 +1100
@@ -85,6 +85,14 @@ typedef enum {
* modifications being lost.
*/
_XBF_PAGE_LOCKED = (1 << 22),
+
+ /*
+ * If we try a barrier write, but it fails we have to communicate
+ * this to the upper layers. Unfortunately b_error gets overwritten
+ * when the buffer is re-issued so we have to add another flag to
+ * keep this information.
+ */
+ _XFS_BARRIER_FAILED = (1 << 23),
} xfs_buf_flags_t;
typedef enum {
Index: 2.6.x-xfs-quilt/fs/xfs/xfs_log.c
===================================================================
--- 2.6.x-xfs-quilt.orig/fs/xfs/xfs_log.c 2008-09-22 11:54:19.000000000 +1000
+++ 2.6.x-xfs-quilt/fs/xfs/xfs_log.c 2008-10-10 15:09:56.967725107 +1100
@@ -1033,11 +1033,12 @@ xlog_iodone(xfs_buf_t *bp)
l = iclog->ic_log;
/*
- * If the ordered flag has been removed by a lower
- * layer, it means the underlyin device no longer supports
+ * If the _XFS_BARRIER_FAILED flag was set by a lower
+ * layer, it means the underlying device no longer supports
* barrier I/O. Warn loudly and turn off barriers.
*/
- if ((l->l_mp->m_flags & XFS_MOUNT_BARRIER) && !XFS_BUF_ISORDERED(bp)) {
+ if (bp->b_flags & _XFS_BARRIER_FAILED) {
+ bp->b_flags &= ~_XFS_BARRIER_FAILED;
l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER;
xfs_fs_cmn_err(CE_WARN, l->l_mp,
"xlog_iodone: Barriers are no longer supported"
next prev parent reply other threads:[~2008-10-10 4:15 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-09 13:00 [PATCH] fix barrier fail detection Christoph Hellwig
2008-10-09 14:24 ` Eric Sandeen
2008-10-09 22:35 ` Dave Chinner
2008-10-10 0:43 ` Christoph Hellwig
2008-10-10 0:44 ` Timothy Shimmin
2008-10-10 1:12 ` Timothy Shimmin
2008-10-10 4:17 ` Timothy Shimmin [this message]
2008-10-10 4:27 ` Dave Chinner
2008-10-10 9:23 ` Christoph Hellwig
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=48EED73F.1010208@sgi.com \
--to=tes@sgi.com \
--cc=hch@lst.de \
--cc=toei.rei@stargazer.at \
--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