[Devel] Re: [RFC][PATCH 04/36] btrfs: Add checkpoint file operations

Matt Helsley matthltc at us.ibm.com
Mon May 4 18:06:09 PDT 2009


On Mon, May 04, 2009 at 05:25:13PM -0500, Serge E. Hallyn wrote:
> Quoting Oren Laadan (orenl at cs.columbia.edu):
> > 
> > Serge E. Hallyn wrote:
> > > Quoting Matt Helsley (matthltc at us.ibm.com):
> > > 
> > > ...
> > > 
> > >> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> > >> index a7acfe6..f16be9d 100644
> > >> --- a/fs/btrfs/super.c
> > >> +++ b/fs/btrfs/super.c
> > >> @@ -686,6 +686,7 @@ static const struct file_operations btrfs_ctl_fops = {
> > >>  	.unlocked_ioctl	 = btrfs_control_ioctl,
> > >>  	.compat_ioctl = btrfs_control_ioctl,
> > >>  	.owner	 = THIS_MODULE,
> > >> +	.checkpoint = generic_file_checkpoint,
> > >>  };
> > > 
> > > Do we really want this one?
> > 
> > We need to checkpoint the open file regardless of whether the underlying
> > filesystem has snapshot capabilities.
> 
> But maybe we need to refuse a checkpoint if a task is talking to the
> underlying btrfs filesystem?

Good catch. The ctl file is a device node which, as best I can tell, is
empty. So the only obvious concern are the unlocked_ioctl()s. I expect
these ioctls() are "special" so generic_file_checkpoint() is probably
insufficient here.

v2 of the btrfs checkpoint op patch, which removes this hunk, is below.

A non-generic handler which blocks or prevents ioctl() during checkpoint would
seem to be required. Definitely a topic worthy of discussion on linux-fsdevel if
/when we add a .checkpoint op for this. 

As best I can tell we don't have anything to handle the generic ioctl() case
either. Am I wrong?

Cheers,
	-Matt Helsley
---

Add the checkpoint operation for btrfs files and directories.


Signed-off-by: Matt Helsley <matthltc at us.ibm.com>
Cc: linux-fsdevel at vger.kernel.org
---
 fs/btrfs/file.c  |    1 +
 fs/btrfs/inode.c |    1 +
 fs/btrfs/super.c |    1 +
 3 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 482f8db..23d5c72 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1334,4 +1334,5 @@ struct file_operations btrfs_file_operations = {
 #ifdef CONFIG_COMPAT
 	.compat_ioctl	= btrfs_ioctl,
 #endif
+	.checkpoint	= generic_file_checkpoint,
 };
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 65219f6..583d57e 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -5158,6 +5158,7 @@ static struct file_operations btrfs_dir_file_operations = {
 #endif
 	.release        = btrfs_release_file,
 	.fsync		= btrfs_sync_file,
+	.checkpoint	= generic_file_checkpoint,
 };

 static struct extent_io_ops btrfs_extent_io_ops = {
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list