> static void > cifs_put_super(struct super_block *sb) > { > + struct cifs_sb_info *cifs_sb = CIFS_SB(sb); > + if (cifs_sb == NULL) { > + cFYI(1, "Empty cifs superblock info passed to put_super"); > + return; > + } > + > + bdi_destroy(&cifs_sb->bdi); This means you have a problem with the lifetime rules in cifs_do_mount. The VFS only calls ->put_super if sb->s_root is set. So the rules for the mount handler are to only set s_root once the superblock is fully set up. Also you should never call cifs_umount from the error handling in cifs_do_mount. Until s_root is set, please unwind manually, after that leave it to ->put_super. > + > +static void > +cifs_kill_super(struct super_block *sb) > +{ This also seems quite broken. If you fix up the mount path like I suggested it won't be nessecary. > int rc = 0; > struct cifs_sb_info *cifs_sb; > > cFYI(1, "In cifs_put_super"); > cifs_sb = CIFS_SB(sb); > if (cifs_sb == NULL) { And this check should also be removed. -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html