All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Namjae Jeon <namjae.jeon@samsung.com>
Cc: "'Dave Chinner'" <david@fromorbit.com>,
	"'Theodore Ts'o'" <tytso@mit.edu>,
	"'Alexander Viro'" <viro@zeniv.linux.org.uk>,
	"'Brian Foster'" <bfoster@redhat.com>,
	"'Dmitry Monakhov'" <dmonakhov@openvz.org>,
	"'Lukáš Czerner'" <lczerner@redhat.com>,
	linux-fsdevel@vger.kernel.org,
	"'Ashish Sangwan'" <a.sangwan@samsung.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH] fs: file freeze support
Date: Tue, 20 Jan 2015 12:21:37 +0100	[thread overview]
Message-ID: <20150120112137.GC15756@quack.suse.cz> (raw)
In-Reply-To: <005601d033e8$d0b338a0$7219a9e0$@samsung.com>

On Mon 19-01-15 22:07:01, Namjae Jeon wrote:
> > > When this state is set, any process which tries to modify the file's address
> > > space, either by pagefault mmap writes or using write(2), will block until
> > > the this state is cleared. I_WRITE_FREEZED is set by calling FS_IOC_FWFREEZE
> > > ioctl and clear by FS_IOC_FWTHAW ioctl.
> > >
> > > File write freeze functionality, when used in conjunction with
> > > inode's immutable flag can be used for creating truly stable file snapshots
> > > wherein write freeze will prevent any modification to the file from already
> > > open file descriptors and immutable flag will prevent any new modification
> > > to the file. One of the intended uses for stable file snapshots would be in
> > > the defragmentation applications which defrags single file.
> > 
> > I don't quite understand why the full filesystem freeze is
> > necessary? The thaw occurs immediately after I_WRITE_FREEZED is set,
> We started by looking at fs freeze for file freeze implementation,
> So got biased for using fs freeze or similar approach.
> Thanks for suggesting a better way.
> 
> > which means there's nothing that prevent the file from being
> > truncated or otherwise modified by fallocate, etc while it is
> > frozen....
> Right, So, After that, we had also thought of setting immutable
> flag of inode. Immutable flag + I_WRITE_FROZEN => truly frozen file.
> 
> > 
> > AFAICT, fsync will bring the file down to a consistent state and
> > we've already got freeze hooks for all inode modification
> > operations. We also have IO barriers for truncate operations so that
> > we can wait for all outstanding IO to complete, so I would have
> > thought this covers all bases for an inode freeze. i.e.:
> Right.
> 
> > 
> > i_mutex -> I_FROZEN -> fsync -> inode_dio_wait
> > 
> > Should give us a clean inode where there are not ongoing operations
> > by the time that inode_dio_wait() completes. All new modification
> > operations need to check I_FROZEN in addition to the superblock
> > freeze checks...
> I checked the routines where checks for I_FROZEN would be required.
> Most of them are Ok but do_unlinkat() confuses me a little.
> vfs_unlink is called under parent inode's i_mutex, so we cannot sleep
> keeping parent's i_mutex held.
> i.e while freezing file, all file in directory are blocked by parent
> i_mutex. Is it ok to release parnets->mutex before checking for I_FROZEN
> or there is some idea?
  So I believe Dave thought that you'd just reuse places we currently use
to call sb_start_write() / mnt_want_write(). You'd probably have to come up
with a function like path_want_write() (takes struct path as an argument)
and which will call mnt_want_write(), sb_start_write(), and do appropriate
inode freeze handling. Then you replace all calls to mnt_want_write() with
calls to path_want_write()... Possibly you can also provide a trivial
wrapper for path_want_write() which takes struct file instead.

This should also deal with the locking problems you describe above as
mnt_want_write() is always called before taking i_mutex.

								Honza
-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR

  reply	other threads:[~2015-01-20 11:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-15 11:36 [RFC PATCH] fs: file freeze support Namjae Jeon
2015-01-15 15:19 ` Dmitry Monakhov
2015-01-16  5:54   ` Namjae Jeon
2015-01-15 16:17 ` Jan Kara
2015-01-16  6:48   ` Namjae Jeon
2015-01-16 10:57     ` Jan Kara
2015-01-19 12:34       ` Namjae Jeon
2015-01-18 23:33 ` Dave Chinner
2015-01-19 13:07   ` Namjae Jeon
2015-01-20 11:21     ` Jan Kara [this message]
2015-01-20 22:22       ` Dave Chinner
2015-01-21  0:15       ` Namjae Jeon

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=20150120112137.GC15756@quack.suse.cz \
    --to=jack@suse.cz \
    --cc=a.sangwan@samsung.com \
    --cc=bfoster@redhat.com \
    --cc=david@fromorbit.com \
    --cc=dmonakhov@openvz.org \
    --cc=lczerner@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namjae.jeon@samsung.com \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.