qga: ignore EBUSY when freezing a filesystem
the current implementation fails if we try to freeze an already frozen filesystem. This can happen if a filesystem is mounted more than once (e.g. with a bind mount). Suggested-by: Christian Theune <ct@flyingcircus.io> Cc: qemu-stable@nongnu.org Signed-off-by: Peter Lieven <pl@kamp.de> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									26de229657
								
							
						
					
					
						commit
						ce2eb6c4a0
					
				| 
						 | 
				
			
			@ -1243,6 +1243,9 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
 | 
			
		|||
         * filesystems may not implement fsfreeze for less obvious reasons.
 | 
			
		||||
         * these will report EOPNOTSUPP. we simply ignore these when tallying
 | 
			
		||||
         * the number of frozen filesystems.
 | 
			
		||||
         * if a filesystem is mounted more than once (aka bind mount) a
 | 
			
		||||
         * consecutive attempt to freeze an already frozen filesystem will
 | 
			
		||||
         * return EBUSY.
 | 
			
		||||
         *
 | 
			
		||||
         * any other error means a failure to freeze a filesystem we
 | 
			
		||||
         * expect to be freezable, so return an error in those cases
 | 
			
		||||
| 
						 | 
				
			
			@ -1250,7 +1253,7 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
 | 
			
		|||
         */
 | 
			
		||||
        ret = ioctl(fd, FIFREEZE);
 | 
			
		||||
        if (ret == -1) {
 | 
			
		||||
            if (errno != EOPNOTSUPP) {
 | 
			
		||||
            if (errno != EOPNOTSUPP && errno != EBUSY) {
 | 
			
		||||
                error_setg_errno(errp, errno, "failed to freeze %s",
 | 
			
		||||
                                 mount->dirname);
 | 
			
		||||
                close(fd);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue