From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Tue, 25 Aug 2015 13:02:28 +0200 Subject: [U-Boot] [PATCH v2 2/4] ubifs: Add functions for generic fs use In-Reply-To: <1440266693-15664-3-git-send-email-hdegoede@redhat.com> References: <1440266693-15664-1-git-send-email-hdegoede@redhat.com> <1440266693-15664-3-git-send-email-hdegoede@redhat.com> Message-ID: <55DC4B44.3080306@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Hans, Am 22.08.2015 um 20:04 schrieb Hans de Goede: > Implement the necessary functions for implementing generic fs support > for ubifs. > > Signed-off-by: Hans de Goede > --- > fs/ubifs/ubifs.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ > include/ubifs_uboot.h | 4 ++++ > 2 files changed, 66 insertions(+) Reviewed-by: Heiko Schocher bye, Heiko > > diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c > index 5af861c..89f1f2a 100644 > --- a/fs/ubifs/ubifs.c > +++ b/fs/ubifs/ubifs.c > @@ -568,6 +568,22 @@ static unsigned long ubifs_findfile(struct super_block *sb, char *filename) > return 0; > } > > +int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info) > +{ > + /* Check that ubifs is mounted and that we are not being a blkdev */ > + if (!ubifs_mounted) { > + printf("UBIFS not mounted, use ubifsmount to mount volume first!\n"); > + return -1; > + } > + > + if (rbdd) { > + printf("UBIFS cannot be used with normal block devices\n"); > + return -1; > + } > + > + return 0; > +} > + > int ubifs_ls(const char *filename) > { > struct ubifs_info *c = ubifs_sb->s_fs_info; > @@ -616,6 +632,48 @@ out: > return ret; > } > > +int ubifs_exists(const char *filename) > +{ > + struct ubifs_info *c = ubifs_sb->s_fs_info; > + unsigned long inum; > + > + c->ubi = ubi_open_volume(c->vi.ubi_num, c->vi.vol_id, UBI_READONLY); > + inum = ubifs_findfile(ubifs_sb, (char *)filename); > + ubi_close_volume(c->ubi); > + > + return inum != 0; > +} > + > +int ubifs_size(const char *filename, loff_t *size) > +{ > + struct ubifs_info *c = ubifs_sb->s_fs_info; > + unsigned long inum; > + struct inode *inode; > + int err = 0; > + > + c->ubi = ubi_open_volume(c->vi.ubi_num, c->vi.vol_id, UBI_READONLY); > + > + inum = ubifs_findfile(ubifs_sb, (char *)filename); > + if (!inum) { > + err = -1; > + goto out; > + } > + > + inode = ubifs_iget(ubifs_sb, inum); > + if (IS_ERR(inode)) { > + printf("%s: Error reading inode %ld!\n", __func__, inum); > + err = PTR_ERR(inode); > + goto out; > + } > + > + *size = inode->i_size; > + > + ubifs_iput(inode); > +out: > + ubi_close_volume(c->ubi); > + return err; > +} > + > /* > * ubifsload... > */ > @@ -873,6 +931,10 @@ out: > return err; > } > > +void ubifs_close(void) > +{ > +} > + > /* Compat wrappers for common/cmd_ubifs.c */ > int ubifs_load(char *filename, u32 addr, u32 size) > { > diff --git a/include/ubifs_uboot.h b/include/ubifs_uboot.h > index d10a909..c600e38 100644 > --- a/include/ubifs_uboot.h > +++ b/include/ubifs_uboot.h > @@ -22,8 +22,12 @@ int uboot_ubifs_mount(char *vol_name); > void uboot_ubifs_umount(void); > int ubifs_load(char *filename, u32 addr, u32 size); > > +int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); > int ubifs_ls(const char *dir_name); > +int ubifs_exists(const char *filename); > +int ubifs_size(const char *filename, loff_t *size); > int ubifs_read(const char *filename, void *buf, loff_t offset, > loff_t size, loff_t *actread); > +void ubifs_close(void); > > #endif /* __UBIFS_UBOOT_H__ */ > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany