On 29 Oct, Siddharth Aggarwal wrote:
> 
> Thanks for your reply.
> 
> Hmm. At the moment, the user can send an ioctl to define a checkpoint. But
> I would guess that this could happen between 2 strategy() function calls
> corresponding to the same filesystem operation?

Yes.

> So if there a way to block
> filesystem operations while a snapshot is taken? I can't unmount an active
> filesystem before the snapshot and remount it after. Any suggestions?

Yes, this is done by the following code in ffs_snapshot():

        /*
         * Suspend operation on filesystem.
         */
        for (;;) {
                vn_finished_write(wrtmp);
                if ((error = vfs_write_suspend(vp->v_mount)) != 0) {
                        vn_start_write(NULL, &wrtmp, V_WAIT);
                        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
                        goto out;
                }
                if (mp->mnt_kern_flag & MNTK_SUSPENDED)
                        break;
                vn_start_write(NULL, &wrtmp, V_WAIT);
        }

I think the snapshot code works at a higher level than what you are
implementing, so I believe that the snapshot code doesn't need to sync
all the files to create a consistent snapshot.  You may run into
problems with syncing unwritten data while writing is suspended, but I'm
not sure because don't understand the code all that well.
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to