All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gabriel Krisman Bertazi <krisman@suse.de>
To: Tony Solomonik <tony.solomonik@gmail.com>
Cc: axboe@kernel.dk,  leitao@debian.org,  io-uring@vger.kernel.org,
	asml.silence@gmail.com
Subject: Re: [PATCH v2 1/2] Add __do_ftruncate that truncates a struct file*
Date: Tue, 23 Jan 2024 11:53:24 -0300	[thread overview]
Message-ID: <8734uot82j.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <20240123113333.79503-1-tony.solomonik@gmail.com> (Tony Solomonik's message of "Tue, 23 Jan 2024 13:33:32 +0200")

Tony Solomonik <tony.solomonik@gmail.com> writes:

> do_sys_ftruncate receives a file descriptor, fgets the struct file*, and
> finally actually truncates the file.

This need to be Cc'ed to the VFS maintainers and appropriated lists.
Also, you need a signed-off-by line and cover letter.

Take a look at:

https://www.kernel.org/doc/html/v6.7/process/submitting-patches.html

>
> __do_ftruncate allows for truncating a file without fgets.
> ---
>  fs/open.c                | 52 ++++++++++++++++++++++++----------------
>  include/linux/syscalls.h |  2 ++
>  2 files changed, 33 insertions(+), 21 deletions(-)
>
> diff --git a/fs/open.c b/fs/open.c
> index 02dc608d40d8..b32ac430666c 100644
> --- a/fs/open.c
> +++ b/fs/open.c
> @@ -154,47 +154,57 @@ COMPAT_SYSCALL_DEFINE2(truncate, const char __user *, path, compat_off_t, length
>  }
>  #endif
>  
> -long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
> +long __do_ftruncate(struct file *file, loff_t length, int small)
>  {
>  	struct inode *inode;
>  	struct dentry *dentry;
> -	struct fd f;
>  	int error;
>  
> -	error = -EINVAL;
> -	if (length < 0)
> -		goto out;
> -	error = -EBADF;
> -	f = fdget(fd);
> -	if (!f.file)
> -		goto out;
> -
>  	/* explicitly opened as large or we are on 64-bit box */
> -	if (f.file->f_flags & O_LARGEFILE)
> +	if (file->f_flags & O_LARGEFILE)
>  		small = 0;
>  
> -	dentry = f.file->f_path.dentry;
> +	dentry = file->f_path.dentry;
>  	inode = dentry->d_inode;
>  	error = -EINVAL;
> -	if (!S_ISREG(inode->i_mode) || !(f.file->f_mode & FMODE_WRITE))
> -		goto out_putf;
> +	if (!S_ISREG(inode->i_mode) || !(file->f_mode & FMODE_WRITE))
> +		goto out;

Just return directly here. No point in jumping to 'out' just to return
immediately.

>  
>  	error = -EINVAL;
>  	/* Cannot ftruncate over 2^31 bytes without large file support */
>  	if (small && length > MAX_NON_LFS)
> -		goto out_putf;
> +		goto out;

likewise for the others..

>  
>  	error = -EPERM;
>  	/* Check IS_APPEND on real upper inode */
> -	if (IS_APPEND(file_inode(f.file)))
> -		goto out_putf;
> +	if (IS_APPEND(file_inode(file)))
> +		goto out;
>  	sb_start_write(inode->i_sb);
> -	error = security_file_truncate(f.file);
> +	error = security_file_truncate(file);
>  	if (!error)
> -		error = do_truncate(file_mnt_idmap(f.file), dentry, length,
> -				    ATTR_MTIME | ATTR_CTIME, f.file);
> +		error = do_truncate(file_mnt_idmap(file), dentry, length,
> +				    ATTR_MTIME | ATTR_CTIME, file);
>  	sb_end_write(inode->i_sb);
> -out_putf:
> +
> +out:
> +  return error;
> +}
> +
> +long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
> +{
> +	struct fd f;
> +	int error;
> +
> +	error = -EINVAL;
> +	if (length < 0)
> +		goto out;
> +	error = -EBADF;
> +	f = fdget(fd);
> +	if (!f.file)
> +		goto out;
> +
> +	error = __do_ftruncate(f.file, length, small);
> +
>  	fdput(f);
>  out:
>  	return error;

Same here.

> diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
> index fd9d12de7e92..e8c56986e751 100644
> --- a/include/linux/syscalls.h
> +++ b/include/linux/syscalls.h
> @@ -1229,6 +1229,8 @@ static inline long ksys_lchown(const char __user *filename, uid_t user,
>  			     AT_SYMLINK_NOFOLLOW);
>  }
>  
> +extern long __do_ftruncate(struct file *file, loff_t length, int small);
> +
>  extern long do_sys_ftruncate(unsigned int fd, loff_t length, int small);
>  
>  static inline long ksys_ftruncate(unsigned int fd, loff_t length)

-- 
Gabriel Krisman Bertazi

  parent reply	other threads:[~2024-01-23 14:53 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAD62OrGa9pS6-Qgg_UD4r4d+kCSPQihq0VvtVombrbAAOroG=w@mail.gmail.com>
2024-01-23 11:33 ` [PATCH v2 1/2] Add __do_ftruncate that truncates a struct file* Tony Solomonik
2024-01-23 11:33   ` [PATCH v2 2/2] io_uring: add support for ftruncate Tony Solomonik
2024-01-23 15:01     ` Gabriel Krisman Bertazi
2024-01-23 15:36       ` Jens Axboe
2024-01-23 15:46     ` Jens Axboe
2024-01-23 15:50     ` Jens Axboe
2024-01-23 21:19     ` [PATCH v3 0/2] Add ftruncate to io_uring Tony Solomonik
2024-01-23 21:19       ` [PATCH v3 1/2] Add ftruncate_file that truncates a struct file* Tony Solomonik
2024-01-23 22:07         ` Jens Axboe
2024-01-23 21:19       ` [PATCH v3 2/2] io_uring: add support for ftruncate Tony Solomonik
2024-01-23 22:11         ` Jens Axboe
2024-01-23 22:33     ` [PATCH v4 0/2] " Tony Solomonik
2024-01-23 22:33       ` [PATCH v4 1/2] Add ftruncate_file that truncates a struct file Tony Solomonik
2024-01-23 22:33       ` [PATCH v4 2/2] io_uring: add support for ftruncate Tony Solomonik
2024-01-23 23:24       ` [PATCH v4 0/2] " Jens Axboe
     [not found]         ` <CAD62OrEC62Ojh+uvMWMb7X=fNZerUVYfUWFmRHQ-49OvTJ1u4Q@mail.gmail.com>
2024-01-23 23:40           ` Jens Axboe
2024-01-23 14:53   ` Gabriel Krisman Bertazi [this message]
2024-01-23 15:38   ` [PATCH v2 1/2] Add __do_ftruncate that truncates a struct file* Jens Axboe
2024-01-23 15:40     ` Jens Axboe
     [not found] <20240123112358.78030-1-tony.solomonik@gmail.com>
2024-01-23 11:32 ` Tony Solomonik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8734uot82j.fsf@mailhost.krisman.be \
    --to=krisman@suse.de \
    --cc=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=io-uring@vger.kernel.org \
    --cc=leitao@debian.org \
    --cc=tony.solomonik@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.