xfs
[Top] [All Lists]

Re: [PATCH] xfs: only issues a cache flush on unmount if barriers are en

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH] xfs: only issues a cache flush on unmount if barriers are enabled.
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 03 Mar 2009 10:14:00 -0600
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20090224133354.GA15820@xxxxxxxxxxxxx>
References: <20090224133354.GA15820@xxxxxxxxxxxxx>
User-agent: Thunderbird 2.0.0.19 (Macintosh/20081209)
Christoph Hellwig wrote:
> Currently we unconditionally issue a flush from xfs_free_buftarg, but
> since 2.6.29-rc1 this gives a warning in the style of
> 
>       Filesystem "vdb": Disabling barriers, trial barrier write failed
> 
> when the underlying device doesn't support these cache flushes.  So make
> the flush conditional on the barrier flag.
> 
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Patch seems fine,

Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxxx>

but it seems that the changelog is not quite correct; the message shown
above should only ever happen on mount, not unmount, I think.

So I'd either put the right message in or just make a vague reference to
it, because otherwise it's confusing.  :)

Thanks,
-Eric

> Index: xfs/fs/xfs/linux-2.6/xfs_buf.c
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_buf.c       2009-02-23 22:46:03.363048798 
> +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_buf.c    2009-02-23 22:48:47.915052140 +0100
> @@ -34,6 +34,12 @@
>  #include <linux/backing-dev.h>
>  #include <linux/freezer.h>
>  
> +#include "xfs_sb.h"
> +#include "xfs_inum.h"
> +#include "xfs_ag.h"
> +#include "xfs_dmapi.h"
> +#include "xfs_mount.h"
> +
>  static kmem_zone_t *xfs_buf_zone;
>  STATIC int xfsbufd(void *);
>  STATIC int xfsbufd_wakeup(int, gfp_t);
> @@ -1442,10 +1448,12 @@ xfs_unregister_buftarg(
>  
>  void
>  xfs_free_buftarg(
> -     xfs_buftarg_t           *btp)
> +     struct xfs_mount        *mp,
> +     struct xfs_buftarg      *btp)
>  {
>       xfs_flush_buftarg(btp, 1);
> -     xfs_blkdev_issue_flush(btp);
> +     if (mp->m_flags & XFS_MOUNT_BARRIER)
> +             xfs_blkdev_issue_flush(btp);
>       xfs_free_bufhash(btp);
>       iput(btp->bt_mapping->host);
>  
> Index: xfs/fs/xfs/linux-2.6/xfs_buf.h
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_buf.h       2009-02-23 22:46:03.375049208 
> +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_buf.h    2009-02-23 22:46:35.660960473 +0100
> @@ -416,7 +416,7 @@ static inline int XFS_bwrite(xfs_buf_t *
>   *   Handling of buftargs.
>   */
>  extern xfs_buftarg_t *xfs_alloc_buftarg(struct block_device *, int);
> -extern void xfs_free_buftarg(xfs_buftarg_t *);
> +extern void xfs_free_buftarg(struct xfs_mount *, struct xfs_buftarg *);
>  extern void xfs_wait_buftarg(xfs_buftarg_t *);
>  extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int);
>  extern int xfs_flush_buftarg(xfs_buftarg_t *, int);
> Index: xfs/fs/xfs/linux-2.6/xfs_super.c
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_super.c     2009-02-23 22:46:46.637924949 
> +0100
> +++ xfs/fs/xfs/linux-2.6/xfs_super.c  2009-02-23 22:47:19.787924537 +0100
> @@ -740,15 +740,15 @@ xfs_close_devices(
>  {
>       if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
>               struct block_device *logdev = mp->m_logdev_targp->bt_bdev;
> -             xfs_free_buftarg(mp->m_logdev_targp);
> +             xfs_free_buftarg(mp, mp->m_logdev_targp);
>               xfs_blkdev_put(logdev);
>       }
>       if (mp->m_rtdev_targp) {
>               struct block_device *rtdev = mp->m_rtdev_targp->bt_bdev;
> -             xfs_free_buftarg(mp->m_rtdev_targp);
> +             xfs_free_buftarg(mp, mp->m_rtdev_targp);
>               xfs_blkdev_put(rtdev);
>       }
> -     xfs_free_buftarg(mp->m_ddev_targp);
> +     xfs_free_buftarg(mp, mp->m_ddev_targp);
>  }
>  
>  /*
> @@ -817,9 +817,9 @@ xfs_open_devices(
>  
>   out_free_rtdev_targ:
>       if (mp->m_rtdev_targp)
> -             xfs_free_buftarg(mp->m_rtdev_targp);
> +             xfs_free_buftarg(mp, mp->m_rtdev_targp);
>   out_free_ddev_targ:
> -     xfs_free_buftarg(mp->m_ddev_targp);
> +     xfs_free_buftarg(mp, mp->m_ddev_targp);
>   out_close_rtdev:
>       if (rtdev)
>               xfs_blkdev_put(rtdev);
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
> 

<Prev in Thread] Current Thread [Next in Thread>
  • Re: [PATCH] xfs: only issues a cache flush on unmount if barriers are enabled., Eric Sandeen <=