Hello community, here is the log from the commit of package drbd for openSUSE:Factory checked in at 2018-02-12 10:15:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/drbd (Old) and /work/SRC/openSUSE:Factory/.drbd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "drbd" Mon Feb 12 10:15:40 2018 rev:66 rq:575375 version:9.0.12+git.969e477d Changes: -------- --- /work/SRC/openSUSE:Factory/drbd/drbd.changes 2018-01-25 12:41:32.383864789 +0100 +++ /work/SRC/openSUSE:Factory/.drbd.new/drbd.changes 2018-02-12 10:15:41.700467352 +0100 @@ -1,0 +2,8 @@ +Sun Feb 11 06:39:19 UTC 2018 - nw...@suse.com + +- bsc#1080458, enable build with kernel-rt on x86_64. +- bsc#1080459, support build against 4.15.0. + setup_timer() change to timer_setup() +- Add patch support-timer-setup.patch + +------------------------------------------------------------------- Old: ---- drbd-9.0.12+git.7eb4aef.tar.bz2 New: ---- drbd-9.0.12+git.969e477d.tar.bz2 support-timer-setup.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ drbd.spec ++++++ --- /var/tmp/diff_new_pack.2MN1As/_old 2018-02-12 10:15:42.408441840 +0100 +++ /var/tmp/diff_new_pack.2MN1As/_new 2018-02-12 10:15:42.408441840 +0100 @@ -19,12 +19,12 @@ %if ! 0%{?is_opensuse} %ifarch x86_64 -%define buildrt 0 +%define buildrt 1 %endif %endif Name: drbd -Version: 9.0.12+git.7eb4aef +Version: 9.0.12+git.969e477d Release: 0 Summary: DRBD driver for Linux License: GPL-2.0+ @@ -36,6 +36,7 @@ Source2: Module.supported Source3: drbd_git_revision Patch1: fix-resync-finished-with-syncs-have-bits-set.patch +Patch2: support-timer-setup.patch BuildRequires: kernel-source BuildRequires: kernel-syms BuildRequires: libelf-devel @@ -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.2MN1As/_old 2018-02-12 10:15:42.476439390 +0100 +++ /var/tmp/diff_new_pack.2MN1As/_new 2018-02-12 10:15:42.476439390 +0100 @@ -10,7 +10,7 @@ <param name="version">9.0.12</param> --> <param name="versionformat">9.0.12+git.%h</param> - <param name="revision">7eb4aef4abbfba8ebb1afbcc30574df74db0063e</param> + <param name="revision">969e477dcfdf31c8b0462b7c725dda56b70371b2</param> </service> <service name="recompress" mode="disabled"> ++++++ drbd-9.0.12+git.7eb4aef.tar.bz2 -> drbd-9.0.12+git.969e477d.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drbd-9.0.12+git.7eb4aef/.gitmodules new/drbd-9.0.12+git.969e477d/.gitmodules --- old/drbd-9.0.12+git.7eb4aef/.gitmodules 2018-01-24 04:48:18.161011514 +0100 +++ new/drbd-9.0.12+git.969e477d/.gitmodules 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -[submodule "drbd/drbd-kernel-compat"] - path = drbd/drbd-kernel-compat - url = git://github.com/LINBIT/drbd-kernel-compat.git - update = rebase - fetchRecurseSubmodules = true -[submodule "drbd-headers"] - path = drbd-headers - url = git://github.com/LINBIT/drbd-headers.git - update = rebase - fetchRecurseSubmodules = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drbd-9.0.12+git.7eb4aef/drbd/drbd_receiver.c new/drbd-9.0.12+git.969e477d/drbd/drbd_receiver.c --- old/drbd-9.0.12+git.7eb4aef/drbd/drbd_receiver.c 2018-01-24 04:48:18.167011514 +0100 +++ new/drbd-9.0.12+git.969e477d/drbd/drbd_receiver.c 2018-02-02 11:53:12.000000000 +0100 @@ -6253,6 +6253,13 @@ } peer_disk_state = peer_state.disk; + + if (peer_disk_state > D_DISKLESS && peer_device->bitmap_index == -1) { + drbd_warn(device, "The peer is configured to be diskless but presents %s\n", + drbd_disk_str(peer_disk_state)); + goto fail; + } + if (peer_state.disk == D_NEGOTIATING) { peer_disk_state = peer_device->uuid_flags & UUID_FLAG_INCONSISTENT ? D_INCONSISTENT : D_CONSISTENT; @@ -6902,8 +6909,17 @@ device->bm_resync_fo = bit; break; default: +#if 0 + /* Used to be correct. + * But nowadays, we may receive "out-of-sync" information indirectly, + * if we are not directly connected to a secondary, but connected to + * some other node to which is. + * If we want to keep asserting something, + * we need to add in the global connection status somehow. */ drbd_err(device, "ASSERT FAILED cstate = %s, expected: WFSyncUUID|WFBitMapT|Behind\n", - drbd_repl_str(peer_device->repl_state[NOW])); + drbd_repl_str(peer_device->repl_state[NOW])) +#endif + ; } drbd_set_out_of_sync(peer_device, sector, be32_to_cpu(p->blksize)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/drbd-9.0.12+git.7eb4aef/drbd/drbd_transport_tcp.c new/drbd-9.0.12+git.969e477d/drbd/drbd_transport_tcp.c --- old/drbd-9.0.12+git.7eb4aef/drbd/drbd_transport_tcp.c 2018-01-24 04:48:18.170011514 +0100 +++ new/drbd-9.0.12+git.969e477d/drbd/drbd_transport_tcp.c 2018-02-02 11:53:12.000000000 +0100 @@ -891,6 +891,7 @@ struct socket *dsocket, *csocket; struct net_conf *nc; int timeout, err; + int one = 1; bool ok; dsocket = NULL; @@ -1074,6 +1075,10 @@ dsocket->sk->sk_sndtimeo = timeout; csocket->sk->sk_sndtimeo = timeout; + err = kernel_setsockopt(dsocket, SOL_SOCKET, SO_KEEPALIVE, (char *)&one, sizeof(one)); + if (err) + tr_warn(transport, "Failed to enable SO_KEEPALIVE %d\n", err); + return 0; out_eagain: ++++++ drbd_git_revision ++++++ --- /var/tmp/diff_new_pack.2MN1As/_old 2018-02-12 10:15:42.828426706 +0100 +++ /var/tmp/diff_new_pack.2MN1As/_new 2018-02-12 10:15:42.832426561 +0100 @@ -1 +1 @@ -GIT-hash: 7eb4aef4abbfba8ebb1afbcc30574df74db0063e +GIT-hash: 969e477dcfdf31c8b0462b7c725dda56b70371b2 ++++++ support-timer-setup.patch ++++++ diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_int.h drbd-9.0.12+git.969e477d/drbd/drbd_int.h --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_int.h 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_int.h 2018-02-11 17:28:50.168678009 +0800 @@ -1860,7 +1860,11 @@ extern void drbd_rs_controller_reset(struct drbd_peer_device *); extern void drbd_ping_peer(struct drbd_connection *connection); extern struct drbd_peer_device *peer_device_by_node_id(struct drbd_device *, int); +#ifndef COMPAT_HAVE_SETUP_TIMER +extern void repost_up_to_date_fn(struct timer_list *t); +#else extern void repost_up_to_date_fn(unsigned long data); +#endif static inline void ov_out_of_sync_print(struct drbd_peer_device *peer_device) { @@ -1890,8 +1894,13 @@ extern int w_start_resync(struct drbd_work *, int); extern int w_send_uuids(struct drbd_work *, int); +#ifndef COMPAT_HAVE_SETUP_TIMER +extern void resync_timer_fn(struct timer_list *); +extern void start_resync_timer_fn(struct timer_list *); +#else extern void resync_timer_fn(unsigned long data); extern void start_resync_timer_fn(unsigned long data); +#endif extern void drbd_endio_write_sec_final(struct drbd_peer_request *peer_req); @@ -1974,7 +1983,11 @@ extern struct drbd_connection *drbd_connection_by_node_id(struct drbd_resource *, int); extern struct drbd_connection *drbd_get_connection_by_node_id(struct drbd_resource *, int); extern void queue_queued_twopc(struct drbd_resource *resource); +#ifndef COMPAT_HAVE_SETUP_TIMER +extern void queued_twopc_timer_fn(struct timer_list *); +#else extern void queued_twopc_timer_fn(unsigned long data); +#endif extern bool drbd_have_local_disk(struct drbd_resource *resource); extern enum drbd_state_rv drbd_support_2pc_resize(struct drbd_resource *resource); extern enum determine_dev_size @@ -2021,8 +2034,13 @@ void drbd_bump_write_ordering(struct drbd_resource *resource, struct drbd_backing_dev *bdev, enum write_ordering_e wo); +#ifndef COMPAT_HAVE_SETUP_TIMER +extern void twopc_timer_fn(struct timer_list *); +extern void connect_timer_fn(struct timer_list *); +#else extern void twopc_timer_fn(unsigned long); extern void connect_timer_fn(unsigned long); +#endif /* drbd_proc.c */ extern struct proc_dir_entry *drbd_proc; diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd-kernel-compat/tests/have_setup_timer.c drbd-9.0.12+git.969e477d/drbd/drbd-kernel-compat/tests/have_setup_timer.c --- drbd-9.0.12+git.969e477d.orig/drbd/drbd-kernel-compat/tests/have_setup_timer.c 1970-01-01 08:00:00.000000000 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd-kernel-compat/tests/have_setup_timer.c 2018-02-11 17:28:50.168678009 +0800 @@ -0,0 +1,7 @@ +#include <linux/timer.h> + +void dummy(struct timer_list *timer, void (*function)(unsigned long), unsigned long data) +{ + setup_timer(timer, function, data); + return; +} diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_main.c drbd-9.0.12+git.969e477d/drbd/drbd_main.c --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_main.c 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_main.c 2018-02-11 17:34:37.499091262 +0800 @@ -76,7 +76,11 @@ static int drbd_open(struct block_device *bdev, fmode_t mode); static DRBD_RELEASE_RETURN drbd_release(struct gendisk *gd, fmode_t mode); +#ifndef COMPAT_HAVE_SETUP_TIMER +static void md_sync_timer_fn(struct timer_list *t); +#else static void md_sync_timer_fn(unsigned long data); +#endif static int w_bitmap_io(struct drbd_work *w, int unused); static int flush_send_buffer(struct drbd_connection *connection, enum drbd_stream drbd_stream); @@ -3192,9 +3196,15 @@ spin_unlock_irq(&resource->req_lock); } +#ifndef COMPAT_HAVE_SETUP_TIMER +static void peer_ack_timer_fn(struct timer_list *t) +{ + struct drbd_resource *resource = from_timer(resource, t, peer_ack_timer); +#else static void peer_ack_timer_fn(unsigned long data) { struct drbd_resource *resource = (struct drbd_resource *) data; +#endif drbd_flush_peer_acks(resource); } @@ -3309,8 +3319,13 @@ INIT_LIST_HEAD(&resource->connections); INIT_LIST_HEAD(&resource->transfer_log); INIT_LIST_HEAD(&resource->peer_ack_list); +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&resource->peer_ack_timer, peer_ack_timer_fn, 0); + timer_setup(&resource->repost_up_to_date_timer, repost_up_to_date_fn, 0); +#else setup_timer(&resource->peer_ack_timer, peer_ack_timer_fn, (unsigned long) resource); setup_timer(&resource->repost_up_to_date_timer, repost_up_to_date_fn, (unsigned long) resource); +#endif sema_init(&resource->state_sem, 1); resource->role[NOW] = R_SECONDARY; if (set_resource_options(resource, res_opts)) @@ -3327,11 +3342,19 @@ init_waitqueue_head(&resource->twopc_wait); init_waitqueue_head(&resource->barrier_wait); INIT_LIST_HEAD(&resource->twopc_parents); +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&resource->twopc_timer, twopc_timer_fn, 0); +#else setup_timer(&resource->twopc_timer, twopc_timer_fn, (unsigned long) resource); +#endif INIT_LIST_HEAD(&resource->twopc_work.list); INIT_LIST_HEAD(&resource->queued_twopc); spin_lock_init(&resource->queued_twopc_lock); +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&resource->queued_twopc_timer, queued_twopc_timer_fn, 0); +#else setup_timer(&resource->queued_twopc_timer, queued_twopc_timer_fn, (unsigned long) resource); +#endif drbd_init_workqueue(&resource->work); drbd_thread_init(resource, &resource->worker, drbd_worker, "worker"); drbd_thread_start(&resource->worker); @@ -3391,9 +3414,15 @@ mutex_init(&connection->mutex[CONTROL_STREAM]); INIT_LIST_HEAD(&connection->connect_timer_work.list); +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&connection->connect_timer, + connect_timer_fn, + 0); +#else setup_timer(&connection->connect_timer, connect_timer_fn, (unsigned long) connection); +#endif drbd_thread_init(resource, &connection->receiver, drbd_receiver, "receiver"); connection->receiver.connection = connection; @@ -3504,16 +3533,26 @@ kfree(peer_device); return NULL; } - +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&peer_device->start_resync_timer, + start_resync_timer_fn, + 0); +#else setup_timer(&peer_device->start_resync_timer, start_resync_timer_fn, (unsigned long) peer_device); - +#endif INIT_LIST_HEAD(&peer_device->resync_work.list); peer_device->resync_work.cb = w_resync_timer; +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&peer_device->resync_timer, + resync_timer_fn, + 0); +#else setup_timer(&peer_device->resync_timer, resync_timer_fn, (unsigned long) peer_device); +#endif INIT_LIST_HEAD(&peer_device->propagate_uuids_work.list); peer_device->propagate_uuids_work.cb = w_send_uuids; @@ -3609,12 +3648,21 @@ spin_lock_init(&device->pending_bitmap_work.q_lock); INIT_LIST_HEAD(&device->pending_bitmap_work.q); +#ifndef COMPAT_HAVE_SETUP_TIMER + timer_setup(&device->md_sync_timer, + md_sync_timer_fn, + 0); + timer_setup(&device->request_timer, + request_timer_fn, + 0); +#else setup_timer(&device->md_sync_timer, md_sync_timer_fn, (unsigned long) device); setup_timer(&device->request_timer, request_timer_fn, (unsigned long) device); +#endif init_waitqueue_head(&device->misc_wait); init_waitqueue_head(&device->al_wait); @@ -5191,9 +5239,15 @@ return md->peers[peer_device->node_id].flags & flag; } +#ifndef COMPAT_HAVE_SETUP_TIMER +static void md_sync_timer_fn(struct timer_list *t) +{ + struct drbd_device *device = from_timer(device, t, md_sync_timer); +#else static void md_sync_timer_fn(unsigned long data) { struct drbd_device *device = (struct drbd_device *) data; +#endif drbd_device_post_work(device, MD_SYNC); } diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_receiver.c drbd-9.0.12+git.969e477d/drbd/drbd_receiver.c --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_receiver.c 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_receiver.c 2018-02-11 17:28:50.172678024 +0800 @@ -596,9 +596,15 @@ return err; } +#ifndef COMPAT_HAVE_SETUP_TIMER +void connect_timer_fn(struct timer_list *t) +{ + struct drbd_connection *connection = from_timer(connection, t, connect_timer); +#else void connect_timer_fn(unsigned long data) { struct drbd_connection *connection = (struct drbd_connection *) data; +#endif struct drbd_resource *resource = connection->resource; unsigned long irq_flags; @@ -5327,10 +5333,17 @@ return 0; } +#ifndef COMPAT_HAVE_SETUP_TIMER +void twopc_timer_fn(struct timer_list *t) +{ + unsigned long irq_flags; + struct drbd_resource *resource = from_timer(resource, t, twopc_timer); +#else void twopc_timer_fn(unsigned long data) { struct drbd_resource *resource = (struct drbd_resource *) data; unsigned long irq_flags; +#endif spin_lock_irqsave(&resource->req_lock, irq_flags); if (resource->twopc_work.cb == NULL) { @@ -5582,12 +5595,21 @@ return 0; } +#ifndef COMPAT_HAVE_SETUP_TIMER +void queued_twopc_timer_fn(struct timer_list *time) +{ + struct queued_twopc *q; + unsigned long irq_flags; + struct drbd_resource *resource = from_timer(resource, time, queued_twopc_timer); + unsigned long t = twopc_timeout(resource) / 4; +#else void queued_twopc_timer_fn(unsigned long data) { struct drbd_resource *resource = (struct drbd_resource *) data; struct queued_twopc *q; unsigned long irq_flags; unsigned long t = twopc_timeout(resource) / 4; +#endif spin_lock_irqsave(&resource->queued_twopc_lock, irq_flags); q = list_first_entry_or_null(&resource->queued_twopc, struct queued_twopc, w.list); @@ -7262,7 +7284,11 @@ wake_up(&peer_device->device->misc_wait); del_timer_sync(&peer_device->resync_timer); +#ifndef COMPAT_HAVE_SETUP_TIMER + resync_timer_fn(&peer_device->resync_timer); +#else resync_timer_fn((unsigned long)peer_device); +#endif del_timer_sync(&peer_device->start_resync_timer); } diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_req.c drbd-9.0.12+git.969e477d/drbd/drbd_req.c --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_req.c 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_req.c 2018-02-11 17:28:50.172678024 +0800 @@ -2309,6 +2309,19 @@ * to expire twice (worst case) to become effective. Good enough. */ +#ifndef COMPAT_HAVE_SETUP_TIMER +void request_timer_fn(struct timer_list *t) +{ + struct drbd_connection *connection; + struct drbd_request *req_read, *req_write; + unsigned long oldest_submit_jif; + unsigned long dt = 0; + unsigned long et = 0; + unsigned long now = jiffies; + unsigned long next_trigger_time = now; + bool restart_timer = false; + struct drbd_device *device = from_timer(device, t, request_timer); +#else void request_timer_fn(unsigned long data) { struct drbd_device *device = (struct drbd_device *) data; @@ -2320,6 +2333,7 @@ unsigned long now = jiffies; unsigned long next_trigger_time = now; bool restart_timer = false; +#endif rcu_read_lock(); if (get_ldev(device)) { /* implicit state.disk >= D_INCONSISTENT */ diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_req.h drbd-9.0.12+git.969e477d/drbd/drbd_req.h --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_req.h 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_req.h 2018-02-11 17:28:50.172678024 +0800 @@ -319,7 +319,11 @@ struct bio_and_error *m); extern void complete_master_bio(struct drbd_device *device, struct bio_and_error *m); +#ifndef COMPAT_HAVE_SETUP_TIMER +extern void request_timer_fn(struct timer_list *); +#else extern void request_timer_fn(unsigned long data); +#endif extern void tl_restart(struct drbd_connection *connection, enum drbd_req_event what); extern void _tl_restart(struct drbd_connection *connection, enum drbd_req_event what); extern void drbd_queue_peer_ack(struct drbd_resource *resource, struct drbd_request *req); diff -Naur drbd-9.0.12+git.969e477d.orig/drbd/drbd_sender.c drbd-9.0.12+git.969e477d/drbd/drbd_sender.c --- drbd-9.0.12+git.969e477d.orig/drbd/drbd_sender.c 2018-02-11 17:28:38.748598711 +0800 +++ drbd-9.0.12+git.969e477d/drbd/drbd_sender.c 2018-02-11 17:28:50.172678024 +0800 @@ -498,9 +498,15 @@ return 0; } +#ifndef COMPAT_HAVE_SETUP_TIMER +void resync_timer_fn(struct timer_list *t) +{ + struct drbd_peer_device *peer_device = from_timer(peer_device, t, resync_timer); +#else void resync_timer_fn(unsigned long data) { struct drbd_peer_device *peer_device = (struct drbd_peer_device *) data; +#endif drbd_queue_work_if_unqueued( &peer_device->connection->sender_work, @@ -1809,9 +1815,15 @@ rcu_read_unlock(); } +#ifndef COMPAT_HAVE_SETUP_TIMER +void start_resync_timer_fn(struct timer_list *t) +{ + struct drbd_peer_device *peer_device = from_timer(peer_device, t, start_resync_timer); +#else void start_resync_timer_fn(unsigned long data) { struct drbd_peer_device *peer_device = (struct drbd_peer_device *) data; +#endif drbd_peer_device_post_work(peer_device, RS_START); } @@ -2153,9 +2165,15 @@ return 0; } +#ifndef COMPAT_HAVE_SETUP_TIMER +void repost_up_to_date_fn(struct timer_list *t) +{ + struct drbd_resource *resource = from_timer(resource, t, repost_up_to_date_timer); +#else void repost_up_to_date_fn(unsigned long data) { struct drbd_resource *resource = (struct drbd_resource *) data; +#endif drbd_post_work(resource, TRY_BECOME_UP_TO_DATE); }