|
@@ -355,7 +355,7 @@ try_again:
|
|
|
return -EIO;
|
|
|
}
|
|
|
|
|
|
- if (grave->d_inode) {
|
|
|
+ if (d_is_positive(grave)) {
|
|
|
unlock_rename(cache->graveyard, dir);
|
|
|
dput(grave);
|
|
|
grave = NULL;
|
|
@@ -415,7 +415,7 @@ int cachefiles_delete_object(struct cachefiles_cache *cache,
|
|
|
_enter(",OBJ%x{%p}", object->fscache.debug_id, object->dentry);
|
|
|
|
|
|
ASSERT(object->dentry);
|
|
|
- ASSERT(object->dentry->d_inode);
|
|
|
+ ASSERT(d_backing_inode(object->dentry));
|
|
|
ASSERT(object->dentry->d_parent);
|
|
|
|
|
|
dir = dget_parent(object->dentry);
|
|
@@ -473,7 +473,7 @@ int cachefiles_walk_to_object(struct cachefiles_object *parent,
|
|
|
path.mnt = cache->mnt;
|
|
|
|
|
|
ASSERT(parent->dentry);
|
|
|
- ASSERT(parent->dentry->d_inode);
|
|
|
+ ASSERT(d_backing_inode(parent->dentry));
|
|
|
|
|
|
if (!(d_is_dir(parent->dentry))) {
|
|
|
// TODO: convert file to dir
|
|
@@ -505,21 +505,21 @@ lookup_again:
|
|
|
if (IS_ERR(next))
|
|
|
goto lookup_error;
|
|
|
|
|
|
- _debug("next -> %p %s", next, next->d_inode ? "positive" : "negative");
|
|
|
+ _debug("next -> %p %s", next, d_backing_inode(next) ? "positive" : "negative");
|
|
|
|
|
|
if (!key)
|
|
|
- object->new = !next->d_inode;
|
|
|
+ object->new = !d_backing_inode(next);
|
|
|
|
|
|
/* if this element of the path doesn't exist, then the lookup phase
|
|
|
* failed, and we can release any readers in the certain knowledge that
|
|
|
* there's nothing for them to actually read */
|
|
|
- if (!next->d_inode)
|
|
|
+ if (d_is_negative(next))
|
|
|
fscache_object_lookup_negative(&object->fscache);
|
|
|
|
|
|
/* we need to create the object if it's negative */
|
|
|
if (key || object->type == FSCACHE_COOKIE_TYPE_INDEX) {
|
|
|
/* index objects and intervening tree levels must be subdirs */
|
|
|
- if (!next->d_inode) {
|
|
|
+ if (d_is_negative(next)) {
|
|
|
ret = cachefiles_has_space(cache, 1, 0);
|
|
|
if (ret < 0)
|
|
|
goto create_error;
|
|
@@ -534,21 +534,21 @@ lookup_again:
|
|
|
if (ret < 0)
|
|
|
goto create_error;
|
|
|
|
|
|
- ASSERT(next->d_inode);
|
|
|
+ ASSERT(d_backing_inode(next));
|
|
|
|
|
|
_debug("mkdir -> %p{%p{ino=%lu}}",
|
|
|
- next, next->d_inode, next->d_inode->i_ino);
|
|
|
+ next, d_backing_inode(next), d_backing_inode(next)->i_ino);
|
|
|
|
|
|
} else if (!d_can_lookup(next)) {
|
|
|
pr_err("inode %lu is not a directory\n",
|
|
|
- next->d_inode->i_ino);
|
|
|
+ d_backing_inode(next)->i_ino);
|
|
|
ret = -ENOBUFS;
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
/* non-index objects start out life as files */
|
|
|
- if (!next->d_inode) {
|
|
|
+ if (d_is_negative(next)) {
|
|
|
ret = cachefiles_has_space(cache, 1, 0);
|
|
|
if (ret < 0)
|
|
|
goto create_error;
|
|
@@ -563,16 +563,16 @@ lookup_again:
|
|
|
if (ret < 0)
|
|
|
goto create_error;
|
|
|
|
|
|
- ASSERT(next->d_inode);
|
|
|
+ ASSERT(d_backing_inode(next));
|
|
|
|
|
|
_debug("create -> %p{%p{ino=%lu}}",
|
|
|
- next, next->d_inode, next->d_inode->i_ino);
|
|
|
+ next, d_backing_inode(next), d_backing_inode(next)->i_ino);
|
|
|
|
|
|
} else if (!d_can_lookup(next) &&
|
|
|
!d_is_reg(next)
|
|
|
) {
|
|
|
pr_err("inode %lu is not a file or directory\n",
|
|
|
- next->d_inode->i_ino);
|
|
|
+ d_backing_inode(next)->i_ino);
|
|
|
ret = -ENOBUFS;
|
|
|
goto error;
|
|
|
}
|
|
@@ -646,7 +646,7 @@ lookup_again:
|
|
|
const struct address_space_operations *aops;
|
|
|
|
|
|
ret = -EPERM;
|
|
|
- aops = object->dentry->d_inode->i_mapping->a_ops;
|
|
|
+ aops = d_backing_inode(object->dentry)->i_mapping->a_ops;
|
|
|
if (!aops->bmap)
|
|
|
goto check_error;
|
|
|
|
|
@@ -659,7 +659,7 @@ lookup_again:
|
|
|
object->new = 0;
|
|
|
fscache_obtained_object(&object->fscache);
|
|
|
|
|
|
- _leave(" = 0 [%lu]", object->dentry->d_inode->i_ino);
|
|
|
+ _leave(" = 0 [%lu]", d_backing_inode(object->dentry)->i_ino);
|
|
|
return 0;
|
|
|
|
|
|
create_error:
|
|
@@ -731,10 +731,10 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
|
|
}
|
|
|
|
|
|
_debug("subdir -> %p %s",
|
|
|
- subdir, subdir->d_inode ? "positive" : "negative");
|
|
|
+ subdir, d_backing_inode(subdir) ? "positive" : "negative");
|
|
|
|
|
|
/* we need to create the subdir if it doesn't exist yet */
|
|
|
- if (!subdir->d_inode) {
|
|
|
+ if (d_is_negative(subdir)) {
|
|
|
ret = cachefiles_has_space(cache, 1, 0);
|
|
|
if (ret < 0)
|
|
|
goto mkdir_error;
|
|
@@ -750,18 +750,18 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
|
|
if (ret < 0)
|
|
|
goto mkdir_error;
|
|
|
|
|
|
- ASSERT(subdir->d_inode);
|
|
|
+ ASSERT(d_backing_inode(subdir));
|
|
|
|
|
|
_debug("mkdir -> %p{%p{ino=%lu}}",
|
|
|
subdir,
|
|
|
- subdir->d_inode,
|
|
|
- subdir->d_inode->i_ino);
|
|
|
+ d_backing_inode(subdir),
|
|
|
+ d_backing_inode(subdir)->i_ino);
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&d_inode(dir)->i_mutex);
|
|
|
|
|
|
/* we need to make sure the subdir is a directory */
|
|
|
- ASSERT(subdir->d_inode);
|
|
|
+ ASSERT(d_backing_inode(subdir));
|
|
|
|
|
|
if (!d_can_lookup(subdir)) {
|
|
|
pr_err("%s is not a directory\n", dirname);
|
|
@@ -770,18 +770,18 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
|
|
}
|
|
|
|
|
|
ret = -EPERM;
|
|
|
- if (!subdir->d_inode->i_op->setxattr ||
|
|
|
- !subdir->d_inode->i_op->getxattr ||
|
|
|
- !subdir->d_inode->i_op->lookup ||
|
|
|
- !subdir->d_inode->i_op->mkdir ||
|
|
|
- !subdir->d_inode->i_op->create ||
|
|
|
- (!subdir->d_inode->i_op->rename &&
|
|
|
- !subdir->d_inode->i_op->rename2) ||
|
|
|
- !subdir->d_inode->i_op->rmdir ||
|
|
|
- !subdir->d_inode->i_op->unlink)
|
|
|
+ if (!d_backing_inode(subdir)->i_op->setxattr ||
|
|
|
+ !d_backing_inode(subdir)->i_op->getxattr ||
|
|
|
+ !d_backing_inode(subdir)->i_op->lookup ||
|
|
|
+ !d_backing_inode(subdir)->i_op->mkdir ||
|
|
|
+ !d_backing_inode(subdir)->i_op->create ||
|
|
|
+ (!d_backing_inode(subdir)->i_op->rename &&
|
|
|
+ !d_backing_inode(subdir)->i_op->rename2) ||
|
|
|
+ !d_backing_inode(subdir)->i_op->rmdir ||
|
|
|
+ !d_backing_inode(subdir)->i_op->unlink)
|
|
|
goto check_error;
|
|
|
|
|
|
- _leave(" = [%lu]", subdir->d_inode->i_ino);
|
|
|
+ _leave(" = [%lu]", d_backing_inode(subdir)->i_ino);
|
|
|
return subdir;
|
|
|
|
|
|
check_error:
|
|
@@ -836,12 +836,12 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
|
|
goto lookup_error;
|
|
|
|
|
|
//_debug("victim -> %p %s",
|
|
|
- // victim, victim->d_inode ? "positive" : "negative");
|
|
|
+ // victim, d_backing_inode(victim) ? "positive" : "negative");
|
|
|
|
|
|
/* if the object is no longer there then we probably retired the object
|
|
|
* at the netfs's request whilst the cull was in progress
|
|
|
*/
|
|
|
- if (!victim->d_inode) {
|
|
|
+ if (d_is_negative(victim)) {
|
|
|
mutex_unlock(&d_inode(dir)->i_mutex);
|
|
|
dput(victim);
|
|
|
_leave(" = -ENOENT [absent]");
|
|
@@ -913,7 +913,7 @@ int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir,
|
|
|
return PTR_ERR(victim);
|
|
|
|
|
|
_debug("victim -> %p %s",
|
|
|
- victim, victim->d_inode ? "positive" : "negative");
|
|
|
+ victim, d_backing_inode(victim) ? "positive" : "negative");
|
|
|
|
|
|
/* okay... the victim is not being used so we can cull it
|
|
|
* - start by marking it as stale
|