void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line)
{
	struct inode *h_inode, *inode = dentry->d_inode;
	struct dentry *h_dentry;
	aufs_bindex_t bindex, bend, bi;

	if (!inode /* || au_di(dentry)->di_lsc == AuLsc_DI_TMP */)
		return;

	bend = au_dbend(dentry);
	bi = au_ibend(inode);
	if (bi < bend)
		bend = bi;
	bindex = au_dbstart(dentry);
	bi = au_ibstart(inode);
	if (bi > bindex)
		bindex = bi;

	for (; bindex <= bend; bindex++) {
		h_dentry = au_h_dptr(dentry, bindex);
		if (!h_dentry)
			continue;
		h_inode = au_h_iptr(inode, bindex);
		if (unlikely(h_inode != h_dentry->d_inode)) {
			au_debug_on();
			AuDbg("b%d, %s:%d\n", bindex, func, line);
			AuDbgDentry(dentry);
			AuDbgInode(inode);
			au_debug_off();
			BUG();
		}
	}
}
Beispiel #2
0
static void sysrq_sb(struct super_block *sb)
{
	char *plevel;
	struct inode *i;
	struct au_sbinfo *sbinfo;
	struct file *file;

	plevel = au_plevel;
	au_plevel = KERN_WARNING;
	au_debug_on();

	sbinfo = au_sbi(sb);
	pr_warning("si=%lx\n", au_si_mask ^ (unsigned long)sbinfo);
	pr_warning(AUFS_NAME ": superblock\n");
	au_dpri_sb(sb);
	pr_warning(AUFS_NAME ": root dentry\n");
	au_dpri_dentry(sb->s_root);
	pr_warning(AUFS_NAME ": root inode\n");
	au_dpri_inode(sb->s_root->d_inode);
	pr_warning(AUFS_NAME ": isolated inode\n");
	list_for_each_entry(i, &sb->s_inodes, i_sb_list)
		if (list_empty(&i->i_dentry))
			au_dpri_inode(i);
	pr_warning(AUFS_NAME ": files\n");
	list_for_each_entry(file, &sb->s_files, f_u.fu_list)
		if (au_test_aufs_file(file))
			au_dpri_file(file);

#ifdef CONFIG_AUFS_DEBUG_LOCK
	{
		struct au_dbg_lock *p;
		struct list_head *head;

		pr_warning(AUFS_NAME ": locking si\n");
		head = &sbinfo->si_dbg_lock[AuDbgLock_SI_LOCKING].head;
		list_for_each_entry(p, head, list)
			pr_warning("pid: %d, 0x%x\n", p->pid, p->flags);
		pr_warning(AUFS_NAME ": locked si\n");
		head = &sbinfo->si_dbg_lock[AuDbgLock_SI_LOCKED].head;
		list_for_each_entry(p, head, list)
			pr_warning("pid: %d, 0x%x\n", p->pid, p->flags);
		pr_warning(AUFS_NAME ": locking di\n");
		head = &sbinfo->si_dbg_lock[AuDbgLock_DI_LOCKING].head;
		list_for_each_entry(p, head, list) {
			pr_warning("pid: %d, 0x%x, %d\n",
				   p->pid, p->flags, p->lsc);
			au_dpri_dentry(p->dentry);
		}
		pr_warning(AUFS_NAME ": locked di\n");
		head = &sbinfo->si_dbg_lock[AuDbgLock_DI_LOCKED].head;
		list_for_each_entry(p, head, list) {
			pr_warning("pid: %d, 0x%x, %d\n",
				   p->pid, p->flags, p->lsc);
			au_dpri_dentry(p->dentry);
		}
/* Returns 0, or -errno.  arg is in kp->arg. */
static int param_atomic_t_set(const char *val, const struct kernel_param *kp)
{
	int err, n;

	err = kstrtoint(val, 0, &n);
	if (!err) {
		if (n > 0)
			au_debug_on();
		else
			au_debug_off();
	}
	return err;
}