From: Jan Kara <jack@suse.cz>
To: Dave Chinner <dchinner@redhat.com>
Cc: Jan Kara <jack@suse.cz>,
linux-fsdevel@vger.kernel.org, Al Viro <viro@ZenIV.linux.org.uk>,
Ben Myers <bpm@sgi.com>, Alex Elder <elder@kernel.org>,
xfs@oss.sgi.com
Subject: Re: [PATCH 18/27] xfs: Convert to new freezing code
Date: Tue, 5 Jun 2012 10:43:21 +0200 [thread overview]
Message-ID: <20120605084321.GA17438@quack.suse.cz> (raw)
In-Reply-To: <20120605041546.GB3019@devil.redhat.com>
On Tue 05-06-12 14:15:46, Dave Chinner wrote:
> On Sat, Jun 02, 2012 at 12:30:32AM +0200, Jan Kara wrote:
> > Generic code now blocks all writers from standard write paths. So we add
> > blocking of all writers coming from ioctl (we get a protection of ioctl against
> > racing remount read-only as a bonus) and convert xfs_file_aio_write() to a
> > non-racy freeze protection. We also keep freeze protection on transaction
> > start to block internal filesystem writes such as removal of preallocated
> > blocks.
>
> I don't think this will apply to a current TOT XFS - the end_io
> context hunks look wrong. Perhaps your rebased this before the XFS
> tree was merged?
Umm, doesn't look like that. I've based my patches on top of
51eab603f5c86dd1eae4c525df3e7f7eeab401d6 which is after XFS merge.
> > CC: Ben Myers <bpm@sgi.com>
> > CC: Alex Elder <elder@kernel.org>
> > CC: xfs@oss.sgi.com
> > Signed-off-by: Jan Kara <jack@suse.cz>
> > ---
> > fs/xfs/xfs_aops.c | 18 ++++++++++++++++
> > fs/xfs/xfs_file.c | 10 ++++++--
> > fs/xfs/xfs_ioctl.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++--
> > fs/xfs/xfs_ioctl32.c | 12 ++++++++++
> > fs/xfs/xfs_iomap.c | 4 +-
> > fs/xfs/xfs_mount.c | 2 +-
> > fs/xfs/xfs_mount.h | 3 --
> > fs/xfs/xfs_sync.c | 2 +-
> > fs/xfs/xfs_trans.c | 17 ++++++++++++--
> > fs/xfs/xfs_trans.h | 2 +
> > 10 files changed, 109 insertions(+), 16 deletions(-)
> >
> > diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
> > index ae31c31..4a001b8 100644
> > --- a/fs/xfs/xfs_aops.c
> > +++ b/fs/xfs/xfs_aops.c
> > @@ -124,6 +124,12 @@ xfs_setfilesize_trans_alloc(
> > ioend->io_append_trans = tp;
> >
> > /*
> > + * We will pass freeze protection with a transaction. So tell lockdep
> > + * we released it.
> > + */
> > + rwsem_release(&ioend->io_inode->i_sb->s_writers.lock_map[SB_FREEZE_FS-1],
> > + 1, _THIS_IP_);
> > + /*
>
> Oh, that's rather ugly. If this is necessary where a transaction
> handle is passed to another thread and completed there, then this
> really needs to be wrapped in helper functions so it is always done
> correctly when the PF_TRANS flag is also transferred. That can be
> done later, though. It will also need to be done to the allocation
> code which passes allocation off to a workqueue, but that is
> currently synchronous so won't be a problem for this change right
> now...
This lockdep magic is necessary because lockdep freaks out if you acquire
lock in one process and release it in another one. But wrapping that inside a
function is a good idea.
> > @@ -631,7 +638,11 @@ xfs_ioc_space(
> > if (ioflags & IO_INVIS)
> > attr_flags |= XFS_ATTR_DMI;
> >
> > + error = mnt_want_write_file(filp);
> > + if (error)
> > + return error;
> > error = xfs_change_file_space(ip, cmd, bf, filp->f_pos, attr_flags);
> > + mnt_drop_write_file(filp);
> > return -error;
>
> Those positive/negative error conversions are starting to get
> confusing and difficult to get right. I'm going to have to convert
> XFS at some point to return negative errors everywhere so we can get
> rid of that problem once and for all...
Yeah, it's a bit messy.
> Otherwise, this looks OK. I'll need to pull this in and test it, but
> the I was using the previous version of the patch series for almost
> the entire 3.4-rc cycle and didn't come across any problems with
> it....
Thanks!
Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
next prev parent reply other threads:[~2012-06-05 8:43 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-01 22:30 [PATCH 00/27 v6] Fix filesystem freezing deadlocks Jan Kara
2012-06-01 22:30 ` [PATCH 01/27] fb_defio: Push file_update_time() into fb_deferred_io_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 02/27] fs: Push file_update_time() into __block_page_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 03/27] ceph: Push file_update_time() into ceph_page_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 04/27] 9p: Push file_update_time() into v9fs_vm_page_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 05/27] gfs2: Push file_update_time() into gfs2_page_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 06/27] sysfs: Push file_update_time() into bin_page_mkwrite() Jan Kara
2012-06-01 22:30 ` [PATCH 07/27] mm: Update file times from fault path only if .page_mkwrite is not set Jan Kara
2012-06-01 22:30 ` [PATCH 08/27] mm: Make default vm_ops provide ->page_mkwrite handler Jan Kara
2012-06-01 22:30 ` [PATCH 09/27] fs: Push mnt_want_write() outside of i_mutex Jan Kara
2012-06-01 22:30 ` [PATCH 10/27] fat: " Jan Kara
2012-06-01 22:30 ` [PATCH 11/27] btrfs: " Jan Kara
2012-06-01 22:30 ` [PATCH 12/27] nfsd: " Jan Kara
2012-06-01 22:30 ` [PATCH 13/27] fs: Improve filesystem freezing handling Jan Kara
2012-06-01 22:30 ` [PATCH 14/27] fs: Add freezing handling to mnt_want_write() / mnt_drop_write() Jan Kara
2012-06-06 8:04 ` Dave Chinner
2012-06-06 15:16 ` Jan Kara
2012-06-01 22:30 ` [PATCH 15/27] fs: Skip atime update on frozen filesystem Jan Kara
2012-06-01 22:30 ` [PATCH 16/27] fs: Protect write paths by sb_start_write - sb_end_write Jan Kara
2012-06-01 22:30 ` [PATCH 17/27] ext4: Convert to new freezing mechanism Jan Kara
2012-06-11 3:13 ` Ted Ts'o
2012-06-01 22:30 ` [PATCH 18/27] xfs: Convert to new freezing code Jan Kara
2012-06-05 4:15 ` Dave Chinner
2012-06-05 8:43 ` Jan Kara [this message]
2012-06-01 22:30 ` [PATCH 19/27] ocfs2: Convert to new freezing mechanism Jan Kara
2012-06-01 22:30 ` [PATCH 20/27] gfs2: " Jan Kara
2012-06-01 22:30 ` [PATCH 21/27] fuse: " Jan Kara
2012-06-01 22:30 ` [PATCH 22/27] ntfs: " Jan Kara
2012-06-01 22:30 ` [PATCH 24/27] btrfs: " Jan Kara
2012-06-01 22:30 ` [PATCH 25/27] ext2: Implement freezing Jan Kara
2012-06-01 22:30 ` [PATCH 26/27] fs: Remove old freezing mechanism Jan Kara
2012-06-01 22:30 ` [PATCH 27/27] Documentation: Correct s_umount state for freeze_fs/unfreeze_fs Jan Kara
[not found] ` <1338589841-9568-1-git-send-email-jack-AlSwsSmVLrQ@public.gmane.org>
2012-06-01 22:30 ` [PATCH 23/27] nilfs2: Convert to new freezing mechanism Jan Kara
2012-06-09 6:29 ` [PATCH 00/27 v6] Fix filesystem freezing deadlocks Al Viro
-- strict thread matches above, loose matches on Subject: below --
2012-04-16 16:13 [PATCH 00/19 v5] " Jan Kara
2012-04-16 16:13 ` [PATCH 18/27] xfs: Convert to new freezing code Jan Kara
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=20120605084321.GA17438@quack.suse.cz \
--to=jack@suse.cz \
--cc=bpm@sgi.com \
--cc=dchinner@redhat.com \
--cc=elder@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@ZenIV.linux.org.uk \
--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;
as well as URLs for NNTP newsgroup(s).