brintos

brintos / linux-shallow public Read only

0
0
Text · 1.0 KiB · 62ee73d Raw
49 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <linux/kernel.h>3#include <linux/errno.h>4#include <linux/fs.h>5#include <linux/file.h>6#include <linux/mm.h>7#include <linux/slab.h>8#include <linux/syscalls.h>9#include <linux/io_uring.h>10 11#include <uapi/linux/io_uring.h>12 13#include "../fs/internal.h"14 15#include "io_uring.h"16#include "truncate.h"17 18struct io_ftrunc {19	struct file			*file;20	loff_t				len;21};22 23int io_ftruncate_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)24{25	struct io_ftrunc *ft = io_kiocb_to_cmd(req, struct io_ftrunc);26 27	if (sqe->rw_flags || sqe->addr || sqe->len || sqe->buf_index ||28	    sqe->splice_fd_in || sqe->addr3)29		return -EINVAL;30 31	ft->len = READ_ONCE(sqe->off);32 33	req->flags |= REQ_F_FORCE_ASYNC;34	return 0;35}36 37int io_ftruncate(struct io_kiocb *req, unsigned int issue_flags)38{39	struct io_ftrunc *ft = io_kiocb_to_cmd(req, struct io_ftrunc);40	int ret;41 42	WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK);43 44	ret = do_ftruncate(req->file, ft->len, 1);45 46	io_req_set_res(req, ret, 0);47	return IOU_OK;48}49