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;
