Lines Matching full:real
111 static int ovl_real_fdget_meta(const struct file *file, struct fd *real, in ovl_real_fdget_meta() argument
117 real->flags = 0; in ovl_real_fdget_meta()
118 real->file = file->private_data; in ovl_real_fdget_meta()
126 if (unlikely(file_inode(real->file) != realinode)) { in ovl_real_fdget_meta()
127 real->flags = FDPUT_FPUT; in ovl_real_fdget_meta()
128 real->file = ovl_open_realfile(file, realinode); in ovl_real_fdget_meta()
130 return PTR_ERR_OR_ZERO(real->file); in ovl_real_fdget_meta()
134 if (unlikely((file->f_flags ^ real->file->f_flags) & ~OVL_OPEN_FLAGS)) in ovl_real_fdget_meta()
135 return ovl_change_flags(real->file, file->f_flags); in ovl_real_fdget_meta()
140 static int ovl_real_fdget(const struct file *file, struct fd *real) in ovl_real_fdget() argument
143 real->flags = 0; in ovl_real_fdget()
144 real->file = ovl_dir_real_file(file, false); in ovl_real_fdget()
146 return PTR_ERR_OR_ZERO(real->file); in ovl_real_fdget()
149 return ovl_real_fdget_meta(file, real, false); in ovl_real_fdget()
183 struct fd real; in ovl_llseek() local
188 * The two special cases below do not need to involve real fs, in ovl_llseek()
199 ret = ovl_real_fdget(file, &real); in ovl_llseek()
205 * through copy up and modified on read/write, but only real in ovl_llseek()
206 * fs knows how to SEEK_HOLE/SEEK_DATA and real fs may impose in ovl_llseek()
208 * files, so we use the real file to perform seeks. in ovl_llseek()
211 real.file->f_pos = file->f_pos; in ovl_llseek()
214 ret = vfs_llseek(real.file, offset, whence); in ovl_llseek()
217 file->f_pos = real.file->f_pos; in ovl_llseek()
220 fdput(real); in ovl_llseek()
287 struct fd real; in ovl_read_iter() local
294 ret = ovl_real_fdget(file, &real); in ovl_read_iter()
300 (!real.file->f_mapping->a_ops || in ovl_read_iter()
301 !real.file->f_mapping->a_ops->direct_IO)) in ovl_read_iter()
306 ret = vfs_iter_read(real.file, iter, &iocb->ki_pos, in ovl_read_iter()
317 aio_req->fd = real; in ovl_read_iter()
318 real.flags = 0; in ovl_read_iter()
320 kiocb_clone(&aio_req->iocb, iocb, real.file); in ovl_read_iter()
323 ret = vfs_iocb_iter_read(real.file, &aio_req->iocb, iter); in ovl_read_iter()
333 fdput(real); in ovl_read_iter()
342 struct fd real; in ovl_write_iter() local
357 ret = ovl_real_fdget(file, &real); in ovl_write_iter()
363 (!real.file->f_mapping->a_ops || in ovl_write_iter()
364 !real.file->f_mapping->a_ops->direct_IO)) in ovl_write_iter()
372 file_start_write(real.file); in ovl_write_iter()
373 ret = vfs_iter_write(real.file, iter, &iocb->ki_pos, in ovl_write_iter()
375 file_end_write(real.file); in ovl_write_iter()
386 file_start_write(real.file); in ovl_write_iter()
388 __sb_writers_release(file_inode(real.file)->i_sb, in ovl_write_iter()
390 aio_req->fd = real; in ovl_write_iter()
391 real.flags = 0; in ovl_write_iter()
393 kiocb_clone(&aio_req->iocb, iocb, real.file); in ovl_write_iter()
397 ret = vfs_iocb_iter_write(real.file, &aio_req->iocb, iter); in ovl_write_iter()
405 fdput(real); in ovl_write_iter()
416 * and file_start_write(real.file) in ovl_write_iter().
419 * the real file.
424 struct fd real; in ovl_splice_write() local
437 ret = ovl_real_fdget(out, &real); in ovl_splice_write()
442 file_start_write(real.file); in ovl_splice_write()
444 ret = iter_file_splice_write(pipe, real.file, ppos, len, flags); in ovl_splice_write()
446 file_end_write(real.file); in ovl_splice_write()
450 fdput(real); in ovl_splice_write()
460 struct fd real; in ovl_fsync() local
468 ret = ovl_real_fdget_meta(file, &real, !datasync); in ovl_fsync()
473 if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) { in ovl_fsync()
475 ret = vfs_fsync_range(real.file, start, end, datasync); in ovl_fsync()
479 fdput(real); in ovl_fsync()
518 struct fd real; in ovl_fallocate() local
522 ret = ovl_real_fdget(file, &real); in ovl_fallocate()
527 ret = vfs_fallocate(real.file, mode, offset, len); in ovl_fallocate()
533 fdput(real); in ovl_fallocate()
540 struct fd real; in ovl_fadvise() local
544 ret = ovl_real_fdget(file, &real); in ovl_fadvise()
549 ret = vfs_fadvise(real.file, offset, len, advice); in ovl_fadvise()
552 fdput(real); in ovl_fadvise()
560 struct fd real; in ovl_real_ioctl() local
563 ret = ovl_real_fdget(file, &real); in ovl_real_ioctl()
567 ret = security_file_ioctl(real.file, cmd, arg); in ovl_real_ioctl()
573 ret = vfs_ioctl(real.file, cmd, arg); in ovl_real_ioctl()
576 fdput(real); in ovl_real_ioctl()