]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Drivers: hv: utils: Check VSS daemon is listening before a hot backup
authorAlex Ng <alexng@messages.microsoft.com>
Fri, 2 Sep 2016 12:58:25 +0000 (05:58 -0700)
committerJack Vogel <jack.vogel@oracle.com>
Thu, 1 Feb 2018 23:19:27 +0000 (15:19 -0800)
Hyper-V host will send a VSS_OP_HOT_BACKUP request to check if guest is
ready for a live backup/snapshot. The driver should respond to the check
only if the daemon is running and listening to requests. This allows the
host to fallback to standard snapshots in case the VSS daemon is not
running.

Signed-off-by: Alex Ng <alexng@messages.microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Orabug: 27426063
(cherry picked from commit db886e4d24c2b3d334be2cc1bd1bd05d547eb4c4)
Signed-off-by: Jack Vogel <jack.vogel@oracle.com>
Reviewed-by: Ashok Vairavan <ashok.vairavan@oracle.com>
drivers/hv/hv_snapshot.c
tools/hv/hv_vss_daemon.c

index c4013c859bcd905c5bef56d469fd13a482af6ab8..a6707133c297c7a1435b1bdcda446256671fc080 100644 (file)
@@ -142,6 +142,11 @@ static int vss_on_msg(void *msg, int len)
                return vss_handle_handshake(vss_msg);
        } else if (vss_transaction.state == HVUTIL_USERSPACE_REQ) {
                vss_transaction.state = HVUTIL_USERSPACE_RECV;
+
+               if (vss_msg->vss_hdr.operation == VSS_OP_HOT_BACKUP)
+                       vss_transaction.msg->vss_cf.flags =
+                               VSS_HBU_NO_AUTO_RECOVERY;
+
                if (cancel_delayed_work_sync(&vss_timeout_work)) {
                        vss_respond_to_host(vss_msg->error);
                        /* Transaction is finished, reset the state. */
@@ -202,6 +207,7 @@ static void vss_handle_request(struct work_struct *dummy)
         */
        case VSS_OP_THAW:
        case VSS_OP_FREEZE:
+       case VSS_OP_HOT_BACKUP:
                if (vss_transaction.state < HVUTIL_READY) {
                        /* Userspace is not registered yet */
                        vss_respond_to_host(HV_E_FAIL);
@@ -210,9 +216,6 @@ static void vss_handle_request(struct work_struct *dummy)
                vss_transaction.state = HVUTIL_HOSTMSG_RECEIVED;
                vss_send_op();
                return;
-       case VSS_OP_HOT_BACKUP:
-               vss_transaction.msg->vss_cf.flags = VSS_HBU_NO_AUTO_RECOVERY;
-               break;
        case VSS_OP_GET_DM_INFO:
                vss_transaction.msg->dm_info.flags = 0;
                break;
index 96234b638249e6f7c2ecb1c4820b62a7abefdd4c..5d658c8014d8cbf70ecccc02cae9455f5a14fc48 100644 (file)
@@ -250,6 +250,9 @@ int main(int argc, char *argv[])
                                syslog(LOG_ERR, "/etc/fstab and /proc/mounts");
                        }
                        break;
+               case VSS_OP_HOT_BACKUP:
+                       syslog(LOG_INFO, "VSS: op=CHECK HOT BACKUP\n");
+                       break;
                default:
                        syslog(LOG_ERR, "Illegal op:%d\n", op);
                }