int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) { int err; struct au_cpdown_dir_args args = { .parent = dget_parent(dentry), .flags = 0 }; err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &args); dput(args.parent); return err; } /* ---------------------------------------------------------------------- */ /* policies for create */ static int au_wbr_nonopq(struct dentry *dentry, aufs_bindex_t bindex) { int err, i, j, ndentry; aufs_bindex_t bopq; struct au_dcsub_pages dpages; struct au_dpage *dpage; struct dentry **dentries, *parent, *d; err = au_dpages_init(&dpages, GFP_NOFS); if (unlikely(err)) goto out; parent = dget_parent(dentry); err = au_dcsub_pages_rev(&dpages, parent, /*do_include*/0, /*test*/NULL, /*arg*/NULL); if (unlikely(err)) goto out_free; err = bindex; for (i = 0; i < dpages.ndpage; i++) { dpage = dpages.dpages + i; dentries = dpage->dentries; ndentry = dpage->ndentry; for (j = 0; j < ndentry; j++) { d = dentries[j]; di_read_lock_parent2(d, !AuLock_IR); bopq = au_dbdiropq(d); di_read_unlock(d, !AuLock_IR); if (bopq >= 0 && bopq < err) err = bopq; } } out_free: dput(parent); au_dpages_free(&dpages); out: return err; }
int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) { int err; unsigned int flags; flags = 0; err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &flags); return err; }