All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ubifs: Fix regression in ubifs_readdir()
@ 2016-10-28  9:53 Richard Weinberger
  2016-10-28 16:19   ` Jörg Krause
  0 siblings, 1 reply; 17+ messages in thread
From: Richard Weinberger @ 2016-10-28  9:53 UTC (permalink / raw)
  To: linux-mtd
  Cc: adrian.hunter, dedekind1, linux-kernel, peda, ralph.sennhauser,
	Richard Weinberger, stable

Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
overlayfs support because the fix exposed an internal error
code to VFS.

Reported-by: Peter Rosin <peda@axentia.se>
Tested-by: Peter Rosin <peda@axentia.se>
Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
Cc: stable@vger.kernel.org
Signed-off-by: Richard Weinberger <richard@nod.at>
---
 fs/ubifs/dir.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index bd4a5e8ce441..ca16c5d7bab1 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file, struct dir_context *ctx)
 
 	if (err != -ENOENT)
 		ubifs_err(c, "cannot find next direntry, error %d", err);
+	else
+		/*
+		 * -ENOENT is a non-fatal error in this context, the TNC uses
+		 * it to indicate that the cursor moved past the current directory
+		 * and readdir() has to stop.
+		 */
+		err = 0;
+
 
 	/* 2 is a special value indicating that there are no more direntries */
 	ctx->pos = 2;
-- 
2.7.3

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-10-28  9:53 [PATCH] ubifs: Fix regression in ubifs_readdir() Richard Weinberger
@ 2016-10-28 16:19   ` Jörg Krause
  0 siblings, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-10-28 16:19 UTC (permalink / raw)
  To: Richard Weinberger, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

Hi,

On Fri, 2016-10-28 at 11:53 +0200, Richard Weinberger wrote:
> Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
> overlayfs support because the fix exposed an internal error
> code to VFS.
> 
> Reported-by: Peter Rosin <peda@axentia.se>
> Tested-by: Peter Rosin <peda@axentia.se>
> Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
> Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
> Cc: stable@vger.kernel.org
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
>  fs/ubifs/dir.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index bd4a5e8ce441..ca16c5d7bab1 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file,
> struct dir_context *ctx)
>  
>  	if (err != -ENOENT)
>  		ubifs_err(c, "cannot find next direntry, error %d",
> err);
> +	else
> +		/*
> +		 * -ENOENT is a non-fatal error in this context, the
> TNC uses
> +		 * it to indicate that the cursor moved past the
> current directory
> +		 * and readdir() has to stop.
> +		 */
> +		err = 0;
> +
>  
>  	/* 2 is a special value indicating that there are no more
> direntries */
>  	ctx->pos = 2;

I'm not sure if it's related to the issue reported by Peter Rosin and
Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
with OverlayFS on Linux v4.9.0-rc2 with this patch applied:


"""
[    2.709197] ubi0: default fastmap pool size: 15
[    2.713806] ubi0: default fastmap WL pool size: 7
[    2.718776] ubi0: attaching mtd5
[    3.690342] ubi0: scanning is finished
[    3.726232] ubi0 warning: ubi_eba_init: cannot reserve enough PEBs
for bad PEB handling, reserved 18, need 20
[    3.756003] ubi0: attached mtd5 (name "ubi-0", size 44 MiB)
[    3.761658] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976
bytes
[    3.768857] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size
2048
[    3.775860] ubi0: VID header offset: 2048 (aligned 2048), data
offset: 4096
[    3.782886] ubi0: good PEBs: 352, bad PEBs: 0, corrupted PEBs: 0
[    3.789080] ubi0: user volume: 1, internal volumes: 1, max. volumes
count: 128
[    3.796501] ubi0: max/mean erase counter: 1/0, WL threshold: 4096,
image sequence number: 955660178
[    3.805742] ubi0: available PEBs: 0, total reserved PEBs: 352, PEBs
reserved for bad PEB handling: 18
[    3.815502] ubi0: background thread "ubi_bgt0d" started, PID 40
[    3.822173] ubi1: default fastmap pool size: 10
[    3.827213] ubi1: default fastmap WL pool size: 5
[    3.832016] ubi1: attaching mtd7
[    4.278806] ubi1: scanning is finished
[    4.376526] ubi1: volume 0 ("user") re-sized from 13 to 162 LEBs
[    4.391959] ubi1: attached mtd7 (name "data", size 36 MiB)
[    4.397813] ubi1: PEB size: 131072 bytes (128 KiB), LEB size: 126976
bytes
[    4.404761] ubi1: min./max. I/O unit sizes: 2048/2048, sub-page size
2048
[    4.411752] ubi1: VID header offset: 2048 (aligned 2048), data
offset: 4096
[    4.418909] ubi1: good PEBs: 288, bad PEBs: 0, corrupted PEBs: 0
[    4.425107] ubi1: user volume: 2, internal volumes: 1, max. volumes
count: 128
[    4.432399] ubi1: max/mean erase counter: 1/0, WL threshold: 4096,
image sequence number: 1961582752
[    4.441714] ubi1: available PEBs: 0, total reserved PEBs: 288, PEBs
reserved for bad PEB handling: 20
[    4.451267] ubi1: background thread "ubi_bgt1d" started, PID 41
[    4.469335] input: gpio-keys as /devices/soc0/gpio-keys/input/input0
[    4.492732] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-
01-01 00:01:07 UTC (67)
[    4.506810] ALSA device list:
[    4.509854]   #0: mxs_wm8524
[    4.523140] uart-pl011 80074000.serial: no DMA platform data
[    4.909981] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1,
name "rootfs", R/O mode
[    4.919428] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB),
min./max. I/O unit sizes: 2048 bytes/2048 bytes
[    4.933097] UBIFS (ubi0:1): FS size: 40378368 bytes (38 MiB, 318
LEBs), journal size 5586944 bytes (5 MiB, 44 LEBs)
[    4.944659] UBIFS (ubi0:1): reserved for root: 0 bytes (0 KiB)
[    4.954275] UBIFS (ubi0:1): media format: w4/r0 (latest is w4/r0),
UUID 3F29D9B8-363D-4A54-8CE4-BF6969BB9687, small LPT model
[    4.993543] VFS: Mounted root (ubifs filesystem) readonly on device
0:13.
[    5.023313] devtmpfs: mounted
[    5.036855] Freeing unused kernel memory: 144K (c0506000 - c052a000)
[    5.043278] This architecture does not have kernel memory
protection.
[    5.869112] UBIFS (ubi1:0): background thread "ubifs_bgt1_0"
started, PID 43
[    6.056630] UBIFS (ubi1:0): start fixing up free space
[    6.162648] UBIFS (ubi1:0): free space fixup complete
[    6.263554] UBIFS (ubi1:0): UBIFS: mounted UBI device 1, volume 0,
name "user"
[    6.271600] UBIFS (ubi1:0): LEB size: 126976 bytes (124 KiB),
min./max. I/O unit sizes: 2048 bytes/2048 bytes
[    6.285552] UBIFS (ubi1:0): FS size: 19300352 bytes (18 MiB, 152
LEBs), journal size 3047424 bytes (2 MiB, 24 LEBs)
[    6.296731] UBIFS (ubi1:0): reserved for root: 0 bytes (0 KiB)
[    6.306432] UBIFS (ubi1:0): media format: w4/r0 (latest is w4/r0),
UUID A5813F13-6645-4096-B663-A08D87959541, small LPT model
[    6.542487] random: crng init done
mount: mounting overlay on /mnt/overlay failed: No such file or
directory
mount: mounting /dev on /mnt/overlay/dev failed: No such file or
directory
mount: mounting /mnt/user on /mnt/overlay/mnt/user failed: No such file
or directory
chroot: can't execute '/sbin/init': No such file or directory
[    6.670206] Kernel panic - not syncing: Attempted to kill init!
exitcode=0x00007f00
[    6.670206] 
[    6.679426] CPU: 0 PID: 1 Comm: chroot Not tainted 4.9.0-rc2-LINTECH 
#1
[    6.686075] Hardware name: Freescale MXS (Device Tree)
[    6.691320] [<c000f150>] (unwind_backtrace) from [<c000d318>]
(show_stack+0x10/0x14)
[    6.699143] [<c000d318>] (show_stack) from [<c0092338>]
(panic+0xb4/0x23c)
[    6.706098] [<c0092338>] (panic) from [<c00183dc>]
(do_exit+0x450/0x84c)
[    6.712866] [<c00183dc>] (do_exit) from [<c0019ecc>]
(do_group_exit+0xb8/0xbc)
[    6.720150] [<c0019ecc>] (do_group_exit) from [<c0019ee0>]
(SyS_exit_group+0x10/0x14)
[    6.728037] [<c0019ee0>] (SyS_exit_group) from [<c000a160>]
(ret_fast_syscall+0x0/0x1c)
[    6.736155] ---[ end Kernel panic - not syncing: Attempted to kill
init! exitcode=0x00007f00
"""

This is my preinit script:

"""
#!/bin/sh

mount -t ubifs /dev/ubi1_0 /mnt/user

mkdir -p /mnt/user/overlay
mkdir -p /mnt/user/work

# Overlay read-only rootfs and read-write user filesystem.
mount -t overlay overlay -o
lowerdir=/,upperdir=/mnt/user/overlay,workdir=/mnt/user/work,noatime
/mnt/overlay

# Move necessary mount points
mount -n --move /dev /mnt/overlay/dev
mount -n --move /mnt/user /mnt/overlay/mnt/user

exec chroot /mnt/overlay /sbin/init
"""

Note, this is working on Linux 4.7.

Best regards
Jörg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
@ 2016-10-28 16:19   ` Jörg Krause
  0 siblings, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-10-28 16:19 UTC (permalink / raw)
  To: Richard Weinberger, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

Hi,

On Fri, 2016-10-28 at 11:53 +0200, Richard Weinberger wrote:
> Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
> overlayfs support because the fix exposed an internal error
> code to VFS.
> 
> Reported-by: Peter Rosin <peda@axentia.se>
> Tested-by: Peter Rosin <peda@axentia.se>
> Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
> Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
> Cc: stable@vger.kernel.org
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
>  fs/ubifs/dir.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index bd4a5e8ce441..ca16c5d7bab1 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file,
> struct dir_context *ctx)
>  
>  	if (err != -ENOENT)
>  		ubifs_err(c, "cannot find next direntry, error %d",
> err);
> +	else
> +		/*
> +		 * -ENOENT is a non-fatal error in this context, the
> TNC uses
> +		 * it to indicate that the cursor moved past the
> current directory
> +		 * and readdir() has to stop.
> +		 */
> +		err = 0;
> +
>  
>  	/* 2 is a special value indicating that there are no more
> direntries */
>  	ctx->pos = 2;

I'm not sure if it's related to the issue reported by Peter Rosin and
Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
with OverlayFS on Linux v4.9.0-rc2 with this patch applied:


"""
[    2.709197] ubi0: default fastmap pool size: 15
[    2.713806] ubi0: default fastmap WL pool size: 7
[    2.718776] ubi0: attaching mtd5
[    3.690342] ubi0: scanning is finished
[    3.726232] ubi0 warning: ubi_eba_init: cannot reserve enough PEBs
for bad PEB handling, reserved 18, need 20
[    3.756003] ubi0: attached mtd5 (name "ubi-0", size 44 MiB)
[    3.761658] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976
bytes
[    3.768857] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size
2048
[    3.775860] ubi0: VID header offset: 2048 (aligned 2048), data
offset: 4096
[    3.782886] ubi0: good PEBs: 352, bad PEBs: 0, corrupted PEBs: 0
[    3.789080] ubi0: user volume: 1, internal volumes: 1, max. volumes
count: 128
[    3.796501] ubi0: max/mean erase counter: 1/0, WL threshold: 4096,
image sequence number: 955660178
[    3.805742] ubi0: available PEBs: 0, total reserved PEBs: 352, PEBs
reserved for bad PEB handling: 18
[    3.815502] ubi0: background thread "ubi_bgt0d" started, PID 40
[    3.822173] ubi1: default fastmap pool size: 10
[    3.827213] ubi1: default fastmap WL pool size: 5
[    3.832016] ubi1: attaching mtd7
[    4.278806] ubi1: scanning is finished
[    4.376526] ubi1: volume 0 ("user") re-sized from 13 to 162 LEBs
[    4.391959] ubi1: attached mtd7 (name "data", size 36 MiB)
[    4.397813] ubi1: PEB size: 131072 bytes (128 KiB), LEB size: 126976
bytes
[    4.404761] ubi1: min./max. I/O unit sizes: 2048/2048, sub-page size
2048
[    4.411752] ubi1: VID header offset: 2048 (aligned 2048), data
offset: 4096
[    4.418909] ubi1: good PEBs: 288, bad PEBs: 0, corrupted PEBs: 0
[    4.425107] ubi1: user volume: 2, internal volumes: 1, max. volumes
count: 128
[    4.432399] ubi1: max/mean erase counter: 1/0, WL threshold: 4096,
image sequence number: 1961582752
[    4.441714] ubi1: available PEBs: 0, total reserved PEBs: 288, PEBs
reserved for bad PEB handling: 20
[    4.451267] ubi1: background thread "ubi_bgt1d" started, PID 41
[    4.469335] input: gpio-keys as /devices/soc0/gpio-keys/input/input0
[    4.492732] stmp3xxx-rtc 80056000.rtc: setting system clock to 1970-
01-01 00:01:07 UTC (67)
[    4.506810] ALSA device list:
[    4.509854]   #0: mxs_wm8524
[    4.523140] uart-pl011 80074000.serial: no DMA platform data
[    4.909981] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1,
name "rootfs", R/O mode
[    4.919428] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB),
min./max. I/O unit sizes: 2048 bytes/2048 bytes
[    4.933097] UBIFS (ubi0:1): FS size: 40378368 bytes (38 MiB, 318
LEBs), journal size 5586944 bytes (5 MiB, 44 LEBs)
[    4.944659] UBIFS (ubi0:1): reserved for root: 0 bytes (0 KiB)
[    4.954275] UBIFS (ubi0:1): media format: w4/r0 (latest is w4/r0),
UUID 3F29D9B8-363D-4A54-8CE4-BF6969BB9687, small LPT model
[    4.993543] VFS: Mounted root (ubifs filesystem) readonly on device
0:13.
[    5.023313] devtmpfs: mounted
[    5.036855] Freeing unused kernel memory: 144K (c0506000 - c052a000)
[    5.043278] This architecture does not have kernel memory
protection.
[    5.869112] UBIFS (ubi1:0): background thread "ubifs_bgt1_0"
started, PID 43
[    6.056630] UBIFS (ubi1:0): start fixing up free space
[    6.162648] UBIFS (ubi1:0): free space fixup complete
[    6.263554] UBIFS (ubi1:0): UBIFS: mounted UBI device 1, volume 0,
name "user"
[    6.271600] UBIFS (ubi1:0): LEB size: 126976 bytes (124 KiB),
min./max. I/O unit sizes: 2048 bytes/2048 bytes
[    6.285552] UBIFS (ubi1:0): FS size: 19300352 bytes (18 MiB, 152
LEBs), journal size 3047424 bytes (2 MiB, 24 LEBs)
[    6.296731] UBIFS (ubi1:0): reserved for root: 0 bytes (0 KiB)
[    6.306432] UBIFS (ubi1:0): media format: w4/r0 (latest is w4/r0),
UUID A5813F13-6645-4096-B663-A08D87959541, small LPT model
[    6.542487] random: crng init done
mount: mounting overlay on /mnt/overlay failed: No such file or
directory
mount: mounting /dev on /mnt/overlay/dev failed: No such file or
directory
mount: mounting /mnt/user on /mnt/overlay/mnt/user failed: No such file
or directory
chroot: can't execute '/sbin/init': No such file or directory
[    6.670206] Kernel panic - not syncing: Attempted to kill init!
exitcode=0x00007f00
[    6.670206] 
[    6.679426] CPU: 0 PID: 1 Comm: chroot Not tainted 4.9.0-rc2-LINTECH 
#1
[    6.686075] Hardware name: Freescale MXS (Device Tree)
[    6.691320] [<c000f150>] (unwind_backtrace) from [<c000d318>]
(show_stack+0x10/0x14)
[    6.699143] [<c000d318>] (show_stack) from [<c0092338>]
(panic+0xb4/0x23c)
[    6.706098] [<c0092338>] (panic) from [<c00183dc>]
(do_exit+0x450/0x84c)
[    6.712866] [<c00183dc>] (do_exit) from [<c0019ecc>]
(do_group_exit+0xb8/0xbc)
[    6.720150] [<c0019ecc>] (do_group_exit) from [<c0019ee0>]
(SyS_exit_group+0x10/0x14)
[    6.728037] [<c0019ee0>] (SyS_exit_group) from [<c000a160>]
(ret_fast_syscall+0x0/0x1c)
[    6.736155] ---[ end Kernel panic - not syncing: Attempted to kill
init! exitcode=0x00007f00
"""

This is my preinit script:

"""
#!/bin/sh

mount -t ubifs /dev/ubi1_0 /mnt/user

mkdir -p /mnt/user/overlay
mkdir -p /mnt/user/work

# Overlay read-only rootfs and read-write user filesystem.
mount -t overlay overlay -o
lowerdir=/,upperdir=/mnt/user/overlay,workdir=/mnt/user/work,noatime
/mnt/overlay

# Move necessary mount points
mount -n --move /dev /mnt/overlay/dev
mount -n --move /mnt/user /mnt/overlay/mnt/user

exec chroot /mnt/overlay /sbin/init
"""

Note, this is working on Linux 4.7.

Best regards
Jörg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-10-28 16:19   ` Jörg Krause
  (?)
@ 2016-10-28 17:07   ` Richard Weinberger
  2016-10-28 22:23       ` Jörg Krause
  -1 siblings, 1 reply; 17+ messages in thread
From: Richard Weinberger @ 2016-10-28 17:07 UTC (permalink / raw)
  To: Jörg Krause, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

Jörg,

On 28.10.2016 18:19, Jörg Krause wrote:
> Hi,
> 
> On Fri, 2016-10-28 at 11:53 +0200, Richard Weinberger wrote:
>> Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
>> overlayfs support because the fix exposed an internal error
>> code to VFS.
>>
>> Reported-by: Peter Rosin <peda@axentia.se>
>> Tested-by: Peter Rosin <peda@axentia.se>
>> Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
>> Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Richard Weinberger <richard@nod.at>
>> ---
>>  fs/ubifs/dir.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
>> index bd4a5e8ce441..ca16c5d7bab1 100644
>> --- a/fs/ubifs/dir.c
>> +++ b/fs/ubifs/dir.c
>> @@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file,
>> struct dir_context *ctx)
>>  
>>  	if (err != -ENOENT)
>>  		ubifs_err(c, "cannot find next direntry, error %d",
>> err);
>> +	else
>> +		/*
>> +		 * -ENOENT is a non-fatal error in this context, the
>> TNC uses
>> +		 * it to indicate that the cursor moved past the
>> current directory
>> +		 * and readdir() has to stop.
>> +		 */
>> +		err = 0;
>> +
>>  
>>  	/* 2 is a special value indicating that there are no more
>> direntries */
>>  	ctx->pos = 2;
> 
> I'm not sure if it's related to the issue reported by Peter Rosin and
> Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
> with OverlayFS on Linux v4.9.0-rc2 with this patch applied:

Does reverting c83ed4c9dbb35 help?
And are you 100% sure you applied the fix?

Does the following WARN_ON() trigger?
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index ca16c5d7bab1..12ffc91f7ef8 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -554,6 +554,9 @@ static int ubifs_readdir(struct file *file, struct dir_context *ctx)

 	/* 2 is a special value indicating that there are no more direntries */
 	ctx->pos = 2;
+
+	WARN_ON(err);
+
 	return err;
 }


Thanks,
//richard

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-10-28 17:07   ` Richard Weinberger
@ 2016-10-28 22:23       ` Jörg Krause
  0 siblings, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-10-28 22:23 UTC (permalink / raw)
  To: Richard Weinberger, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

Richard,

On Fri, 2016-10-28 at 19:07 +0200, Richard Weinberger wrote:
> Jörg,
> 
> On 28.10.2016 18:19, Jörg Krause wrote:
> > Hi,
> > 
> > On Fri, 2016-10-28 at 11:53 +0200, Richard Weinberger wrote:
> > > Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
> > > overlayfs support because the fix exposed an internal error
> > > code to VFS.
> > > 
> > > Reported-by: Peter Rosin <peda@axentia.se>
> > > Tested-by: Peter Rosin <peda@axentia.se>
> > > Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
> > > Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
> > > Cc: stable@vger.kernel.org
> > > Signed-off-by: Richard Weinberger <richard@nod.at>
> > > ---
> > >  fs/ubifs/dir.c | 8 ++++++++
> > >  1 file changed, 8 insertions(+)
> > > 
> > > diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> > > index bd4a5e8ce441..ca16c5d7bab1 100644
> > > --- a/fs/ubifs/dir.c
> > > +++ b/fs/ubifs/dir.c
> > > @@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file,
> > > struct dir_context *ctx)
> > >  
> > >  	if (err != -ENOENT)
> > >  		ubifs_err(c, "cannot find next direntry, error
> > > %d",
> > > err);
> > > +	else
> > > +		/*
> > > +		 * -ENOENT is a non-fatal error in this context,
> > > the
> > > TNC uses
> > > +		 * it to indicate that the cursor moved past the
> > > current directory
> > > +		 * and readdir() has to stop.
> > > +		 */
> > > +		err = 0;
> > > +
> > >  
> > >  	/* 2 is a special value indicating that there are no
> > > more
> > > direntries */
> > >  	ctx->pos = 2;
> > 
> > I'm not sure if it's related to the issue reported by Peter Rosin
> > and
> > Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
> > with OverlayFS on Linux v4.9.0-rc2 with this patch applied:
> 
> Does reverting c83ed4c9dbb35 help?
> And are you 100% sure you applied the fix?

I double double checked. The fix was applied on the git tree, but the
compiler cache (I am using Buildroot with this option enabled) fooled
me by using an old copy. After disabling the compiler cache I got a
fixed build of the kernel. The panic is gone! Thanks!

> 
> Does the following WARN_ON() trigger?
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index ca16c5d7bab1..12ffc91f7ef8 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -554,6 +554,9 @@ static int ubifs_readdir(struct file *file,
> struct dir_context *ctx)
> 
>  	/* 2 is a special value indicating that there are no more
> direntries */
>  	ctx->pos = 2;
> +
> +	WARN_ON(err);
> +
>  	return err;
>  }

Best regards,
Jörg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
@ 2016-10-28 22:23       ` Jörg Krause
  0 siblings, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-10-28 22:23 UTC (permalink / raw)
  To: Richard Weinberger, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

Richard,

On Fri, 2016-10-28 at 19:07 +0200, Richard Weinberger wrote:
> Jörg,
> 
> On 28.10.2016 18:19, Jörg Krause wrote:
> > Hi,
> > 
> > On Fri, 2016-10-28 at 11:53 +0200, Richard Weinberger wrote:
> > > Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
> > > overlayfs support because the fix exposed an internal error
> > > code to VFS.
> > > 
> > > Reported-by: Peter Rosin <peda@axentia.se>
> > > Tested-by: Peter Rosin <peda@axentia.se>
> > > Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
> > > Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
> > > Cc: stable@vger.kernel.org
> > > Signed-off-by: Richard Weinberger <richard@nod.at>
> > > ---
> > >  fs/ubifs/dir.c | 8 ++++++++
> > >  1 file changed, 8 insertions(+)
> > > 
> > > diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> > > index bd4a5e8ce441..ca16c5d7bab1 100644
> > > --- a/fs/ubifs/dir.c
> > > +++ b/fs/ubifs/dir.c
> > > @@ -543,6 +543,14 @@ static int ubifs_readdir(struct file *file,
> > > struct dir_context *ctx)
> > >  
> > >  	if (err != -ENOENT)
> > >  		ubifs_err(c, "cannot find next direntry, error
> > > %d",
> > > err);
> > > +	else
> > > +		/*
> > > +		 * -ENOENT is a non-fatal error in this context,
> > > the
> > > TNC uses
> > > +		 * it to indicate that the cursor moved past the
> > > current directory
> > > +		 * and readdir() has to stop.
> > > +		 */
> > > +		err = 0;
> > > +
> > >  
> > >  	/* 2 is a special value indicating that there are no
> > > more
> > > direntries */
> > >  	ctx->pos = 2;
> > 
> > I'm not sure if it's related to the issue reported by Peter Rosin
> > and
> > Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
> > with OverlayFS on Linux v4.9.0-rc2 with this patch applied:
> 
> Does reverting c83ed4c9dbb35 help?
> And are you 100% sure you applied the fix?

I double double checked. The fix was applied on the git tree, but the
compiler cache (I am using Buildroot with this option enabled) fooled
me by using an old copy. After disabling the compiler cache I got a
fixed build of the kernel. The panic is gone! Thanks!

> 
> Does the following WARN_ON() trigger?
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index ca16c5d7bab1..12ffc91f7ef8 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -554,6 +554,9 @@ static int ubifs_readdir(struct file *file,
> struct dir_context *ctx)
> 
>  	/* 2 is a special value indicating that there are no more
> direntries */
>  	ctx->pos = 2;
> +
> +	WARN_ON(err);
> +
>  	return err;
>  }

Best regards,
Jörg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-10-28 22:23       ` Jörg Krause
  (?)
@ 2016-10-29  9:04       ` Richard Weinberger
  -1 siblings, 0 replies; 17+ messages in thread
From: Richard Weinberger @ 2016-10-29  9:04 UTC (permalink / raw)
  To: Jörg Krause, linux-mtd
  Cc: dedekind1, linux-kernel, stable, adrian.hunter, ralph.sennhauser, peda

On 29.10.2016 00:23, Jörg Krause wrote:
>> Does reverting c83ed4c9dbb35 help?
>> And are you 100% sure you applied the fix?
> 
> I double double checked. The fix was applied on the git tree, but the
> compiler cache (I am using Buildroot with this option enabled) fooled
> me by using an old copy. After disabling the compiler cache I got a
> fixed build of the kernel. The panic is gone! Thanks!

Thanks for letting me know.
Let's get this fix into -rc3 then. :-)

Thanks,
//richard

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-10-28 22:23       ` Jörg Krause
  (?)
  (?)
@ 2016-11-01 22:22       ` Thomas Petazzoni
  2016-11-02 19:56         ` Jörg Krause
  -1 siblings, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2016-11-01 22:22 UTC (permalink / raw)
  To: buildroot

Hello J?rg,

[E-mail thread hijacked from the linux-mtd mailing list, since there is
a Buildroot related problem reported.]

On Sat, 29 Oct 2016 00:23:15 +0200, J?rg Krause wrote:

> > > I'm not sure if it's related to the issue reported by Peter Rosin
> > > and
> > > Ralph Sennhauser, but I am still getting a kernel panic using UBIFS
> > > with OverlayFS on Linux v4.9.0-rc2 with this patch applied:  
> > 
> > Does reverting c83ed4c9dbb35 help?
> > And are you 100% sure you applied the fix?  
> 
> I double double checked. The fix was applied on the git tree, but the
> compiler cache (I am using Buildroot with this option enabled) fooled
> me by using an old copy. After disabling the compiler cache I got a
> fixed build of the kernel. The panic is gone! Thanks!

This is *really* bad. Which Buildroot version are you using? Are you
able to reproduce the bad ccache behavior here? A modified source code
should definitely lead to a different hash of the preprocessed code,
and therefore there shouldn't be such a confusion between two cache
results.

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-01 22:22       ` [Buildroot] " Thomas Petazzoni
@ 2016-11-02 19:56         ` Jörg Krause
  2016-11-02 20:49           ` Thomas Petazzoni
  0 siblings, 1 reply; 17+ messages in thread
From: Jörg Krause @ 2016-11-02 19:56 UTC (permalink / raw)
  To: buildroot

On Tue, 2016-11-01 at 23:22 +0100, Thomas Petazzoni wrote:
> Hello J?rg,
> 
> [E-mail thread hijacked from the linux-mtd mailing list, since there
> is
> a Buildroot related problem reported.]
> 
> On Sat, 29 Oct 2016 00:23:15 +0200, J?rg Krause wrote:
> 
> > > > I'm not sure if it's related to the issue reported by Peter
> > > > Rosin
> > > > and
> > > > Ralph Sennhauser, but I am still getting a kernel panic using
> > > > UBIFS
> > > > with OverlayFS on Linux v4.9.0-rc2 with this patch applied:??
> > > 
> > > Does reverting c83ed4c9dbb35 help?
> > > And are you 100% sure you applied the fix???
> > 
> > I double double checked. The fix was applied on the git tree, but
> > the
> > compiler cache (I am using Buildroot with this option enabled)
> > fooled
> > me by using an old copy. After disabling the compiler cache I got a
> > fixed build of the kernel. The panic is gone! Thanks!
> 
> This is *really* bad. Which Buildroot version are you using?

2016.11 #

Note that I am using Buildroot as a submodule [1] and I needed to port
the br2-external tree. Maybe I messed something up?

> Are you able to reproduce the bad ccache behavior here?

Yes, I am. Linux kernel source directory is located locally and the
path is set using LINUX_OVERRIDE_SRCDIR in local.mk.

1/ Checkout Linux kernel version 4.7.10
2/ make linux-dirclean all
3/ Booted Linux version is 4.7.10

4/ Checkout Linux kernel version 4.8.5
5/ make linux-dirclean all
6/ Booted Linux version is still 4.7.10

> A modified source code should definitely lead to a different hash of
> the preprocessed code, and therefore there shouldn't be such a
> confusion between two cache results.

I checked the Linux source files in output/build/linux-custom/ and they
are correct - after step 2 the directory contains the Linux sources of
version 4.7.10 and after step 5 it contains version 4.8.5.

[1] https://github.com/Openwide-Ingenierie/buildroot-submodule

Best regards,
J?rg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-02 19:56         ` Jörg Krause
@ 2016-11-02 20:49           ` Thomas Petazzoni
  2016-11-02 22:49             ` Jörg Krause
  0 siblings, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2016-11-02 20:49 UTC (permalink / raw)
  To: buildroot

Hello,

On Wed, 02 Nov 2016 20:56:59 +0100, J?rg Krause wrote:

> > This is *really* bad. Which Buildroot version are you using?  
> 
> 2016.11 #
> 
> Note that I am using Buildroot as a submodule [1] and I needed to port
> the br2-external tree. Maybe I messed something up?
> 
> > Are you able to reproduce the bad ccache behavior here?  
> 
> Yes, I am. Linux kernel source directory is located locally and the
> path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
> 
> 1/ Checkout Linux kernel version 4.7.10
> 2/ make linux-dirclean all
> 3/ Booted Linux version is 4.7.10
> 
> 4/ Checkout Linux kernel version 4.8.5
> 5/ make linux-dirclean all
> 6/ Booted Linux version is still 4.7.10

And this scenario works fine with ccache *disabled*, but breaks when
you enable ccache support in Buildroot?

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-02 20:49           ` Thomas Petazzoni
@ 2016-11-02 22:49             ` Jörg Krause
  2016-11-03  2:46               ` Arnout Vandecappelle
  0 siblings, 1 reply; 17+ messages in thread
From: Jörg Krause @ 2016-11-02 22:49 UTC (permalink / raw)
  To: buildroot

On Wed, 2016-11-02 at 21:49 +0100, Thomas Petazzoni wrote:
> Hello,
> 
> On Wed, 02 Nov 2016 20:56:59 +0100, J?rg Krause wrote:
> 
> > > This is *really* bad. Which Buildroot version are you using???
> > 
> > 2016.11 #
> > 
> > Note that I am using Buildroot as a submodule [1] and I needed to
> > port
> > the br2-external tree. Maybe I messed something up?
> > 
> > > Are you able to reproduce the bad ccache behavior here???
> > 
> > Yes, I am. Linux kernel source directory is located locally and the
> > path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
> > 
> > 1/ Checkout Linux kernel version 4.7.10
> > 2/ make linux-dirclean all
> > 3/ Booted Linux version is 4.7.10
> > 
> > 4/ Checkout Linux kernel version 4.8.5
> > 5/ make linux-dirclean all
> > 6/ Booted Linux version is still 4.7.10
> 
> And this scenario works fine with ccache *disabled*, but breaks when
> you enable ccache support in Buildroot?

Yes.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-02 22:49             ` Jörg Krause
@ 2016-11-03  2:46               ` Arnout Vandecappelle
  2016-11-03  7:23                 ` Jörg Krause
  0 siblings, 1 reply; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-11-03  2:46 UTC (permalink / raw)
  To: buildroot



On 02-11-16 23:49, J?rg Krause wrote:
> On Wed, 2016-11-02 at 21:49 +0100, Thomas Petazzoni wrote:
>> Hello,
>>
>> On Wed, 02 Nov 2016 20:56:59 +0100, J?rg Krause wrote:
>>
>>>> This is *really* bad. Which Buildroot version are you using?  
>>>
>>> 2016.11 #
>>>
>>> Note that I am using Buildroot as a submodule [1] and I needed to
>>> port
>>> the br2-external tree. Maybe I messed something up?
>>>
>>>> Are you able to reproduce the bad ccache behavior here?  
>>>
>>> Yes, I am. Linux kernel source directory is located locally and the
>>> path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
>>>
>>> 1/ Checkout Linux kernel version 4.7.10
>>> 2/ make linux-dirclean all
>>> 3/ Booted Linux version is 4.7.10
>>>
>>> 4/ Checkout Linux kernel version 4.8.5
>>> 5/ make linux-dirclean all
>>> 6/ Booted Linux version is still 4.7.10
>>
>> And this scenario works fine with ccache *disabled*, but breaks when
>> you enable ccache support in Buildroot?
> 
> Yes.

 I can't reproduce this. I've got a nice mix of cache misses and cache hits when
building a different version, and version.o is definitely a cache miss.

 Can you double-check the version in output/build/linux-custom/init/version.o?
And the one in output/build/linux-custom/include/generated/utsrelease.h?

 Hm, hang on, is there maybe a utsrelease.h that ends up in your staging dir and
that is used by ccache?

 Regards,
 Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-03  2:46               ` Arnout Vandecappelle
@ 2016-11-03  7:23                 ` Jörg Krause
  2016-11-03 10:22                   ` Arnout Vandecappelle
  0 siblings, 1 reply; 17+ messages in thread
From: Jörg Krause @ 2016-11-03  7:23 UTC (permalink / raw)
  To: buildroot

On Thu, 2016-11-03 at 03:46 +0100, Arnout Vandecappelle wrote:
> 
> On 02-11-16 23:49, J?rg Krause wrote:
> > On Wed, 2016-11-02 at 21:49 +0100, Thomas Petazzoni wrote:
> > > Hello,
> > > 
> > > On Wed, 02 Nov 2016 20:56:59 +0100, J?rg Krause wrote:
> > > 
> > > > > This is *really* bad. Which Buildroot version are you
> > > > > using???
> > > > 
> > > > 2016.11 #
> > > > 
> > > > Note that I am using Buildroot as a submodule [1] and I needed
> > > > to
> > > > port
> > > > the br2-external tree. Maybe I messed something up?
> > > > 
> > > > > Are you able to reproduce the bad ccache behavior here???
> > > > 
> > > > Yes, I am. Linux kernel source directory is located locally and
> > > > the
> > > > path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
> > > > 
> > > > 1/ Checkout Linux kernel version 4.7.10
> > > > 2/ make linux-dirclean all
> > > > 3/ Booted Linux version is 4.7.10
> > > > 
> > > > 4/ Checkout Linux kernel version 4.8.5
> > > > 5/ make linux-dirclean all
> > > > 6/ Booted Linux version is still 4.7.10
> > > 
> > > And this scenario works fine with ccache *disabled*, but breaks
> > > when
> > > you enable ccache support in Buildroot?
> > 
> > Yes.
> 
> ?I can't reproduce this. I've got a nice mix of cache misses and
> cache hits when
> building a different version, and version.o is definitely a cache
> miss.
> 
> ?Can you double-check the version in output/build/linux-
> custom/init/version.o?

I checked the version string in version.o with hexdump -C and they
differ.

> And the one in output/build/linux-
> custom/include/generated/utsrelease.h?

This as well.

> ?Hm, hang on, is there maybe a utsrelease.h that ends up in your
> staging dir and that is used by ccache?

No, there is only the linux generated file.

---

I am not experienced with ccache, but I got some statistics:

I cleared the cache by removing ~/.buildroot-ccache, than run `make
linux-dirclean linux`:

cache hit (direct)?????????????????????0
cache hit (preprocessed)???????????????0
cache miss??????????????????????????1088
cache hit rate??????????????????????0.00 %
called for link???????????????????????10
called for preprocessing???????????????5
no input file????????????????????????394
cleanups performed?????????????????????0
files in cache??????????????????????3250

Then I re-run `make linux-dirclean linux` (without altering the linux
sources):

cache hit (direct)??????????????????1076
cache hit (preprocessed)??????????????10
cache miss??????????????????????????1090
cache hit rate?????????????????????49.91 %
called for link???????????????????????20
called for preprocessing??????????????10
no input file????????????????????????788
cleanups performed?????????????????????0
files in cache??????????????????????3264

Again, clear the cache and run `make linux-dirclean linux`, but alter
the linux sources by checking out a different branch:

cache hit (direct)????????????????????10
cache hit (preprocessed)??????????????62
cache miss??????????????????????????2102
cache hit rate??????????????????????3.31 %
called for link???????????????????????20
called for preprocessing??????????????10
no input file????????????????????????773
cleanups performed?????????????????????0
files in cache??????????????????????6386

---

Furthermore, I did the following for the different linux builds:

After building branch-4.7.y:
# cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.7.10

After building branch-4.8.y:
# cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.8.5

Afterwards, diff shows no differences:
# diff zImage-4.7.10 zImage-4.8.5

Best regards,
J?rg Krause

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-03  7:23                 ` Jörg Krause
@ 2016-11-03 10:22                   ` Arnout Vandecappelle
  2016-11-07 22:08                     ` Jörg Krause
  2016-11-07 22:54                     ` Jörg Krause
  0 siblings, 2 replies; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-11-03 10:22 UTC (permalink / raw)
  To: buildroot



On 03-11-16 08:23, J?rg Krause wrote:
> On Thu, 2016-11-03 at 03:46 +0100, Arnout Vandecappelle wrote:
>>
>> On 02-11-16 23:49, J?rg Krause wrote:
[snip]
>>>>> Yes, I am. Linux kernel source directory is located locally and
>>>>> the
>>>>> path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
>>>>>
>>>>> 1/ Checkout Linux kernel version 4.7.10
>>>>> 2/ make linux-dirclean all
>>>>> 3/ Booted Linux version is 4.7.10
>>>>>
>>>>> 4/ Checkout Linux kernel version 4.8.5
>>>>> 5/ make linux-dirclean all
>>>>> 6/ Booted Linux version is still 4.7.10
>>>>
>>>> And this scenario works fine with ccache *disabled*, but breaks
>>>> when
>>>> you enable ccache support in Buildroot?
>>>
>>> Yes.
>>
>>  I can't reproduce this. I've got a nice mix of cache misses and
>> cache hits when
>> building a different version, and version.o is definitely a cache
>> miss.
>>
>>  Can you double-check the version in output/build/linux-
>> custom/init/version.o?
> 
> I checked the version string in version.o with hexdump -C and they
> differ.

 And the version that is in there is correct, right? (Use strings to get it, the
first string it finds should be the version string as in uname -a).

 This is very weird, because version.o gets linked into the vmlinux.elf and
eventually the zImage, and ccache doesn't get activated anymore in that path
because it's all linking and no compiling...

> 
>> And the one in output/build/linux-
>> custom/include/generated/utsrelease.h?
> 
> This as well.
> 
>>  Hm, hang on, is there maybe a utsrelease.h that ends up in your
>> staging dir and that is used by ccache?
> 
> No, there is only the linux generated file.
> 
> ---
> 
> I am not experienced with ccache, but I got some statistics:
> 
> I cleared the cache by removing ~/.buildroot-ccache, than run `make
> linux-dirclean linux`:
> 
> cache hit (direct)                     0
> cache hit (preprocessed)               0
> cache miss                          1088
> cache hit rate                      0.00 %
> called for link                       10
> called for preprocessing               5
> no input file                        394
> cleanups performed                     0
> files in cache                      3250
> 
> Then I re-run `make linux-dirclean linux` (without altering the linux
> sources):
> 
> cache hit (direct)                  1076
> cache hit (preprocessed)              10
> cache miss                          1090
> cache hit rate                     49.91 %
> called for link                       20
> called for preprocessing              10
> no input file                        788
> cleanups performed                     0
> files in cache                      3264
> 
> Again, clear the cache and run `make linux-dirclean linux`, but alter
> the linux sources by checking out a different branch:
> 
> cache hit (direct)                    10

 This is weird, it shouldn't go down... Did you clear the cache or the
statistics somewhere in between?

> cache hit (preprocessed)              62
> cache miss                          2102
> cache hit rate                      3.31 %
> called for link                       20
> called for preprocessing              10
> no input file                        773
> cleanups performed                     0
> files in cache                      6386
> 
> ---
> 
> Furthermore, I did the following for the different linux builds:
> 
> After building branch-4.7.y:
> # cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.7.10
> 
> After building branch-4.8.y:
> # cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.8.5
> 
> Afterwards, diff shows no differences:
> # diff zImage-4.7.10 zImage-4.8.5

 Since version.o differs, it means the version.o doesn't end up in the zImage...
Again, can you check for the intermediate files what happens to them? E.g.
init/built-in.o, .tmp_vmlinux1, arch/arm/boot/Image. Maybe just do "mv
output/build/linux-custom output/build/linux-custom.orig" before rebuilding and
do a full tree compare to find which files are identical.

 Regards,
 Arnout

> 
> Best regards,
> J?rg Krause
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-03 10:22                   ` Arnout Vandecappelle
@ 2016-11-07 22:08                     ` Jörg Krause
  2016-11-07 22:24                       ` Jörg Krause
  2016-11-07 22:54                     ` Jörg Krause
  1 sibling, 1 reply; 17+ messages in thread
From: Jörg Krause @ 2016-11-07 22:08 UTC (permalink / raw)
  To: buildroot

On Thu, 2016-11-03 at 11:22 +0100, Arnout Vandecappelle wrote:
> 
> On 03-11-16 08:23, J?rg Krause wrote:
> > On Thu, 2016-11-03 at 03:46 +0100, Arnout Vandecappelle wrote:
> > > 
> > > On 02-11-16 23:49, J?rg Krause wrote:
> 
> [snip]
> > > > > > Yes, I am. Linux kernel source directory is located locally
> > > > > > and
> > > > > > the
> > > > > > path is set using LINUX_OVERRIDE_SRCDIR in local.mk.
> > > > > > 
> > > > > > 1/ Checkout Linux kernel version 4.7.10
> > > > > > 2/ make linux-dirclean all
> > > > > > 3/ Booted Linux version is 4.7.10
> > > > > > 
> > > > > > 4/ Checkout Linux kernel version 4.8.5
> > > > > > 5/ make linux-dirclean all
> > > > > > 6/ Booted Linux version is still 4.7.10
> > > > > 
> > > > > And this scenario works fine with ccache *disabled*, but
> > > > > breaks
> > > > > when
> > > > > you enable ccache support in Buildroot?
> > > > 
> > > > Yes.
> > > 
> > > ?I can't reproduce this. I've got a nice mix of cache misses and
> > > cache hits when
> > > building a different version, and version.o is definitely a cache
> > > miss.
> > > 
> > > ?Can you double-check the version in output/build/linux-
> > > custom/init/version.o?
> > 
> > I checked the version string in version.o with hexdump -C and they
> > differ.
> 
> ?And the version that is in there is correct, right? (Use strings to
> get it, the
> first string it finds should be the version string as in uname -a).
> 
> ?This is very weird, because version.o gets linked into the
> vmlinux.elf and
> eventually the zImage, and ccache doesn't get activated anymore in
> that path
> because it's all linking and no compiling...
> 
> > 
> > > And the one in output/build/linux-
> > > custom/include/generated/utsrelease.h?
> > 
> > This as well.
> > 
> > > ?Hm, hang on, is there maybe a utsrelease.h that ends up in your
> > > staging dir and that is used by ccache?
> > 
> > No, there is only the linux generated file.
> > 
> > ---
> > 
> > I am not experienced with ccache, but I got some statistics:
> > 
> > I cleared the cache by removing ~/.buildroot-ccache, than run `make
> > linux-dirclean linux`:
> > 
> > cache hit (direct)?????????????????????0
> > cache hit (preprocessed)???????????????0
> > cache miss??????????????????????????1088
> > cache hit rate??????????????????????0.00 %
> > called for link???????????????????????10
> > called for preprocessing???????????????5
> > no input file????????????????????????394
> > cleanups performed?????????????????????0
> > files in cache??????????????????????3250
> > 
> > Then I re-run `make linux-dirclean linux` (without altering the
> > linux
> > sources):
> > 
> > cache hit (direct)??????????????????1076
> > cache hit (preprocessed)??????????????10
> > cache miss??????????????????????????1090
> > cache hit rate?????????????????????49.91 %
> > called for link???????????????????????20
> > called for preprocessing??????????????10
> > no input file????????????????????????788
> > cleanups performed?????????????????????0
> > files in cache??????????????????????3264
> > 
> > Again, clear the cache and run `make linux-dirclean linux`, but
> > alter
> > the linux sources by checking out a different branch:
> > 
> > cache hit (direct)????????????????????10
> 
> ?This is weird, it shouldn't go down... Did you clear the cache or
> the
> statistics somewhere in between?

Yes. Maybe you missed it, but I wrote "Again, clear the cache...".

> > cache hit (preprocessed)??????????????62
> > cache miss??????????????????????????2102
> > cache hit rate??????????????????????3.31 %
> > called for link???????????????????????20
> > called for preprocessing??????????????10
> > no input file????????????????????????773
> > cleanups performed?????????????????????0
> > files in cache??????????????????????6386
> > 
> > ---
> > 
> > Furthermore, I did the following for the different linux builds:
> > 
> > After building branch-4.7.y:
> > # cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.7.10
> > 
> > After building branch-4.8.y:
> > # cp output/build/linux-custom/arch/arm/boot/zImage zImage-4.8.5
> > 
> > Afterwards, diff shows no differences:
> > # diff zImage-4.7.10 zImage-4.8.5
> 
> ?Since version.o differs, it means the version.o doesn't end up in
> the zImage...
> Again, can you check for the intermediate files what happens to them?
> E.g.
> init/built-in.o, .tmp_vmlinux1, arch/arm/boot/Image. Maybe just do
> "mv
> output/build/linux-custom output/build/linux-custom.orig" before
> rebuilding and
> do a full tree compare to find which files are identical.

I did the following:

1/ checkout linux-4.8 branch
2/ make linux-dirclean linux
3/ move output/build/linux-custom to output/build/linux-custom.orig
4/ checkout linux-4.7 branch
5/ make linux-dirclean linux
6/ diff:

# diff output/build/linux-custom/arch/arm/boot/Image
output/build/linux-custom.orig/arch/arm/boot/Image
Binary files output/build/linux-custom/arch/arm/boot/Image and
output/build/linux-custom.orig/arch/arm/boot/Image differ
# diff output/build/linux-custom/arch/arm/boot/zImage
output/build/linux-custom.orig/arch/arm/boot/zImage

Weird, the Image binaries differ, but the zImage don't. The zImage in
output/build/linux-custom/arch/arm/boot/ is exactly the same as in
output/build/linux-custom.orig/arch/arm/boot/

J?rg

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-07 22:08                     ` Jörg Krause
@ 2016-11-07 22:24                       ` Jörg Krause
  0 siblings, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-11-07 22:24 UTC (permalink / raw)
  To: buildroot

On Mon, 2016-11-07 at 23:08 +0100, J?rg Krause wrote:

[snip]

> > 
> > ?Since version.o differs, it means the version.o doesn't end up in
> > the zImage...
> > Again, can you check for the intermediate files what happens to
> > them?
> > E.g.
> > init/built-in.o, .tmp_vmlinux1, arch/arm/boot/Image. Maybe just do
> > "mv
> > output/build/linux-custom output/build/linux-custom.orig" before
> > rebuilding and
> > do a full tree compare to find which files are identical.
> 
> I did the following:
> 
> 1/ checkout linux-4.8 branch
> 2/ make linux-dirclean linux
> 3/ move output/build/linux-custom to output/build/linux-custom.orig
> 4/ checkout linux-4.7 branch
> 5/ make linux-dirclean linux
> 6/ diff:
> 
> # diff output/build/linux-custom/arch/arm/boot/Image
> output/build/linux-custom.orig/arch/arm/boot/Image
> Binary files output/build/linux-custom/arch/arm/boot/Image and
> output/build/linux-custom.orig/arch/arm/boot/Image differ
> # diff output/build/linux-custom/arch/arm/boot/zImage
> output/build/linux-custom.orig/arch/arm/boot/zImage
> 
> Weird, the Image binaries differ, but the zImage don't. The zImage in
> output/build/linux-custom/arch/arm/boot/ is exactly the same as in
> output/build/linux-custom.orig/arch/arm/boot/

After running the above steps I did the following:

7/ disable compiler cache option in Buildroot
8/ make linux-dirclean linux
9/ diff:

diff output/build/linux-custom/arch/arm/boot/zImage output/build/linux-
custom.orig/arch/arm/boot/zImage
Binary files hbm10/output/build/linux-custom/arch/arm/boot/zImage and
hbm10/output/build/linux-custom.orig/arch/arm/boot/zImage differ

10/ re-enable compiler cache in Buildroot
11/ Binary files hbm10/output/build/linux-custom/arch/arm/boot/zImage
and hbm10/output/build/linux-custom.orig/arch/arm/boot/zImage differ
12/ diff:

diff output/build/linux-custom/arch/arm/boot/zImage output/build/linux-
custom.orig/arch/arm/boot/zImage
(No message)

No idea!

J?rg

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH] ubifs: Fix regression in ubifs_readdir()
  2016-11-03 10:22                   ` Arnout Vandecappelle
  2016-11-07 22:08                     ` Jörg Krause
@ 2016-11-07 22:54                     ` Jörg Krause
  1 sibling, 0 replies; 17+ messages in thread
From: Jörg Krause @ 2016-11-07 22:54 UTC (permalink / raw)
  To: buildroot

On Thu, 2016-11-03 at 11:22 +0100, Arnout Vandecappelle wrote:
> 
> On 03-11-16 08:23, J?rg Krause wrote:
> > On Thu, 2016-11-03 at 03:46 +0100, Arnout Vandecappelle wrote:
> > > 
> > > On 02-11-16 23:49, J?rg Krause wrote:

[snip]

> ?Since version.o differs, it means the version.o doesn't end up in
> the zImage...
> Again, can you check for the intermediate files what happens to them?
> E.g.
> init/built-in.o, .tmp_vmlinux1, arch/arm/boot/Image. Maybe just do
> "mv
> output/build/linux-custom output/build/linux-custom.orig" before
> rebuilding and
> do a full tree compare to find which files are identical.

Got it! ccache <3.3.3 is affected by bug concerning rebuilding the
kernel [1].

So, I guess we should update ccache.

[1] https://github.com/ccache/ccache/issues/136

Many thanks for your help!

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-11-07 22:54 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-28  9:53 [PATCH] ubifs: Fix regression in ubifs_readdir() Richard Weinberger
2016-10-28 16:19 ` Jörg Krause
2016-10-28 16:19   ` Jörg Krause
2016-10-28 17:07   ` Richard Weinberger
2016-10-28 22:23     ` Jörg Krause
2016-10-28 22:23       ` Jörg Krause
2016-10-29  9:04       ` Richard Weinberger
2016-11-01 22:22       ` [Buildroot] " Thomas Petazzoni
2016-11-02 19:56         ` Jörg Krause
2016-11-02 20:49           ` Thomas Petazzoni
2016-11-02 22:49             ` Jörg Krause
2016-11-03  2:46               ` Arnout Vandecappelle
2016-11-03  7:23                 ` Jörg Krause
2016-11-03 10:22                   ` Arnout Vandecappelle
2016-11-07 22:08                     ` Jörg Krause
2016-11-07 22:24                       ` Jörg Krause
2016-11-07 22:54                     ` Jörg Krause

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.