On Fri, Aug 05, 2011 at 10:27:00AM +0100, Stefan Hajnoczi wrote: > On Fri, Aug 5, 2011 at 10:04 AM, Paolo Bonzini <pbonz...@redhat.com> wrote: > > On 08/05/2011 10:40 AM, Stefan Hajnoczi wrote: > >> > >> 4. Implement bdrv_reopen() > >> > >> First call bdrv_extract_fds() to stash the file descriptors, then close > >> the > >> block device. Try opening the new image but if that fails, reopen using > >> the > >> stashed file descriptors. > > > > Why not do the latter unconditionally? > > Because you cannot change O_DIRECT on an open fd :(. This is why > we're going through this pain.
Hmm, I remember hearing that before, but looking at the current fcntl() manpage, it claims you *can* change O_DIRECT using SET_FL. Perhaps this is a newish feature, but it'd be nicer to use it if possible ? [man 2 fcntl] F_SETFL (long) Set the file status flags to the value specified by arg. File access mode (O_RDONLY, O_WRONLY, O_RDWR) and file creation flags (i.e., O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC) in arg are ignored. On Linux this command can only change the O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK flags. [/man] Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|