Note that there are some explanatory texts on larger screens.

plurals
  1. POCan repeating C source code causing compile errors?
    primarykey
    data
    text
    <p>As per another <a href="https://stackoverflow.com/questions/7134840/linux-kernel-patching-issue/7136028#7136028">question I had asked earlier</a> I think I may have found my problem but I need an experts eye.</p> <p>I found the file <code>/net/ipv4/tcp_zero_copy.c</code> which was causing a compile failure of my kernel.</p> <p>I no very little about C or C++, when I look at the file in my C/C++ editor it looks like the same code is repeating over over over (I think 4 times).</p> <p>My question is simple;</p> <p>Would that be enough to cause a problem with the compiler? If the same code showed up over and over in the same file?</p> <p>Here is the source code of the file (from end to end 148 lines in total);</p> <pre><code>/* * Support routines for TCP zero copy transmit * * Created by Vladislav Bolkhovitin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. */ #include &lt;linux/skbuff.h&gt; net_get_page_callback_t net_get_page_callback __read_mostly; EXPORT_SYMBOL(net_get_page_callback); net_put_page_callback_t net_put_page_callback __read_mostly; EXPORT_SYMBOL(net_put_page_callback); /* * Caller of this function must ensure that at the moment when it's called * there are no pages in the system with net_priv field set to non-zero * value. Hence, this function, as well as net_get_page() and net_put_page(), * don't need any protection. */ int net_set_get_put_page_callbacks( net_get_page_callback_t get_callback, net_put_page_callback_t put_callback) { int res = 0; if ((net_get_page_callback != NULL) &amp;&amp; (get_callback != NULL) &amp;&amp; (net_get_page_callback != get_callback)) { res = -EBUSY; goto out; } if ((net_put_page_callback != NULL) &amp;&amp; (put_callback != NULL) &amp;&amp; (net_put_page_callback != put_callback)) { res = -EBUSY; goto out; } net_get_page_callback = get_callback; net_put_page_callback = put_callback; out: return res; } EXPORT_SYMBOL(net_set_get_put_page_callbacks); /* * Support routines for TCP zero copy transmit * * Created by Vladislav Bolkhovitin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. */ #include &lt;linux/skbuff.h&gt; net_get_page_callback_t net_get_page_callback __read_mostly; EXPORT_SYMBOL(net_get_page_callback); net_put_page_callback_t net_put_page_callback __read_mostly; EXPORT_SYMBOL(net_put_page_callback); /* * Caller of this function must ensure that at the moment when it's called * there are no pages in the system with net_priv field set to non-zero * value. Hence, this function, as well as net_get_page() and net_put_page(), * don't need any protection. */ int net_set_get_put_page_callbacks( net_get_page_callback_t get_callback, net_put_page_callback_t put_callback) { int res = 0; if ((net_get_page_callback != NULL) &amp;&amp; (get_callback != NULL) &amp;&amp; (net_get_page_callback != get_callback)) { res = -EBUSY; goto out; } if ((net_put_page_callback != NULL) &amp;&amp; (put_callback != NULL) &amp;&amp; (net_put_page_callback != put_callback)) { res = -EBUSY; goto out; } net_get_page_callback = get_callback; net_put_page_callback = put_callback; out: return res; } EXPORT_SYMBOL(net_set_get_put_page_callbacks); /* * Support routines for TCP zero copy transmit * * Created by Vladislav Bolkhovitin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. */ #include &lt;linux/skbuff.h&gt; net_get_page_callback_t net_get_page_callback __read_mostly; EXPORT_SYMBOL(net_get_page_callback); net_put_page_callback_t net_put_page_callback __read_mostly; EXPORT_SYMBOL(net_put_page_callback); /* * Caller of this function must ensure that at the moment when it's called * there are no pages in the system with net_priv field set to non-zero * value. Hence, this function, as well as net_get_page() and net_put_page(), * don't need any protection. */ int net_set_get_put_page_callbacks( net_get_page_callback_t get_callback, net_put_page_callback_t put_callback) { int res = 0; if ((net_get_page_callback != NULL) &amp;&amp; (get_callback != NULL) &amp;&amp; (net_get_page_callback != get_callback)) { res = -EBUSY; goto out; } if ((net_put_page_callback != NULL) &amp;&amp; (put_callback != NULL) &amp;&amp; (net_put_page_callback != put_callback)) { res = -EBUSY; goto out; } net_get_page_callback = get_callback; net_put_page_callback = put_callback; out: return res; } EXPORT_SYMBOL(net_set_get_put_page_callbacks); </code></pre> <p>** EDIT **</p> <p>Also I just used Notepad++ to compare the individual blocks of code where it looked like they ended. According to the compare tool all 3 block match each other.</p> <p>Here is the compiler output from the place it died to the command prompt it returned to me.</p> <pre><code> CC net/ipv4/tcp_zero_copy.o net/ipv4/tcp_zero_copy.c:63:1: error: redefinition of â__kcrctab_net_get_page_callbackâ net/ipv4/tcp_zero_copy.c:14:1: note: previous definition of â__kcrctab_net_get_page_callbackâ was here net/ipv4/tcp_zero_copy.c:63:1: error: redefinition of â__kstrtab_net_get_page_callbackâ net/ipv4/tcp_zero_copy.c:14:1: note: previous definition of â__kstrtab_net_get_page_callbackâ was here net/ipv4/tcp_zero_copy.c:63:1: error: redefinition of â__ksymtab_net_get_page_callbackâ net/ipv4/tcp_zero_copy.c:14:1: note: previous definition of â__ksymtab_net_get_page_callbackâ was here net/ipv4/tcp_zero_copy.c:66:1: error: redefinition of â__kcrctab_net_put_page_callbackâ net/ipv4/tcp_zero_copy.c:17:1: note: previous definition of â__kcrctab_net_put_page_callbackâ was here net/ipv4/tcp_zero_copy.c:66:1: error: redefinition of â__kstrtab_net_put_page_callbackâ net/ipv4/tcp_zero_copy.c:17:1: note: previous definition of â__kstrtab_net_put_page_callbackâ was here net/ipv4/tcp_zero_copy.c:66:1: error: redefinition of â__ksymtab_net_put_page_callbackâ net/ipv4/tcp_zero_copy.c:17:1: note: previous definition of â__ksymtab_net_put_page_callbackâ was here net/ipv4/tcp_zero_copy.c:74:5: error: redefinition of ânet_set_get_put_page_callbacksâ net/ipv4/tcp_zero_copy.c:25:5: note: previous definition of ânet_set_get_put_page_callbacksâ was here net/ipv4/tcp_zero_copy.c:98:1: error: redefinition of â__kcrctab_net_set_get_put_page_callbacksâ net/ipv4/tcp_zero_copy.c:49:1: note: previous definition of â__kcrctab_net_set_get_put_page_callbacksâ was here net/ipv4/tcp_zero_copy.c:98:1: error: redefinition of â__kstrtab_net_set_get_put_page_callbacksâ net/ipv4/tcp_zero_copy.c:49:1: note: previous definition of â__kstrtab_net_set_get_put_page_callbacksâ was here net/ipv4/tcp_zero_copy.c:98:1: error: redefinition of â__ksymtab_net_set_get_put_page_callbacksâ net/ipv4/tcp_zero_copy.c:49:1: note: previous definition of â__ksymtab_net_set_get_put_page_callbacksâ was here make[2]: *** [net/ipv4/tcp_zero_copy.o] Error 1 make[1]: *** [net/ipv4] Error 2 make: *** [net] Error 2 root@dev01:/usr/src/linux# ls </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload