diff options
Diffstat (limited to 'fs/aufs/dbgaufs.c')
-rw-r--r-- | fs/aufs/dbgaufs.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/aufs/dbgaufs.c b/fs/aufs/dbgaufs.c index 21ac77398..f85a813a4 100644 --- a/fs/aufs/dbgaufs.c +++ b/fs/aufs/dbgaufs.c @@ -28,7 +28,7 @@ struct dbgaufs_arg { static int dbgaufs_xi_release(struct inode *inode __maybe_unused, struct file *file) { - kfree(file->private_data); + au_delayed_kfree(file->private_data); return 0; } @@ -90,7 +90,7 @@ struct dbgaufs_plink_arg { static int dbgaufs_plink_release(struct inode *inode __maybe_unused, struct file *file) { - free_page((unsigned long)file->private_data); + au_delayed_free_page((unsigned long)file->private_data); return 0; } @@ -154,7 +154,7 @@ static int dbgaufs_plink_open(struct inode *inode, struct file *file) goto out; /* success */ out_free: - free_page((unsigned long)p); + au_delayed_free_page((unsigned long)p); out: return err; } @@ -281,8 +281,11 @@ void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) br = au_sbr(sb, bindex); xi = &br->br_xino; AuDebugOn(xi->xi_dbgaufs); + /* debugfs acquires the parent i_mutex */ + lockdep_off(); xi->xi_dbgaufs = debugfs_create_file(name, dbgaufs_mode, parent, sbinfo, &dbgaufs_xino_fop); + lockdep_on(); /* ignore an error */ if (unlikely(!xi->xi_dbgaufs)) AuWarn1("failed %s under debugfs\n", name); |