From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Chandan Babu R <chandan.babu@oracle.com>,
Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-xfs@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 04/15] xfs: remove xfile_stat
Date: Wed, 3 Jan 2024 15:45:33 -0800 [thread overview]
Message-ID: <20240103234533.GX361584@frogsfrogsfrogs> (raw)
In-Reply-To: <20240103084126.513354-5-hch@lst.de>
On Wed, Jan 03, 2024 at 08:41:15AM +0000, Christoph Hellwig wrote:
> vfs_getattr is needed to query inode attributes for unknown underlying
> file systems. But shmemfs is well known for users of shmem_file_setup
> and shmem_read_mapping_page_gfp that rely on it not needing specific
> inode revalidation and having a normal mapping. Remove the detour
> through the getattr method and an extra wrapper, and just read the
> inode size and i_bytes directly in the scrub tracing code.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/scrub/trace.h | 34 ++++++++++------------------------
> fs/xfs/scrub/xfile.c | 19 -------------------
> fs/xfs/scrub/xfile.h | 7 -------
> 3 files changed, 10 insertions(+), 50 deletions(-)
>
> diff --git a/fs/xfs/scrub/trace.h b/fs/xfs/scrub/trace.h
> index 6bbb4e8639dca6..ed9e044f6d603c 100644
> --- a/fs/xfs/scrub/trace.h
> +++ b/fs/xfs/scrub/trace.h
> @@ -861,18 +861,11 @@ TRACE_EVENT(xfile_destroy,
> __field(loff_t, size)
> ),
> TP_fast_assign(
> - struct xfile_stat statbuf;
> - int ret;
> -
> - ret = xfile_stat(xf, &statbuf);
> - if (!ret) {
> - __entry->bytes = statbuf.bytes;
> - __entry->size = statbuf.size;
> - } else {
> - __entry->bytes = -1;
> - __entry->size = -1;
> - }
> - __entry->ino = file_inode(xf->file)->i_ino;
> + struct inode *inode = file_inode(xf->file);
> +
> + __entry->ino = inode->i_ino;
> + __entry->bytes = inode->i_bytes;
Shouldn't this be (i_blocks << 9) + i_bytes?
> + __entry->size = i_size_read(inode);
> ),
> TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",
> __entry->ino,
> @@ -891,19 +884,12 @@ DECLARE_EVENT_CLASS(xfile_class,
> __field(unsigned long long, bytecount)
> ),
> TP_fast_assign(
> - struct xfile_stat statbuf;
> - int ret;
> -
> - ret = xfile_stat(xf, &statbuf);
> - if (!ret) {
> - __entry->bytes_used = statbuf.bytes;
> - __entry->size = statbuf.size;
> - } else {
> - __entry->bytes_used = -1;
> - __entry->size = -1;
> - }
> - __entry->ino = file_inode(xf->file)->i_ino;
> + struct inode *inode = file_inode(xf->file);
> +
> + __entry->ino = inode->i_ino;
> + __entry->bytes_used = inode->i_bytes;
Here too.
> __entry->pos = pos;
> + __entry->size = i_size_read(inode);
> __entry->bytecount = bytecount;
> ),
> TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",
> diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c
> index 090c3ead43fdf1..87654cdd5ac6f9 100644
> --- a/fs/xfs/scrub/xfile.c
> +++ b/fs/xfs/scrub/xfile.c
> @@ -291,25 +291,6 @@ xfile_seek_data(
> return ret;
> }
>
> -/* Query stat information for an xfile. */
> -int
> -xfile_stat(
> - struct xfile *xf,
> - struct xfile_stat *statbuf)
> -{
> - struct kstat ks;
> - int error;
> -
> - error = vfs_getattr_nosec(&xf->file->f_path, &ks,
> - STATX_SIZE | STATX_BLOCKS, AT_STATX_DONT_SYNC);
> - if (error)
> - return error;
> -
> - statbuf->size = ks.size;
> - statbuf->bytes = ks.blocks << SECTOR_SHIFT;
> - return 0;
> -}
> -
> /*
> * Grab the (locked) page for a memory object. The object cannot span a page
> * boundary. Returns 0 (and a locked page) if successful, -ENOTBLK if we
> diff --git a/fs/xfs/scrub/xfile.h b/fs/xfs/scrub/xfile.h
> index d56643b0f429e1..c602d11560d8ee 100644
> --- a/fs/xfs/scrub/xfile.h
> +++ b/fs/xfs/scrub/xfile.h
> @@ -63,13 +63,6 @@ xfile_obj_store(struct xfile *xf, const void *buf, size_t count, loff_t pos)
>
> loff_t xfile_seek_data(struct xfile *xf, loff_t pos);
>
> -struct xfile_stat {
> - loff_t size;
> - unsigned long long bytes;
> -};
> -
> -int xfile_stat(struct xfile *xf, struct xfile_stat *statbuf);
Removing this function will put some distance between the kernel and
xfsprogs xfile implementations, since userspace can't do failure-free
fstat. OTOH I guess if xfile_stat fails in userspace, our xfile is
screwed and we probably have to abort the whole program anyway.
For the kernel I like getting rid of this clutter, modulo the question
above.
--D
> -
> int xfile_get_page(struct xfile *xf, loff_t offset, unsigned int len,
> struct xfile_page *xbuf);
> int xfile_put_page(struct xfile *xf, struct xfile_page *xbuf);
> --
> 2.39.2
>
>
next prev parent reply other threads:[~2024-01-03 23:45 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-03 8:41 put the xfs xfile abstraction on a diet Christoph Hellwig
2024-01-03 8:41 ` [PATCH 01/15] shmem: move the shmem_mapping assert into shmem_get_folio_gfp Christoph Hellwig
2024-01-03 23:32 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 02/15] shmem: export shmem_get_folio Christoph Hellwig
2024-01-03 23:36 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 03/15] shmem: document how to "persist" data when using shmem_*file_setup Christoph Hellwig
2024-01-04 0:21 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 04/15] xfs: remove xfile_stat Christoph Hellwig
2024-01-03 23:45 ` Darrick J. Wong [this message]
2024-01-04 6:14 ` Christoph Hellwig
2024-01-04 6:55 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 05/15] xfs: remove the xfile_pread/pwrite APIs Christoph Hellwig
2024-01-03 23:48 ` Darrick J. Wong
2024-01-04 6:15 ` Christoph Hellwig
2024-01-04 6:58 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 06/15] xfs: don't try to handle non-update pages in xfile_obj_load Christoph Hellwig
2024-01-03 23:55 ` Darrick J. Wong
2024-01-04 6:21 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 07/15] xfs: shmem_file_setup can't return NULL Christoph Hellwig
2024-01-03 23:56 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 08/15] xfs: don't modify file and inode flags for shmem files Christoph Hellwig
2024-01-04 0:01 ` Darrick J. Wong
2024-01-04 6:23 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 09/15] xfs: don't allow highmem pages in xfile mappings Christoph Hellwig
2024-01-04 0:03 ` Darrick J. Wong
2024-01-04 6:24 ` Christoph Hellwig
2024-01-04 7:01 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 10/15] xfs: remove xfarray_sortinfo.page_kaddr Christoph Hellwig
2024-01-04 0:04 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 11/15] xfs: use shmem_get_folio in xfile_get_page Christoph Hellwig
2024-01-04 0:12 ` Darrick J. Wong
2024-01-04 6:25 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 12/15] xfs: remove struct xfile_page Christoph Hellwig
2024-01-04 0:14 ` Darrick J. Wong
2024-01-10 22:42 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 13/15] xfs: don't unconditionally allocate a new page in xfile_get_page Christoph Hellwig
2024-01-04 0:18 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 14/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_store Christoph Hellwig
2024-01-04 0:20 ` Darrick J. Wong
2024-01-04 6:26 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 15/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_load Christoph Hellwig
2024-01-04 0:21 ` Darrick J. Wong
2024-01-04 1:35 ` put the xfs xfile abstraction on a diet Darrick J. Wong
2024-01-04 6:26 ` Christoph Hellwig
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=20240103234533.GX361584@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=chandan.babu@oracle.com \
--cc=hch@lst.de \
--cc=hughd@google.com \
--cc=linux-mm@kvack.org \
--cc=linux-xfs@vger.kernel.org \
/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.