[PATCH v1 2/2] Add API to get on disk size of an inode
Kelvin Zhang
zhangkelvin at google.com
Wed Dec 22 12:46:58 AEDT 2021
Not really, dump_get_occupied_size() contains some custom logic for
counting stats.
On Tue, Dec 21, 2021 at 8:46 PM Gao Xiang <hsiangkao at linux.alibaba.com> wrote:
>
> On Tue, Dec 21, 2021 at 06:28:29AM -0800, Kelvin Zhang wrote:
> > Change-Id: I60fa9346737b14418bd3fa1d12f760aaf0a0cca5
> > Signed-off-by: Kelvin Zhang <zhangkelvin at google.com>
>
> The same to the previous patch.
>
> Also could we remove dump_get_occupied_size() entirely?
>
> Thanks,
> Gao Xiang
>
> > ---
> > dump/main.c | 4 ++--
> > include/erofs/internal.h | 2 ++
> > lib/data.c | 21 +++++++++++++++++++++
> > 3 files changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/dump/main.c b/dump/main.c
> > index 71b44b4..cdde561 100644
> > --- a/dump/main.c
> > +++ b/dump/main.c
> > @@ -175,7 +175,7 @@ static int erofsdump_parse_options_cfg(int argc, char **argv)
> > return 0;
> > }
> >
> > -static int erofs_get_occupied_size(struct erofs_inode *inode,
> > +static int dump_get_occupied_size(struct erofs_inode *inode,
> > erofs_off_t *size)
> > {
> > *size = 0;
> > @@ -291,7 +291,7 @@ static int erofs_read_dirent(struct erofs_dirent *de,
> > return err;
> > }
> >
> > - err = erofs_get_occupied_size(&inode, &occupied_size);
> > + err = dump_get_occupied_size(&inode, &occupied_size);
> > if (err) {
> > erofs_err("get file size failed\n");
> > return err;
> > diff --git a/include/erofs/internal.h b/include/erofs/internal.h
> > index 947304f..8f13e69 100644
> > --- a/include/erofs/internal.h
> > +++ b/include/erofs/internal.h
> > @@ -320,6 +320,8 @@ int erofs_pread(struct erofs_inode *inode, char *buf,
> > int erofs_map_blocks(struct erofs_inode *inode,
> > struct erofs_map_blocks *map, int flags);
> > int erofs_map_dev(struct erofs_sb_info *sbi, struct erofs_map_dev *map);
> > +int erofs_get_occupied_size(const struct erofs_inode *inode,
> > + erofs_off_t *size);
> > /* zmap.c */
> > int z_erofs_fill_inode(struct erofs_inode *vi);
> > int z_erofs_map_blocks_iter(struct erofs_inode *vi,
> > diff --git a/lib/data.c b/lib/data.c
> > index 27710f9..92e54b5 100644
> > --- a/lib/data.c
> > +++ b/lib/data.c
> > @@ -320,3 +320,24 @@ int erofs_pread(struct erofs_inode *inode, char *buf,
> > }
> > return -EINVAL;
> > }
> > +
> > +int erofs_get_occupied_size(const struct erofs_inode *inode,
> > + erofs_off_t *size)
> > +{
> > + *size = 0;
> > + switch (inode->datalayout) {
> > + case EROFS_INODE_FLAT_INLINE:
> > + case EROFS_INODE_FLAT_PLAIN:
> > + case EROFS_INODE_CHUNK_BASED:
> > + *size = inode->i_size;
> > + break;
> > + case EROFS_INODE_FLAT_COMPRESSION_LEGACY:
> > + case EROFS_INODE_FLAT_COMPRESSION:
> > + *size = inode->u.i_blocks * EROFS_BLKSIZ;
> > + break;
> > + default:
> > + erofs_err("unknown datalayout");
> > + return -1;
> > + }
> > + return 0;
> > +}
> > --
> > 2.34.1.307.g9b7440fafd-goog
--
Sincerely,
Kelvin Zhang
More information about the Linux-erofs
mailing list