Ejemplo n.º 1
0
/* make sure the file is idle */
static int au_mvd_args_busy(const unsigned char dmsg, struct au_mvd_args *a)
{
    int err, plinked;

    err = 0;
    plinked = !!au_opt_test(au_mntflags(a->sb), PLINK);
    if (au_dbstart(a->dentry) == a->mvd_bsrc
            && au_dcount(a->dentry) == 1
            && atomic_read(&a->inode->i_count) == 1
            /* && a->mvd_h_src_inode->i_nlink == 1 */
            && (!plinked || !au_plink_test(a->inode))
            && a->inode->i_nlink == 1)
        goto out;

    err = -EBUSY;
    AU_MVD_PR(dmsg,
              "b%d, d{b%d, c%d?}, i{c%d?, l%u}, hi{l%u}, p{%d, %d}\n",
              a->mvd_bsrc, au_dbstart(a->dentry), au_dcount(a->dentry),
              atomic_read(&a->inode->i_count), a->inode->i_nlink,
              a->mvd_h_src_inode->i_nlink,
              plinked, plinked ? au_plink_test(a->inode) : 0);

out:
    AuTraceErr(err);
    return err;
}
Ejemplo n.º 2
0
struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex)
{
	struct dentry *d;

	DiMustAnyLock(dentry);

	if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry))
		return NULL;
	AuDebugOn(bindex < 0);
	d = au_di(dentry)->di_hdentry[0 + bindex].hd_dentry;
	AuDebugOn(d && au_dcount(d) <= 0);
	return d;
}