Bug#827561: Update 3.2.78 -> 3.2.81 broke builds in fs/fcntl.c
Control: tags -1 patch
On Fri, Jun 17, 2016 at 11:28:27PM +0100, Ben Hutchings wrote:
> On Fri, 2016-06-17 at 12:27 -0700, Elliott Mitchell wrote:
> > Package: linux-source-3.2
> > Version: 3.2.81-1
> > Severity: important
> >
> > SSIA:
> >
> > ?? CC????????????fs/fcntl.o
> > fs/fcntl.c: In function 'setfl':
> > fs/fcntl.c:186:31: error: dereferencing pointer to incomplete type
> > fs/fcntl.c:187:30: error: dereferencing pointer to incomplete type
> > make[2]: *** [fs/fcntl.o] Error 1
> > make[2]: *** Waiting for unfinished jobs....
> >
> > That would be a problem for this update, this hunk of code is new for
> > 3.2.81.????Seems someone forgot a header (I'm not yet sure which).
>
> This code was added as part of the fix for??#627782. ??It builds
> successfully in Debian's own configurations.
>
> It looks like this build failure occurs if CONFIG_MODULES is disabled??
> and you should be able to avoid it by enabling that.
Problem is that was a very deliberate on the particular computer.
Unusual, but something that *should* work.
I've got a partial patch for general consumption attached. I'm pretty
sure the changes done for #627782 are buggy. If someone builds a kernel
with AUFS built into the kernel the test in fcntl.c will fail (the test
only works if AUFS is a module).
--
(\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/)
\BS ( | EHeM+sigmsg@m5p.com PGP 87145445 | ) /
\_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
--- fcntl.c.orig 2016-06-16 10:03:04.000000000 -0700
+++ fcntl.c 2016-06-17 17:58:26.000000000 -0700
@@ -182,10 +182,24 @@
* Since only aufs will implement it, check that the file ops
* are implemented by a version of aufs that does. (Ugh.)
*/
- if (!error && filp->f_op->owner &&
- !strcmp(filp->f_op->owner->name, "aufs") &&
- strstr(filp->f_op->owner->version, "+setfl"))
+#if defined(CONFIG_MODULES)
+#if defined(CONFIG_AUFS_FS)
+#if 0
+#if CONFIG_AUFS_FS == "y"
+#error "CONFIG_AUFS_FS=y is a known problem, see #627782"
+#endif
+#endif
+#define AUFS_UNLIKELY
+#else
+#define AUFS_UNLIKELY unlikely
+#endif
+ if (likely(!error) && filp->f_op->owner &&
+ !AUFS_UNLIKELY(strcmp(filp->f_op->owner->name, "aufs")) &&
+ AUFS_UNLIKELY(strstr(filp->f_op->owner->version, "+setfl")))
error = filp->f_op->setfl(filp, arg);
+#elif defined(CONFIG_AUFS_FS)
+#error "CONFIG_MODULES=n && CONFIG_AUFS_FS=y is a known problem, see #627782"
+#endif
if (error)
return error;
Reply to: