It looks like I overthink and the best and simple solution is just to use for all block devices the block_operation function of inode to get geometry: inode->u.i_bops->geometry
I miss that bchlib is already use this function to fill bchlib_s structure. Will try this approach now. пн, 25 мая 2020 г. в 15:03, Oleg Evseev <ev.m...@gmail.com>: > Hi, > > I wonder how to get size of character device that referenced mtd partition > block device? As I see bchlib_setup in drivers/bch/bchlib_setup.c fills > block geometry info to bchlib_s structure (number of sectors and sector > size) that then stored as i_private to inode. > > This inode is part of the root pseudo file system and when user call > stat() code leads to inode_stat function in fs/vfs/fs_stat.c that fills > only file attributes info (st_mode). > > I suppose here inode_stat also could fill size of file in bytes (st_size) > based on geometry from i_private bchlib_s structure. > > But how to correctly determine that device is BCH here, to be sure that > casting to bchlib_s will be correct? INODE_IS_BLOCK(inode) is obviously not > enough criteria. > > I'm not good in inode stuff, so maybe this is stupid idea, but could I > check file_operations functions pointers to be equal to certain functions > of BCH? Something like: > if (inode->u.i_ops->read == bch_read) {} > > Anyway it would be done, fs_stat will be depended on BCH driver. But I > suppose it is not right, is it? > > p.s. also I suppose same thing is related to block devices themselves, > they could provide geometry info to determine file size for stat(). > > Thanks for any thoughts! > > -- > With regards, Oleg. >