On Mon, May 04, 2009 at 05:25:13PM -0500, Serge E. Hallyn wrote:
> Quoting Oren Laadan ([email protected]):
> > 
> > Serge E. Hallyn wrote:
> > > Quoting Matt Helsley ([email protected]):
> > > 
> > > ...
> > > 
> > >> 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 <[email protected]>
Cc: [email protected]
---
 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
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to