Lines Matching full:real
95 static int ovl_real_fdget_meta(const struct file *file, struct fd *real, in ovl_real_fdget_meta() argument
102 real->flags = 0; in ovl_real_fdget_meta()
103 real->file = file->private_data; in ovl_real_fdget_meta()
119 if (unlikely(file_inode(real->file) != d_inode(realpath.dentry))) { in ovl_real_fdget_meta()
120 real->flags = FDPUT_FPUT; in ovl_real_fdget_meta()
121 real->file = ovl_open_realfile(file, &realpath); in ovl_real_fdget_meta()
123 return PTR_ERR_OR_ZERO(real->file); in ovl_real_fdget_meta()
127 if (unlikely((file->f_flags ^ real->file->f_flags) & ~OVL_OPEN_FLAGS)) in ovl_real_fdget_meta()
128 return ovl_change_flags(real->file, file->f_flags); in ovl_real_fdget_meta()
133 static int ovl_real_fdget(const struct file *file, struct fd *real) in ovl_real_fdget() argument
136 real->flags = 0; in ovl_real_fdget()
137 real->file = ovl_dir_real_file(file, false); in ovl_real_fdget()
139 return PTR_ERR_OR_ZERO(real->file); in ovl_real_fdget()
142 return ovl_real_fdget_meta(file, real, false); in ovl_real_fdget()
187 struct fd real; in ovl_llseek() local
192 * The two special cases below do not need to involve real fs, in ovl_llseek()
203 ret = ovl_real_fdget(file, &real); in ovl_llseek()
209 * through copy up and modified on read/write, but only real in ovl_llseek()
210 * fs knows how to SEEK_HOLE/SEEK_DATA and real fs may impose in ovl_llseek()
212 * files, so we use the real file to perform seeks. in ovl_llseek()
215 real.file->f_pos = file->f_pos; in ovl_llseek()
218 ret = vfs_llseek(real.file, offset, whence); in ovl_llseek()
221 file->f_pos = real.file->f_pos; in ovl_llseek()
224 fdput(real); in ovl_llseek()
266 struct fd real; in ovl_read_iter() local
277 ret = ovl_real_fdget(file, &real); in ovl_read_iter()
281 ret = backing_file_read_iter(real.file, iter, iocb, iocb->ki_flags, in ovl_read_iter()
283 fdput(real); in ovl_read_iter()
292 struct fd real; in ovl_write_iter() local
308 ret = ovl_real_fdget(file, &real); in ovl_write_iter()
320 ret = backing_file_write_iter(real.file, iter, iocb, ifl, &ctx); in ovl_write_iter()
321 fdput(real); in ovl_write_iter()
333 struct fd real; in ovl_splice_read() local
341 ret = ovl_real_fdget(in, &real); in ovl_splice_read()
345 ret = backing_file_splice_read(real.file, ppos, pipe, len, flags, &ctx); in ovl_splice_read()
346 fdput(real); in ovl_splice_read()
354 * and file_start_write(real.file) in ovl_write_iter().
357 * the real file.
362 struct fd real; in ovl_splice_write() local
375 ret = ovl_real_fdget(out, &real); in ovl_splice_write()
379 ret = backing_file_splice_write(pipe, real.file, ppos, len, flags, &ctx); in ovl_splice_write()
380 fdput(real); in ovl_splice_write()
390 struct fd real; in ovl_fsync() local
398 ret = ovl_real_fdget_meta(file, &real, !datasync); in ovl_fsync()
403 if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) { in ovl_fsync()
405 ret = vfs_fsync_range(real.file, start, end, datasync); in ovl_fsync()
409 fdput(real); in ovl_fsync()
429 struct fd real; in ovl_fallocate() local
440 ret = ovl_real_fdget(file, &real); in ovl_fallocate()
445 ret = vfs_fallocate(real.file, mode, offset, len); in ovl_fallocate()
451 fdput(real); in ovl_fallocate()
461 struct fd real; in ovl_fadvise() local
465 ret = ovl_real_fdget(file, &real); in ovl_fadvise()
470 ret = vfs_fadvise(real.file, offset, len, advice); in ovl_fadvise()
473 fdput(real); in ovl_fadvise()
581 struct fd real; in ovl_flush() local
585 err = ovl_real_fdget(file, &real); in ovl_flush()
589 if (real.file->f_op->flush) { in ovl_flush()
591 err = real.file->f_op->flush(real.file, id); in ovl_flush()
594 fdput(real); in ovl_flush()