aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2013-05-15 21:02:48 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2013-06-29 12:46:49 +0400
commit5ded75ec4c576577cae7d556e671d11d0c80c2fc (patch)
tree964c5d165f74933df96d6fa16f9bd866a7308727 /include
parent[readdir] switch dcache_readdir() users to ->iterate() (diff)
downloadlinux-dev-5ded75ec4c576577cae7d556e671d11d0c80c2fc.tar.xz
linux-dev-5ded75ec4c576577cae7d556e671d11d0c80c2fc.zip
[readdir] convert ext3
new helper: dir_relax(inode). Call when you are in location that will _not_ be invalidated by directory modifications (block boundary, in case of ext*). Returns whether the directory has survived (dropping i_mutex allows rmdir to kill the sucker; if it returns false to us, ->iterate() is obviously done) Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include')
-rw-r--r--include/linux/fs.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 40293a6ce804..aa9770c7e8df 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2725,5 +2725,11 @@ static inline bool dir_emit_dots(struct file *file, struct dir_context *ctx)
}
return true;
}
+static inline bool dir_relax(struct inode *inode)
+{
+ mutex_unlock(&inode->i_mutex);
+ mutex_lock(&inode->i_mutex);
+ return !IS_DEADDIR(inode);
+}
#endif /* _LINUX_FS_H */