Public bug reported: I tried to build a kernel 4.15.0-48.51 that cloned from the Ubuntu kernel git (x86_64-generic flavour).
commit c50532b9d7b623ff98aeaf0b848e58adae54ca75 (HEAD -> master, tag: Ubuntu-4.15.0-48.51, origin/master, origin/HEAD) Author: Andrea Righi <andrea.ri...@canonical.com> Date: Tue Apr 2 18:31:55 2019 +0200 UBUNTU: Ubuntu-4.15.0-48.51 Signed-off-by: Andrea Righi <andrea.ri...@canonical.com> 1. Build a kernel image with 'zfs_enable' flag set as false. 2. Build SPL/ZFS modules independently by make command (debug purpose; DECLARE_EVENT_CLASS() enabled). But 'make' was always failed at the same point, 'zfs/module/zfs/trace.c' (as seem as below). In file included from /home/np/linux-4.15/include/trace/define_trace.h:96:0, from /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:127, from /home/np/linux-4.15/zfs/module/zfs/trace.c:45: /home/np/linux-4.15/zfs/include/sys/trace_dmu.h: In function ‘trace_event_raw_event_zfs_delay_mintime_class’: /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:65:37: error: ‘dmu_tx_t {aka struct dmu_tx}’ has no member named ‘tx_dirty_delayed’ __entry->tx_dirty_delayed = tx->tx_dirty_delayed; ^ /home/np/linux-4.15/include/trace/trace_events.h:719:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’ { assign; } \ ^~~~~~ /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:60:2: note: in expansion of macro ‘TP_fast_assign’ TP_fast_assign( ^~~~~~~~~~~~~~ In file included from /home/np/linux-4.15/include/trace/define_trace.h:97:0, from /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:127, from /home/np/linux-4.15/zfs/module/zfs/trace.c:45: /home/np/linux-4.15/zfs/include/sys/trace_dmu.h: In function ‘perf_trace_zfs_delay_mintime_class’: /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:65:37: error: ‘dmu_tx_t {aka struct dmu_tx}’ has no member named ‘tx_dirty_delayed’ __entry->tx_dirty_delayed = tx->tx_dirty_delayed; ^ /home/np/linux-4.15/include/trace/perf.h:66:4: note: in definition of macro ‘DECLARE_EVENT_CLASS’ { assign; } \ ^~~~~~ /home/np/linux-4.15/zfs/include/sys/trace_dmu.h:60:2: note: in expansion of macro ‘TP_fast_assign’ TP_fast_assign( ^~~~~~~~~~~~~~ I tried to debug this issue with myself, and found something intriguing. In 'zfs/include/sys/trace_dmu.h', the failed code accessing 'tx_dirty_delayed' from 'dmu_tx_t' (which same as 'struct dmu_tx'). DECLARE_EVENT_CLASS(zfs_delay_mintime_class, TP_PROTO(dmu_tx_t *tx, uint64_t dirty, uint64_t min_tx_time), TP_ARGS(tx, dirty, min_tx_time), TP_STRUCT__entry( __field(uint64_t, tx_txg) __field(uint64_t, tx_lastsnap_txg) __field(uint64_t, tx_lasttried_txg) __field(boolean_t, tx_anyobj) __field(boolean_t, tx_dirty_delayed) __field(hrtime_t, tx_start) __field(boolean_t, tx_wait_dirty) __field(int, tx_err) __field(uint64_t, min_tx_time) __field(uint64_t, dirty) ), TP_fast_assign( __entry->tx_txg = tx->tx_txg; __entry->tx_lastsnap_txg = tx->tx_lastsnap_txg; __entry->tx_lasttried_txg = tx->tx_lasttried_txg; __entry->tx_anyobj = tx->tx_anyobj; __entry->tx_dirty_delayed = tx->tx_dirty_delayed; __entry->tx_start = tx->tx_start; __entry->tx_wait_dirty = tx->tx_wait_dirty; __entry->tx_err = tx->tx_err; __entry->dirty = dirty; __entry->min_tx_time = min_tx_time; ), TP_printk("tx { txg %llu lastsnap_txg %llu tx_lasttried_txg %llu " "anyobj %d dirty_delayed %d start %llu wait_dirty %d err %i " "} dirty %llu min_tx_time %llu", __entry->tx_txg, __entry->tx_lastsnap_txg, __entry->tx_lasttried_txg, __entry->tx_anyobj, __entry->tx_dirty_delayed, __entry->tx_start, __entry->tx_wait_dirty, __entry->tx_err, __entry->dirty, __entry->min_tx_time) ); But, implementation of 'strcut dmu_tx' doesn't contain 'tx_dirty_delayed' (in zfs/include/sys/dmu_tx.h) struct dmu_tx { /* * No synchronization is needed because a tx can only be handled * by one thread. */ list_t tx_holds; /* list of dmu_tx_hold_t */ objset_t *tx_objset; struct dsl_dir *tx_dir; struct dsl_pool *tx_pool; uint64_t tx_txg; uint64_t tx_lastsnap_txg; uint64_t tx_lasttried_txg; txg_handle_t tx_txgh; void *tx_tempreserve_cookie; struct dmu_tx_hold *tx_needassign_txh; /* list of dmu_tx_callback_t on this dmu_tx */ list_t tx_callbacks; /* placeholder for syncing context, doesn't need specific holds */ boolean_t tx_anyobj; /* has this transaction already been delayed? */ boolean_t tx_waited; /* transaction is marked as being a "net free" of space */ boolean_t tx_netfree; /* time this transaction was created */ hrtime_t tx_start; /* need to wait for sufficient dirty space */ boolean_t tx_wait_dirty; int tx_err; }; Looks above, current in-source-tree ZFS module seems not valid... :( Is there are walkaround for this problem? ** Affects: linux (Ubuntu) Importance: Undecided Status: New ** Tags: kernel-bug ** Attachment added: "Linux apport file" https://bugs.launchpad.net/bugs/1828763/+attachment/5263362/+files/apport.linux-image-4.15.0-48-generic.uqkuae1c.apport -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1828763 Title: Cannot build kernel 4.15.0-48.51 due to an in-source-tree ZFS module. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1828763/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs