Cc address is switched from linux-fsdevel ML to aufs-users. Prasad Koya: > <1>[45257161.254682] BUG: unable to handle kernel NULL pointer > dereference at 0000000000000038 > <1>[45257161.351193] IP: [<ffffffff8117a5dc>] au_do_open_nondir+0x3b/0xaf ::: > 43 finfo = au_fi(file); > 44 memset(&finfo->fi_htop, 0, sizeof(finfo->fi_htop)); > 45 atomic_set(&finfo->fi_mmapped, 0); > 46 bindex = au_dbstart(dentry); > 47 h_file = au_h_open(dentry, bindex, flags, file); > 48 if (IS_ERR(h_file)) > 49 err = PTR_ERR(h_file); > 50 else { > 51 au_set_fbstart(file, bindex); <======== > crash in this macro ::: > 185 static inline void au_set_fbstart(struct file *file, aufs_bindex_t > bindex) > 186 { > 187 FiMustWriteLock(file); > 188 au_fi(file)->fi_btop = bindex; > 189 } > 190 ::: > au_set_fbstart(file, bindex); > au_set_h_fptr(file, bindex, h_file); > ffffffff8117a5d6: 44 89 e6 mov %r12d,%esi > ffffffff8117a5d9: 48 89 df mov %rbx,%rdi > ffffffff8117a5dc: 44 88 68 38 mov > %r13b,0x38(%rax) <============ crash point
Looking at your first report again, I've noticed somthing strange. If this crash had really happened in au_set_fbstart(), then it means au_fi(file) returned NULL. But, as you can see, au_do_open_nondir() calls au_fi(file) earlier in line 43, and line 44 succeeded memset(&finfo->fi_htop, ...). As you know, au_fi(file) just returns struct file.private_data, and it should never be NULL after being set during open. That is really really strange. I don't think someone else accidentally set NULL to struct file.private_data. If it happens, then it means your kernel is totally broken. So I'd suggest you to confirm these two things as another first step. - review your disassemble listing with the symbol table, since it looks strange and your gdb produced > (gdb) list *(au_do_open_nondir+0x3b) > 0xffffffff8117a5dc is in au_do_open_nondir > (/bld/kernel/rpmbuild/linux-3.4/fs/aufs/file.h:188). > warning: Source file is more recent than executable. - check the offset of fi_btop in struct au_finfo. The disassemble listing said it is 0x38. It might be correct, but I'd like to suggest you to confirm it. It is easy. Just put pr_info("fi_generation %lu\n", offsetof(struct au_finfo, fi_generation)); pr_info("fi_rwsem %lu\n", offsetof(struct au_finfo, fi_rwsem)); pr_info("fi_btop %lu\n", offsetof(struct au_finfo, fi_btop)); pr_info("fi_htop %lu\n", offsetof(struct au_finfo, fi_htop)); in your aufs_open_nondir() or somewhere else. J. R. Okajima ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot