[Top] [All Lists]

Re: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_tra

To: Jan Kara <jack@xxxxxxx>
Subject: Re: [PATCH 6/8] xfs: Use generic writers counter instead of m_active_trans counter
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Fri, 03 Feb 2012 20:42:56 -0600
Cc: linux-fsdevel@xxxxxxxxxxxxxxx, Dave Chinner <dchinner@xxxxxxxxxx>, Surbhi Palande <csurbhi@xxxxxxxxx>, Kamal Mostafa <kamal@xxxxxxxxxxxxx>, Christoph Hellwig <hch@xxxxxxxxxxxxx>, LKML <linux-kernel@xxxxxxxxxxxxxxx>, xfs@xxxxxxxxxxx, linux-ext4@xxxxxxxxxxxxxxx
In-reply-to: <1327091686-23177-7-git-send-email-jack@xxxxxxx>
References: <1327091686-23177-1-git-send-email-jack@xxxxxxx> <1327091686-23177-7-git-send-email-jack@xxxxxxx>
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0) Gecko/20120129 Thunderbird/10.0
On 1/20/12 2:34 PM, Jan Kara wrote:
> m_active_trans counter is racy wrt filesystem freezing. The patch replaces it
> with generic counter of running transactions which is properly synchronized
> with filesystem freezing. Things are a bit more complex because we need to log
> a dummy transaction and free block counters after the filesystem is frozen so
> we need to pass information to _xfs_trans_alloc() whether the transaction is
> part of filesystem freezing or not.
> Signed-off-by: Jan Kara <jack@xxxxxxx>
> ---


>  xfs_trans_t *
>  _xfs_trans_alloc(
>       xfs_mount_t     *mp,
>       uint            type,
> -     uint            memflags)
> +     uint            memflags,
> +     bool            freezing)
>  {
>       xfs_trans_t     *tp;
> -     atomic_inc(&mp->m_active_trans);
> -
> +     if (!freezing)
> +             sb_start_write(mp->m_super, SB_FREEZE_TRANS);
> +     else
> +             WARN_ON(xfs_test_for_freeze(mp) != SB_FREEZE_TRANS);

Hm this could be an issue because for both the umount path and the 
freeze / xfs_quiesce_attr path, we call xfs_log_sbcount which sends
"true" for freezing and we'll trip up here because we won't be
in SB_FREEZE_TRANS during umount.

I think we have to push the flag all the way up to xfs_log_sbcount


<Prev in Thread] Current Thread [Next in Thread>