@@ -434,11 +434,20 @@ static void ovl_evict_inode(struct inode *inode)
clear_inode(inode);
}
+static int ovl_drop_inode(struct inode *inode)
+{
+ struct inode *upper = ovl_inode_upper(inode);
+
+ if (!upper || !(inode->i_state & I_DIRTY_ALL))
+ return 1;
+ return generic_drop_inode(inode);
+}
+
static const struct super_operations ovl_super_operations = {
.alloc_inode = ovl_alloc_inode,
.free_inode = ovl_free_inode,
.destroy_inode = ovl_destroy_inode,
- .drop_inode = generic_delete_inode,
+ .drop_inode = ovl_drop_inode,
.evict_inode = ovl_evict_inode,
.write_inode = ovl_write_inode,
.put_super = ovl_put_super,
Now drop overlayfs' inode will sync dirty data, so we change to only drop clean inode. Signed-off-by: Chengguang Xu <cgxu519@mykernel.net> --- fs/overlayfs/super.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)