On Wed, Feb 03, 2016 at 04:49:43PM +0300, Andrey Ryabinin wrote:
> 
> 
> On 02/03/2016 03:12 PM, Vladimir Davydov wrote:
> 
> >>    ub = get_exec_ub();
> >> @@ -246,15 +252,18 @@ SYSCALL_DEFINE0(sync)
> >>            fsb = __ve_fsync_behavior(ve);
> >>            if (fsb == FSYNC_NEVER)
> >>                    goto skip;
> >> +
> >> +          if (fsb == FSYNC_FILTERED)
> >> +                  sync_ub = get_io_ub();
> >>    }
> >>  
> >> -  wakeup_flusher_threads(0, WB_REASON_SYNC);
> >> -  iterate_supers(sync_inodes_one_sb, NULL);
> >> -  iterate_supers(sync_fs_one_sb, &nowait);
> >> -  iterate_supers(sync_fs_one_sb, &wait);
> >> +  wakeup_flusher_threads_ub(0, ub, WB_REASON_SYNC);
> > 
> > s/ub,/sync_ub,
> > 
> > ?
> > 
> 
> Yup,
> 
> >> +  iterate_supers(sync_inodes_one_sb, sync_ub);
> >> +  sync_filesystems(sync_ub, nowait);
> >> +  sync_filesystems(sync_ub, wait);
> >>    iterate_bdevs(fdatawrite_one_bdev, NULL);
> >>    iterate_bdevs(fdatawait_one_bdev, NULL);
> > 
> > If sync_ub != NULL, you sync inodes and bdevs twice, here and in
> > sync_filesystems_ve. Better move all the iterate_supers/bdevs from here
> > to sync_filesystems under !ub branch?
> > 
> 
> I'm thinking about something like this:
> 
> @@ -255,15 +253,22 @@ SYSCALL_DEFINE0(sync)
>  
>                 if (fsb == FSYNC_FILTERED)
>                         sync_ub = get_io_ub();
> +
> +               if (sync_ub && (sync_ub != get_ub0())) {
> +                       wakeup_flusher_threads_ub(0, sync_ub, WB_REASON_SYNC);
> +                       sync_filesystems_ve(get_exec_env(), ub, nowait);
> +                       sync_filesystems_ve(get_exec_env(), ub, wait);
> +                       goto skip;
> +               }
>         }
> 
> 
> !sync_ub path left untouched.
> 

Looks good to me.
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to