Skip to content

Commit

Permalink
ovl: plumb through flush method
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Sargun Dhillon authored and Miklos Szeredi committed Apr 12, 2021
1 parent e49d033 commit 1f0cb8b
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions fs/overlayfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down

0 comments on commit 1f0cb8b

Please sign in to comment.