mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
ovl: plumb through flush method
Filesystems can implement their own flush method that release resources, or manipulate caches. Currently if one of these filesystems is used with overlayfs, the flush method is not called. [Amir: fix fd leak in ovl_flush()] Signed-off-by: Sargun Dhillon <sargun@sargun.me> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
e49d033bdd
commit
1f0cb8bcc7
1 changed files with 21 additions and 0 deletions
|
@ -686,6 +686,26 @@ static loff_t ovl_remap_file_range(struct file *file_in, loff_t pos_in,
|
|||
remap_flags, op);
|
||||
}
|
||||
|
||||
static int ovl_flush(struct file *file, fl_owner_t id)
|
||||
{
|
||||
struct fd real;
|
||||
const struct cred *old_cred;
|
||||
int err;
|
||||
|
||||
err = ovl_real_fdget(file, &real);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (real.file->f_op->flush) {
|
||||
old_cred = ovl_override_creds(file_inode(file)->i_sb);
|
||||
err = real.file->f_op->flush(real.file, id);
|
||||
revert_creds(old_cred);
|
||||
}
|
||||
fdput(real);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
const struct file_operations ovl_file_operations = {
|
||||
.open = ovl_open,
|
||||
.release = ovl_release,
|
||||
|
@ -697,6 +717,7 @@ const struct file_operations ovl_file_operations = {
|
|||
.fallocate = ovl_fallocate,
|
||||
.fadvise = ovl_fadvise,
|
||||
.unlocked_ioctl = ovl_ioctl,
|
||||
.flush = ovl_flush,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = ovl_compat_ioctl,
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue