wrappers for ->i_mutex access
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested}, inode_foo(inode) being mutex_foo(&inode->i_mutex). Please, use those for access to ->i_mutex; over the coming cycle ->i_mutex will become rwsem, with ->lookup() done with it held only shared. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -446,7 +446,7 @@ static int cachefiles_attr_changed(struct fscache_object *_object)
|
||||
return 0;
|
||||
|
||||
cachefiles_begin_secure(cache, &saved_cred);
|
||||
mutex_lock(&d_inode(object->backer)->i_mutex);
|
||||
inode_lock(d_inode(object->backer));
|
||||
|
||||
/* if there's an extension to a partial page at the end of the backing
|
||||
* file, we need to discard the partial page so that we pick up new
|
||||
@@ -465,7 +465,7 @@ static int cachefiles_attr_changed(struct fscache_object *_object)
|
||||
ret = notify_change(object->backer, &newattrs, NULL);
|
||||
|
||||
truncate_failed:
|
||||
mutex_unlock(&d_inode(object->backer)->i_mutex);
|
||||
inode_unlock(d_inode(object->backer));
|
||||
cachefiles_end_secure(cache, saved_cred);
|
||||
|
||||
if (ret == -EIO) {
|
||||
|
@@ -295,7 +295,7 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache,
|
||||
cachefiles_mark_object_buried(cache, rep, why);
|
||||
}
|
||||
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
|
||||
if (ret == -EIO)
|
||||
cachefiles_io_error(cache, "Unlink failed");
|
||||
@@ -306,7 +306,7 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache,
|
||||
|
||||
/* directories have to be moved to the graveyard */
|
||||
_debug("move stale object to graveyard");
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
|
||||
try_again:
|
||||
/* first step is to make up a grave dentry in the graveyard */
|
||||
@@ -423,13 +423,13 @@ int cachefiles_delete_object(struct cachefiles_cache *cache,
|
||||
|
||||
dir = dget_parent(object->dentry);
|
||||
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
|
||||
|
||||
if (test_bit(FSCACHE_OBJECT_KILLED_BY_CACHE, &object->fscache.flags)) {
|
||||
/* object allocation for the same key preemptively deleted this
|
||||
* object's file so that it could create its own file */
|
||||
_debug("object preemptively buried");
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
ret = 0;
|
||||
} else {
|
||||
/* we need to check that our parent is _still_ our parent - it
|
||||
@@ -442,7 +442,7 @@ int cachefiles_delete_object(struct cachefiles_cache *cache,
|
||||
/* it got moved, presumably by cachefilesd culling it,
|
||||
* so it's no longer in the key path and we can ignore
|
||||
* it */
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
@@ -501,7 +501,7 @@ lookup_again:
|
||||
/* search the current directory for the element name */
|
||||
_debug("lookup '%s'", name);
|
||||
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
|
||||
|
||||
start = jiffies;
|
||||
next = lookup_one_len(name, dir, nlen);
|
||||
@@ -585,7 +585,7 @@ lookup_again:
|
||||
/* process the next component */
|
||||
if (key) {
|
||||
_debug("advance");
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(dir);
|
||||
dir = next;
|
||||
next = NULL;
|
||||
@@ -623,7 +623,7 @@ lookup_again:
|
||||
/* note that we're now using this object */
|
||||
ret = cachefiles_mark_object_active(cache, object);
|
||||
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(dir);
|
||||
dir = NULL;
|
||||
|
||||
@@ -705,7 +705,7 @@ lookup_error:
|
||||
cachefiles_io_error(cache, "Lookup failed");
|
||||
next = NULL;
|
||||
error:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(next);
|
||||
error_out2:
|
||||
dput(dir);
|
||||
@@ -729,7 +729,7 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
_enter(",,%s", dirname);
|
||||
|
||||
/* search the current directory for the element name */
|
||||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
inode_lock(d_inode(dir));
|
||||
|
||||
start = jiffies;
|
||||
subdir = lookup_one_len(dirname, dir, strlen(dirname));
|
||||
@@ -768,7 +768,7 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
d_backing_inode(subdir)->i_ino);
|
||||
}
|
||||
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
|
||||
/* we need to make sure the subdir is a directory */
|
||||
ASSERT(d_backing_inode(subdir));
|
||||
@@ -800,19 +800,19 @@ check_error:
|
||||
return ERR_PTR(ret);
|
||||
|
||||
mkdir_error:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(subdir);
|
||||
pr_err("mkdir %s failed with error %d\n", dirname, ret);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
lookup_error:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
ret = PTR_ERR(subdir);
|
||||
pr_err("Lookup %s failed with error %d\n", dirname, ret);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
nomem_d_alloc:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
_leave(" = -ENOMEM");
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
@@ -837,7 +837,7 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
// dir, filename);
|
||||
|
||||
/* look up the victim */
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
inode_lock_nested(d_inode(dir), I_MUTEX_PARENT);
|
||||
|
||||
start = jiffies;
|
||||
victim = lookup_one_len(filename, dir, strlen(filename));
|
||||
@@ -852,7 +852,7 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
* at the netfs's request whilst the cull was in progress
|
||||
*/
|
||||
if (d_is_negative(victim)) {
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(victim);
|
||||
_leave(" = -ENOENT [absent]");
|
||||
return ERR_PTR(-ENOENT);
|
||||
@@ -881,13 +881,13 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
|
||||
object_in_use:
|
||||
read_unlock(&cache->active_lock);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(victim);
|
||||
//_leave(" = -EBUSY [in use]");
|
||||
return ERR_PTR(-EBUSY);
|
||||
|
||||
lookup_error:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
ret = PTR_ERR(victim);
|
||||
if (ret == -ENOENT) {
|
||||
/* file or dir now absent - probably retired by netfs */
|
||||
@@ -947,7 +947,7 @@ int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir,
|
||||
return 0;
|
||||
|
||||
error_unlock:
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
error:
|
||||
dput(victim);
|
||||
if (ret == -ENOENT) {
|
||||
@@ -982,7 +982,7 @@ int cachefiles_check_in_use(struct cachefiles_cache *cache, struct dentry *dir,
|
||||
if (IS_ERR(victim))
|
||||
return PTR_ERR(victim);
|
||||
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
inode_unlock(d_inode(dir));
|
||||
dput(victim);
|
||||
//_leave(" = 0");
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user