static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry) { int err; struct dentry *ret = NULL; LIST_HEAD(list); err = ovl_check_empty_dir(dentry, &list); if (err) ret = ERR_PTR(err); else { /* * If no upperdentry then skip clearing whiteouts. * * Can race with copy-up, since we don't hold the upperdir * mutex. Doesn't matter, since copy-up can't create a * non-empty directory from an empty one. */ if (ovl_dentry_upper(dentry)) ret = ovl_clear_empty(dentry, &list); } ovl_cache_free(&list); return ret; }
static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry) { int err; struct dentry *ret = NULL; enum ovl_path_type type = ovl_path_type(dentry); LIST_HEAD(list); err = ovl_check_empty_dir(dentry, &list); if (err) { ret = ERR_PTR(err); goto out_free; } /* * When removing an empty opaque directory, then it makes no sense to * replace it with an exact replica of itself. * * If no upperdentry then skip clearing whiteouts. * * Can race with copy-up, since we don't hold the upperdir mutex. * Doesn't matter, since copy-up can't create a non-empty directory * from an empty one. */ if (OVL_TYPE_UPPER(type) && OVL_TYPE_MERGE(type)) ret = ovl_clear_empty(dentry, &list); out_free: ovl_cache_free(&list); return ret; }
static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry, enum ovl_path_type type) { int err; struct dentry *ret = NULL; LIST_HEAD(list); err = ovl_check_empty_dir(dentry, &list); if (err) ret = ERR_PTR(err); else if (type == OVL_PATH_MERGE) ret = ovl_clear_empty(dentry, &list); ovl_cache_free(&list); return ret; }