[Problem] Gefreetzte 7390 kann kein ext3-Automount

Das nachzuverfolgen ist leider nicht so ganz einfach. Da wir keinen Source von AVM für diese Firmware haben. Ich habe in fs/ext4/super.c einige ext4_msg(sb, KERN_ERR,...) hinzugefügt. Interesanterweise ändern diese die Ausgaben!?
Code:
EXT4-fs (sda3): sb_block 1
EXT4-fs (sda3): blocksize 1024
EXT4-fs (sda3): block 1
getblk(): invalid block size 32 requested
logical block size: 512
Call Trace:
[<9441689c>] dump_stack+0x8/0x34
[<941abd74>] __getblk_slow+0xb8/0x1b8
[<941b1340>] __bread+0x14/0x3e4
[<c11f37ac>] ext4_fill_super+0x318/0x2a08 [ext4]
[<94187e54>] get_sb_bdev+0x130/0x1a8
[<c11f1024>] ext4_get_sb+0x2c/0x38 [ext4]
[<94186a94>] vfs_kern_mount+0x58/0xe4
[<94186b78>] do_kern_mount+0x48/0xfc
[<941a0318>] do_mount+0x260/0x2d4
[<941a0410>] sys_mount+0x84/0x154
[<9410ddc4>] stack_done+0x20/0x3c

EXT4-fs (sda3): unable to read superblock
Code:
static int ext4_fill_super(struct super_block *sb, void *data, int silent)
                                __releases(kernel_lock)
                                __acquires(kernel_lock)
{
        struct buffer_head *bh;
        struct ext4_super_block *es = NULL;
        struct ext4_sb_info *sbi;
        ext4_fsblk_t block;
        ext4_fsblk_t sb_block = get_sb_block(&data);
 [I]       ext4_msg(sb, KERN_ERR, "sb_block %lu",(unsigned long)sb_block);[/I]
        ext4_fsblk_t logical_sb_block;
...
 if (blocksize != EXT4_MIN_BLOCK_SIZE) {
                logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
                offset = do_div(logical_sb_block, blocksize);
        } else {
                logical_sb_block = sb_block;
        }
[I]        ext4_msg(sb, KERN_ERR, "blocksize %lu",(unsigned long)sb->s_blocksize);
        ext4_msg(sb, KERN_ERR, "block %lu",(unsigned long)logical_sb_block);[/I]
        if (!(bh = sb_bread(sb, logical_sb_block))) {
                ext4_msg(sb, KERN_ERR, "unable to read superblock");
                goto out_fail;
        }
Wenn ich diese Zeilen auskommentiere, dann kommt wieder die -1751726592. Kannst du dir vortstellen, dass eine Config Option oder ein Compiler Flag sowas auslösen könnte? Das ist doch ähnlich wie das Problem mit den Berechtigungen auf der 7390.

Gruß
Oliver

edit: Mir ist aufgefallen, dass die Größe des sk_buff structs unterschiedlich war. Aber daran scheint es nicht gelegen zu haben. Gibt es noch andere Strukturen mit "dynamischer" Größe?
 
Zuletzt bearbeitet:
@Ralf: War ironisch gemeint. Da ich irgendwann mal die Zeile geschrieben hatte, wollte ich meine Beweggründe dazu erklären. Erstaunlicherweise konnte ich mich sogar daran erinnern, obwohl es mir zugegeben nicht bei allen meiner irgendwann mal geschriebenen Sachen gelingt.
Ansonsten nur zu: Natürlich muss man aufräumen und sogar noch weiter werkeln, wenn man schon dabei ist. Von daher: Danke dass du da so aufmerksam drübergeschaut hast!

MfG
 
Wenn ich diese Zeilen auskommentiere, dann kommt wieder die -1751726592. Kannst du dir vortstellen, dass eine Config Option oder ein Compiler Flag sowas auslösen könnte?
Klar kann es sein, dass ein Fehler im Compiler ist, oder auch eine undefinierte Konstruktion im Quelltext.
Gibt es den gleichen Effekt auch mit printk?
Was ist, wenn alle drei Ausgaben zusammen (unten) stehen?
Insbesondere, was ist der Wert von logical_sb_block? Ich vermute, dass das die Block-Größe ist, während sb die Block-Nummer ist.
Gibt es noch andere Strukturen mit "dynamischer" Größe?
Mir ist jetzt keine andere solche Struktur bekannt, aber ich gehe davon aus, dass es noch viele andere Strukturen gibt, deren Layout von den verwendeten Optionen abhängig ist. Auf Anhieb fällt mit die Modul-Struktur ein, wo es das Problem gab, dass Kernel-Module nicht entladen werden konnte, weil deren Verwendung als "permanent" angezeigt wurde.
 
Code:
        /*
         * The ext4 superblock will not be buffer aligned for other than 1kB
         * block sizes.  We need to calculate the offset from buffer start.
         */
        if (blocksize != EXT4_MIN_BLOCK_SIZE) {
                logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
                offset = do_div(logical_sb_block, blocksize);
        } else {
                logical_sb_block = sb_block;
        }
        printk(KERN_INFO "blocksize %d", blocksize);
        printk(KERN_INFO "sb->s_blocksize %lu",(unsigned long)sb->s_blocksize);
        printk(KERN_INFO "sb_block %lu",(unsigned long)sb_block);
        printk(KERN_INFO "logical_sb_block %lu",(unsigned long)sb_block);
        if (!(bh = sb_bread(sb, logical_sb_block))) {
                printk(KERN_INFO "blocksize %d", blocksize);
                printk(KERN_INFO "sb->s_blocksize %lu",(unsgined long)sb->s_blocksize);
                printk(KERN_INFO "sb_block %lu",(unsigned long)sb_block);
                printk(KERN_INFO "logical_sb_block %lu",(unsigned long)sb_block);
                ext4_msg(sb, KERN_ERR, "unable to read superblock");
                goto out_fail;
        }
Code:
blocksize 1024
sb->s_blocksize 1024
sb_block 1
logical_sb_block 1
getblk(): invalid block size -1751726592 requested
logical block size: 512
Call Trace:
[<9441689c>] dump_stack+0x8/0x34
[<941abd74>] __getblk_slow+0xb8/0x1b8
[<941b1340>] __bread+0x14/0x3e4
[<c0ee8cc0>] ext4_fill_super+0x2a0/0x2a84 [ext4]
[<94187e54>] get_sb_bdev+0x130/0x1a8
[<c0ee66c8>] ext4_get_sb+0x2c/0x38 [ext4]
[<94186a94>] vfs_kern_mount+0x58/0xe4
[<94186b78>] do_kern_mount+0x48/0xfc
[<941a0318>] do_mount+0x260/0x2d4
[<941a0410>] sys_mount+0x84/0x154
[<9410ddc4>] stack_done+0x20/0x3c

inside
blocksize 1024
sb->s_blocksize 1024
sb_block 1
logical_sb_block 1
EXT4-fs (sda3): unable to read superblock
Gruß
Oliver

edit: http://lxr.free-electrons.com/source/fs/ext4/super.c?v=2.6.32#L2333
 
Zuletzt bearbeitet:
Das entscheidende Feld ist doch sb->s_blocksize. Die Definition der Struktur hängt ab von CONFIG_SECURITY, jedoch erst hinter s_blocksize. Außerdem ist sb_bread eine inline-Funktion, daher sollte sie auf jeden Fall die gleiche Definition verwenden. Sehr seltsam das Ganze.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.