2.5.40 make bzImage fail
No patches applied.
Generating build number
make[1]: Entering directory `/usr/src/linux-2.5.40/init'
Generating /usr/src/linux-2.5.40/include/linux/compile.h (not
modified)
make[1]: Leaving directory `/usr/src/linux-2.5.40/init'
ld -m elf_i386 -e stext -T arch/i386/vmlinux.lds.s
arch/i386/kernel/head.o arch/i386/kernel/init_task.o init/built-in.o --start-group arch/i386/kernel/built-in.o arch/i386/mm/built-in.o arch/i386/mach-generic/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o lib/lib.a arch/i386/lib/lib.a drivers/built-in.o sound/built-in.o arch/i386/pci/built-in.o net/built-in.o --end-group -o vmlinux fs/built-in.o: In function `pagebuf_queue_task':
fs/built-in.o(.text+0xc9b93): undefined reference to queue_task' fs/built-in.o: In function pagebuf_iodone':
fs/built-in.o(.text+0xc9c62): undefined reference to queue_task' fs/built-in.o: In function pagebuf_iodone_daemon':
fs/built-in.o(.text+0xca722): undefined reference to TQ_ACTIVE' fs/built-in.o(.text+0xca74a): undefined reference to run_task_queue'
make: *** [vmlinux] Error 1
Bob Raymond
Quoted 1 line · Bob Raymond
No patches applied.
I am fairly sure the patch below by hch fixes this:
Quoted 2 lines · Marc-Christian Petersen
does not compile on 2.5.40 with XFS. Compiles clean w/o your patch. (I cannot have a look into your maxi-config.bz2 because it is corrupt)
I posted the 2.5.40 fix on this list some time ago. The top of tree fix (different) is below:
home/hch/linux/fs/xfs/pagebuf/page_buf.c renamed from fs/xfs/pagebuf/page_buf.c +15 -6
@@ -179,6 +179,11 @@ pagebuf_param_t pb_params = {{ HZ, 15 *struct pbstats pbstats;/* +* Queue for delayed I/O completion. +*/ +struct workqueue_struct *pagebuf_workqueue; + +/* * Pagebuf allocation / freeing. */
@@ -1167,7 +1172,7 @@ _pagebuf_wait_unpin(* present, will be called as a side-effect. */ void -pagebuf_iodone_sched ( +pagebuf_iodone_work (void *v) {page_buf_t *pb = (page_buf_t *)v;
@@ -1196,11 +1201,8 @@ pagebuf_iodone(PB_TRACE (pb,PB_TRACE_REC (done), pb->pb_iodone);if ((pb->pb_iodone) || (pb->pb_flags &PBF_ASYNC )) { -INIT_TQUEUE (&pb->pb_iodone_sched, - pagebuf_iodone_sched, (void *)pb); - -schedule_task (&pb->pb_iodone_sched); - +INIT_WORK (&pb->pb_iodone_work, pagebuf_iodone_work, pb); +queue_work (pagebuf_workqueue, &pb->pb_iodone_work); }else {up (&pb->pb_iodonesema); }
@@ -1854,6 +1856,10 @@ pagebuf_daemon_start(void)kernel_thread (pagebuf_daemon, (void *)pb_daemon,CLONE_FS |CLONE_FILES |CLONE_VM ); + + pagebuf_workqueue =create_workqueue ("pagebuf" ); +if (!pagebuf_workqueue) +return -1 ; }return 0 ; }
@@ -1867,6 +1873,9 @@ STATIC voidpagebuf_daemon_stop (void) {if (pb_daemon) { +flush_workqueue (pagebuf_workqueue); +destroy_workqueue (pagebuf_workqueue); + pb_daemon->active =0 ; pb_daemon->io_active =0 ;
home/hch/linux/fs/xfs/pagebuf/page_buf.h renamed from fs/xfs/pagebuf/page_buf.h +4 -2
@@ -47,7 +47,7 @@#include <linux/fs.h> #include <linux/buffer_head.h> #include <linux/uio.h> -#include <linux/tqueue.h> +#include <linux/workqueue.h> enum xfs_buffer_state { BH_Delay = BH_PrivateStart };BUFFER_FNS (Delay, delay);
@@ -214,7 +214,7 @@ typedef struct page_buf_s {size_t pb_buffer_length;/* size of buffer in bytes */ size_t pb_count_desired;/* desired transfer size */ void *pb_addr;/* virtual address of buffer */ -struct tq_struct pb_iodone_sched; +struct work_struct pb_iodone_work;page_buf_iodone_t pb_iodone;/* I/O completion function */ page_buf_relse_t pb_relse;/* releasing function */ page_buf_bdstrat_t pb_strat;/* pre-write function */
@@ -394,5 +394,7 @@ static __inline__ int __pagebuf_iorequesreturn pb->pb_strat (pb); return pagebuf_iorequest(pb); } + +extern struct workqueue_struct *pagebuf_workqueue;#endif /* __PAGE_BUF_H__ */
home/hch/linux/fs/xfs/xfs_log.c renamed from fs/xfs/xfs_log.c +3 -4
@@ -2714,7 +2714,7 @@ xlog_state_put_ticket(xlog_t *log,LOG_UNLOCK (log, s); }/* xlog_state_put_ticket */ -void xlog_sync_sched ( +void xlog_sync_work (void *v) {xlog_in_core_t *iclog = (xlog_in_core_t *)v;
@@ -2773,13 +2773,12 @@ xlog_state_release_iclog(xlog_t *log,* flags after this point. */ if (sync) { -INIT_TQUEUE (&iclog->ic_write_sched, - xlog_sync_sched, (void *) iclog); +INIT_WORK (&iclog->ic_write_work, xlog_sync_work, iclog);switch (xlog_mode) {case 0 :return xlog_sync (log, iclog,0 );case 1 : -pagebuf_queue_task (&iclog->ic_write_sched); +queue_work (pagebuf_workqueue, &iclog->ic_write_work); } }return (0 );
home/hch/linux/fs/xfs/xfs_log_priv.h renamed from fs/xfs/xfs_log_priv.h +2 -2
@@ -438,7 +438,7 @@ typedef struct xlog_iclog_fields {int ic_bwritecnt;ushort_t ic_state;char *ic_datap;/* pointer to iclog data */ -struct tq_struct ic_write_sched; +struct work_struct ic_write_work; } xlog_iclog_fields_t; typedef struct xlog_in_core2 {
@@ -458,7 +458,7 @@ typedef struct xlog_in_core {* Defines to save our code from this glop. */ #define ic_forcesema hic_fields.ic_forcesema -#define ic_write_sched hic_fields.ic_write_sched +#define ic_write_work hic_fields.ic_write_work#define ic_next hic_fields.ic_next#define ic_prev hic_fields.ic_prev#define ic_bp hic_fields.ic_bp
Regards,
Rasmus