Hello community,

here is the log from the commit of package drbd for openSUSE:Factory checked in 
at 2017-05-29 22:19:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/drbd (Old)
 and      /work/SRC/openSUSE:Factory/.drbd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "drbd"

Mon May 29 22:19:22 2017 rev:58 rq:498239 version:9.0.7rc2+git.36abd387

Changes:
--------
--- /work/SRC/openSUSE:Factory/drbd/drbd.changes        2017-04-28 
09:14:11.778526958 +0200
+++ /work/SRC/openSUSE:Factory/.drbd.new/drbd.changes   2017-05-29 
22:19:25.189937271 +0200
@@ -1,0 +2,6 @@
+Thu May 25 07:55:55 UTC 2017 - [email protected]
+
+- bsc#1038852, fix initial sync not triggered
+  add patch fix-initial-sync-stop.patch
+
+-------------------------------------------------------------------

Old:
----
  drbd-9.0.7rc2+git.0677d8b1.tar.bz2

New:
----
  drbd-9.0.7rc2+git.36abd387.tar.bz2
  fix-initial-sync-stop.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ drbd.spec ++++++
--- /var/tmp/diff_new_pack.jnp92y/_old  2017-05-29 22:19:25.765855950 +0200
+++ /var/tmp/diff_new_pack.jnp92y/_new  2017-05-29 22:19:25.765855950 +0200
@@ -25,7 +25,7 @@
 %endif
 
 Name:           drbd
-Version:        9.0.7rc2+git.0677d8b1
+Version:        9.0.7rc2+git.36abd387
 Release:        0
 Summary:        DRBD driver for Linux
 License:        GPL-2.0
@@ -37,6 +37,7 @@
 Source2:        Module.supported
 Source3:        drbd_git_revision
 Patch1:         fix-resync-finished-with-syncs-have-bits-set.patch
+Patch2:         fix-initial-sync-stop.patch
 BuildRequires:  kernel-source
 BuildRequires:  kernel-syms
 BuildRequires:  module-init-tools
@@ -69,6 +70,7 @@
 %prep
 %setup -q -n drbd-%{version}
 %patch1 -p1
+%patch2 -p1
 
 mkdir source
 cp -a drbd/. source/. || :

++++++ _service ++++++
--- /var/tmp/diff_new_pack.jnp92y/_old  2017-05-29 22:19:25.825847479 +0200
+++ /var/tmp/diff_new_pack.jnp92y/_new  2017-05-29 22:19:25.829846915 +0200
@@ -10,7 +10,7 @@
     <param name="version">9.0.7rc2</param>
 -->
     <param name="versionformat">9.0.7rc2+git.%h</param>
-    <param name="revision">0677d8b1ce8a81bc8913391cf8ebd09ad30d32c0</param>
+    <param name="revision">36abd387b6e4341a58117711b2e95777c1dad8ab</param>
   </service>
 
   <service name="recompress" mode="disabled">

++++++ drbd-9.0.7rc2+git.0677d8b1.tar.bz2 -> drbd-9.0.7rc2+git.36abd387.tar.bz2 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_kref_debug.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_kref_debug.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_kref_debug.c       2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_kref_debug.c       2017-05-22 
14:34:52.000000000 +0200
@@ -65,7 +65,7 @@
                [10] = "free",
                [11] = "connect_timer",
                [12] = "receive_peer_dagtag()",
-               [13] = "for_each_conneciton_ref()",
+               [13] = "for_each_connection_ref()",
                [14] = "w_update_peers",
                [15] = "for_each_peer_device_ref()",
                [16] = "queue_twopc",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_main.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_main.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_main.c     2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_main.c     2017-05-22 
14:34:52.000000000 +0200
@@ -949,7 +949,7 @@
 
 /**
  * conn_prepare_command() - Allocate a send buffer for a packet/command
- * @conneciton:        the connections the packet will be sent through
+ * @connection:        the connections the packet will be sent through
  * @size:      number of bytes to allocate
  * @stream:    DATA_STREAM or CONTROL_STREAM
  *
@@ -973,7 +973,7 @@
 
 /**
  * drbd_prepare_command() - Allocate a send buffer for a packet/command
- * @conneciton:        the connections the packet will be sent through
+ * @connection:        the connections the packet will be sent through
  * @size:      number of bytes to allocate
  * @stream:    DATA_STREAM or CONTROL_STREAM
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_nl.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_nl.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_nl.c       2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_nl.c       2017-05-22 
14:34:52.000000000 +0200
@@ -1332,12 +1332,12 @@
 
        if (device->ldev->md.effective_size != 0)
                return true;
-       if (device->disk_state[NEW] == D_UP_TO_DATE)
+       if (device->disk_state[NOW] == D_UP_TO_DATE)
                return true;
 
        rcu_read_lock();
        for_each_peer_device_rcu(peer_device, device) {
-               if (peer_device->disk_state[NEW] == D_UP_TO_DATE) {
+               if (peer_device->disk_state[NOW] == D_UP_TO_DATE) {
                        rv = true;
                        break;
                }
@@ -3300,7 +3300,7 @@
                if (p == peer_device)
                        continue;
 
-               if (p->repl_state[NEW] == L_SYNC_TARGET)
+               if (p->repl_state[NOW] == L_SYNC_TARGET)
                        return true;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_receiver.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_receiver.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_receiver.c 2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_receiver.c 2017-05-22 
14:34:52.000000000 +0200
@@ -5321,7 +5321,7 @@
        int vnr = resource->twopc_reply.vnr;
 
        if (mask.i == 0 && val.i == 0 &&
-           resource->role[NEW] == R_PRIMARY && vnr == -1) {
+           resource->role[NOW] == R_PRIMARY && vnr == -1) {
                /* A node far away test if there are primaries. I am the guy he
                   is concerned about... He learned about me in the CS_PREPARE 
phase.
                   Since he is commiting it I know that he is outdated now... */
@@ -5341,7 +5341,7 @@
                }
        }
        if (flags & CS_PREPARE && mask.role == role_MASK && val.role == 
R_PRIMARY &&
-           resource->role[NEW] == R_PRIMARY) {
+           resource->role[NOW] == R_PRIMARY) {
                struct net_conf *nc;
 
                nc = rcu_dereference(connection->transport.net_conf);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_req.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_req.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_req.c      2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_req.c      2017-05-22 
14:34:52.000000000 +0200
@@ -914,11 +914,15 @@
                D_ASSERT(device, req->rq_state[idx] & RQ_NET_PENDING);
                mod_rq_state(req, m, peer_device, 0, 
RQ_NET_QUEUED|RQ_EXP_BARR_ACK);
 
-               /* close the epoch, in case it outgrew the limit */
-               rcu_read_lock();
-               nc = 
rcu_dereference(peer_device->connection->transport.net_conf);
-               p = nc->max_epoch_size;
-               rcu_read_unlock();
+               /* close the epoch, in case it outgrew the limit,
+                * or this is a "batch bio" */
+               if (!(req->rq_state[0] & (RQ_UNMAP|RQ_WSAME))) {
+                       rcu_read_lock();
+                       nc = 
rcu_dereference(peer_device->connection->transport.net_conf);
+                       p = nc->max_epoch_size;
+                       rcu_read_unlock();
+               } else
+                       p = 1;
                if (device->resource->current_tle_writes >= p)
                        start_new_tl_epoch(device->resource);
                break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_state.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_state.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_state.c    2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_state.c    2017-05-22 
14:34:52.000000000 +0200
@@ -132,7 +132,7 @@
                case D_CONSISTENT:
                case D_UP_TO_DATE:
                        /* These states imply that there is a connection. If 
there is
-                          a conneciton we do not need to insist that the peer 
was
+                          a connection we do not need to insist that the peer 
was
                           outdated. */
                        continue;
                case D_MASK: ;
@@ -1776,7 +1776,7 @@
                        if (peer_disk_state[NEW] == D_UP_TO_DATE)
                                ++good_data_count[NEW];
 
-                       /* Pause a SyncSource until it finishes resync as 
target on other connecitons */
+                       /* Pause a SyncSource until it finishes resync as 
target on other connections */
                        if (repl_state[OLD] != L_SYNC_SOURCE && repl_state[NEW] 
== L_SYNC_SOURCE &&
                            is_sync_target_other_c(peer_device))
                                peer_device->resync_susp_other_c[NEW] = true;
@@ -3040,7 +3040,7 @@
 
                        /* Outdated myself, or became D_UP_TO_DATE tell peers */
                        if (disk_state[NEW] >= D_INCONSISTENT && 
disk_state[NEW] != disk_state[OLD] &&
-                           repl_state[OLD] >= L_ESTABLISHED && repl_state[OLD] 
>= L_ESTABLISHED)
+                           repl_state[OLD] >= L_ESTABLISHED && repl_state[NEW] 
>= L_ESTABLISHED)
                                send_state = true;
 
                        /* Skipped resync with peer_device, tell others... */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_transport.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_transport.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_transport.c        2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_transport.c        2017-05-22 
14:34:52.000000000 +0200
@@ -164,7 +164,7 @@
 }
 
 int drbd_get_listener(struct drbd_transport *transport, struct drbd_path *path,
-                     int (*create_listener)(struct drbd_transport *, const 
struct sockaddr *addr, struct drbd_listener **))
+                     int (*init_listener)(struct drbd_transport *, const 
struct sockaddr *addr, struct drbd_listener *))
 {
        struct drbd_connection *connection =
                container_of(transport, struct drbd_connection, transport);
@@ -193,20 +193,25 @@
                if (listener)
                        return 0;
 
-               err = create_listener(transport, addr, &new_listener);
+               new_listener = 
kmalloc(transport->class->listener_instance_size, GFP_KERNEL);
+               if (!new_listener)
+                       return -ENOMEM;
+
+               kref_init(&new_listener->kref);
+               INIT_LIST_HEAD(&new_listener->waiters);
+               new_listener->resource = resource;
+               new_listener->pending_accepts = 0;
+               spin_lock_init(&new_listener->waiters_lock);
+
+               err = init_listener(transport, addr, new_listener);
                if (err) {
+                       kfree(new_listener);
                        if (err == -EADDRINUSE && ++tries < 3) {
                                schedule_timeout_uninterruptible(HZ / 20);
                                continue;
                        }
                        return err;
                }
-
-               kref_init(&new_listener->kref);
-               INIT_LIST_HEAD(&new_listener->waiters);
-               new_listener->resource = resource;
-               new_listener->pending_accepts = 0;
-               spin_lock_init(&new_listener->waiters_lock);
        }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_transport_tcp.c 
new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_transport_tcp.c
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd/drbd_transport_tcp.c    2017-04-11 
13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd/drbd_transport_tcp.c    2017-05-22 
14:34:52.000000000 +0200
@@ -101,6 +101,7 @@
        .name = "tcp",
        .instance_size = sizeof(struct drbd_tcp_transport),
        .path_instance_size = sizeof(struct dtt_path),
+       .listener_instance_size = sizeof(struct dtt_listener),
        .module = THIS_MODULE,
        .init = dtt_init,
        .list = LIST_HEAD_INIT(tcp_transport_class.list),
@@ -757,13 +758,13 @@
        kfree(listener);
 }
 
-static int dtt_create_listener(struct drbd_transport *transport,
-                              const struct sockaddr *addr,
-                              struct drbd_listener **ret_listener)
+static int dtt_init_listener(struct drbd_transport *transport,
+                            const struct sockaddr *addr,
+                            struct drbd_listener *drbd_listener)
 {
        int err, sndbuf_size, rcvbuf_size, addr_len;
        struct sockaddr_storage my_addr;
-       struct dtt_listener *listener = NULL;
+       struct dtt_listener *listener = container_of(drbd_listener, struct 
dtt_listener, listener);
        struct socket *s_listen;
        struct net_conf *nc;
        const char *what;
@@ -799,13 +800,6 @@
        if (err < 0)
                goto out;
 
-       what = "kmalloc";
-       listener = kmalloc(sizeof(*listener), GFP_KERNEL);
-       if (!listener) {
-               err = -ENOMEM;
-               goto out;
-       }
-
        listener->s_listen = s_listen;
        write_lock_bh(&s_listen->sk->sk_callback_lock);
        listener->original_sk_state_change = s_listen->sk->sk_state_change;
@@ -822,7 +816,6 @@
        listener->listener.destroy = dtt_destroy_listener;
        init_waitqueue_head(&listener->wait);
 
-       *ret_listener = &listener->listener;
        return 0;
 out:
        if (s_listen)
@@ -832,8 +825,6 @@
            err != -EAGAIN && err != -EINTR && err != -ERESTARTSYS && err != 
-EADDRINUSE)
                tr_err(transport, "%s failed, err = %d\n", what, err);
 
-       kfree(listener);
-
        return err;
 }
 
@@ -917,7 +908,7 @@
                if (!drbd_path->listener) {
                        kref_get(&drbd_path->kref);
                        spin_unlock(&tcp_transport->paths_lock);
-                       err = drbd_get_listener(transport, drbd_path, 
dtt_create_listener);
+                       err = drbd_get_listener(transport, drbd_path, 
dtt_init_listener);
                        kref_put(&drbd_path->kref, drbd_destroy_path);
                        if (err)
                                goto out;
@@ -1296,7 +1287,7 @@
                drbd_put_listener(drbd_path);
 
        if (active && !drbd_path->listener) {
-               int err = drbd_get_listener(transport, drbd_path, 
dtt_create_listener);
+               int err = drbd_get_listener(transport, drbd_path, 
dtt_init_listener);
                if (err)
                        return err;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/drbd-9.0.7rc2+git.0677d8b1/drbd-headers/drbd_transport.h 
new/drbd-9.0.7rc2+git.36abd387/drbd-headers/drbd_transport.h
--- old/drbd-9.0.7rc2+git.0677d8b1/drbd-headers/drbd_transport.h        
2017-04-11 13:12:22.000000000 +0200
+++ new/drbd-9.0.7rc2+git.36abd387/drbd-headers/drbd_transport.h        
2017-05-22 14:34:52.000000000 +0200
@@ -195,6 +195,7 @@
        const char *name;
        const int instance_size;
        const int path_instance_size;
+       const int listener_instance_size;
        struct module *module;
        int (*init)(struct drbd_transport *);
        struct list_head list;
@@ -228,7 +229,7 @@
 extern void drbd_print_transports_loaded(struct seq_file *seq);
 
 extern int drbd_get_listener(struct drbd_transport *transport, struct 
drbd_path *path,
-                            int (*create_fn)(struct drbd_transport *, const 
struct sockaddr *, struct drbd_listener **));
+                            int (*init_fn)(struct drbd_transport *, const 
struct sockaddr *, struct drbd_listener *));
 extern void drbd_put_listener(struct drbd_path *path);
 extern struct drbd_path *drbd_find_path_by_addr(struct drbd_listener *, struct 
sockaddr_storage *);
 extern bool drbd_stream_send_timed_out(struct drbd_transport *transport, enum 
drbd_stream stream);

++++++ drbd_git_revision ++++++
--- /var/tmp/diff_new_pack.jnp92y/_old  2017-05-29 22:19:26.189796088 +0200
+++ /var/tmp/diff_new_pack.jnp92y/_new  2017-05-29 22:19:26.189796088 +0200
@@ -1 +1 @@
-GIT-hash: 0677d8b1ce8a81bc8913391cf8ebd09ad30d32c0
+GIT-hash: 36abd387b6e4341a58117711b2e95777c1dad8ab

++++++ fix-initial-sync-stop.patch ++++++
diff -Naur drbd-9.0.7rc2+git.36abd387.orig/drbd/drbd_state.c 
drbd-9.0.7rc2+git.36abd387/drbd/drbd_state.c
--- drbd-9.0.7rc2+git.36abd387.orig/drbd/drbd_state.c   2017-05-25 
13:50:27.713884206 +0800
+++ drbd-9.0.7rc2+git.36abd387/drbd/drbd_state.c        2017-05-25 
15:47:29.354091027 +0800
@@ -3039,7 +3039,7 @@
                                
send_new_state_to_all_peer_devices(state_change, n_device);
 
                        /* Outdated myself, or became D_UP_TO_DATE tell peers */
-                       if (disk_state[NEW] >= D_INCONSISTENT && 
disk_state[NEW] != disk_state[OLD] &&
+                       if (disk_state[OLD] >= D_OUTDATED && disk_state[NEW] != 
disk_state[OLD] &&
                            repl_state[OLD] >= L_ESTABLISHED && repl_state[NEW] 
>= L_ESTABLISHED)
                                send_state = true;
 

Reply via email to