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+sig...@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 via email to