summaryrefslogtreecommitdiff
path: root/fs/aufs/dir.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/aufs/dir.h')
-rw-r--r--fs/aufs/dir.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/aufs/dir.h b/fs/aufs/dir.h
index b0a79d722..4f3945ab8 100644
--- a/fs/aufs/dir.h
+++ b/fs/aufs/dir.h
@@ -29,7 +29,10 @@ struct au_vdir_destr {
struct au_vdir_dehstr {
struct hlist_node hash;
- struct au_vdir_destr *str;
+ union {
+ struct au_vdir_destr *str;
+ struct llist_node lnode; /* delayed free */
+ };
} ____cacheline_aligned_in_smp;
struct au_vdir_de {
@@ -67,7 +70,10 @@ struct au_vdir {
unsigned long vd_version;
unsigned int vd_deblk_sz;
- unsigned long vd_jiffy;
+ union {
+ unsigned long vd_jiffy;
+ struct llist_node vd_lnode; /* delayed free */
+ };
} ____cacheline_aligned_in_smp;
/* ---------------------------------------------------------------------- */
@@ -91,7 +97,7 @@ int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen);
int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino,
unsigned int d_type, aufs_bindex_t bindex,
unsigned char shwh);
-void au_vdir_free(struct au_vdir *vdir);
+void au_vdir_free(struct au_vdir *vdir, int atonce);
int au_vdir_init(struct file *file);
int au_vdir_fill_de(struct file *file, struct dir_context *ctx);