[PATCH 2/3] Discard the legacy interface MEMGETOOBSEL in flash_eraseall

Joakim Tjernlund joakim.tjernlund at transmode.se
Fri Jun 11 05:53:44 EDT 2010


Joakim Tjernlund/Transmode wrote on 2010/06/11 11:44:27:
>
> >
> > The "struct nand_oobinfo" is able to record only 32 ECC code positions,which
> > is not enough for many big NAND chips. Therefore, this structure is replaced
> > by "struct nand_ecclayout" in linux kernel from the version 2.6.17.
> > Consequently, the ioctl command changed from MEMGETOOBSEL to ECCGETLAYOUT.
> >
> > Now update flash_eraseall to use the new ioctl command ECCGETLAYOUT. In order
> > to keep compatible with the old linux kernel, a linux version detection
> > function is added.
> >
> > Signed-off-by: Stanley.Miao <stanley.miao at windriver.com>
> > ---
> >  flash_eraseall.c |   71 ++++++++++++++++++++++++++++++++----------------------
> >  1 files changed, 42 insertions(+), 29 deletions(-)
> >
> > diff --git a/flash_eraseall.c b/flash_eraseall.c
> > index a22fc49..4e2108b 100644
> > --- a/flash_eraseall.c
> > +++ b/flash_eraseall.c
> > @@ -43,6 +43,8 @@
> >  #define PROGRAM "flash_eraseall"
> >  #define VERSION "$Revision: 1.22 $"
> >
> > +#define LINUX_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
> > +
> >  static const char *exe_name;
> >  static const char *mtd_device;
> >  static int quiet;      /* true -- don't output progress */
> > @@ -55,6 +57,21 @@ static void display_version (void);
> >  static struct jffs2_unknown_node cleanmarker;
> >  int target_endian = __BYTE_ORDER;
> >
> > +static int get_linux_version(void)
> > +{
> > +   FILE *fd;
> > +   int a = 0, b = 0, c = 0;
> > +
> > +   fd = fopen("/proc/version", "r");
> > +   if (fd) {
> > +      fscanf(fd, "Linux version %d.%d.%d", &a, &b, &c);
> > +      fclose(fd);
> > +   }
> > +
> > +   return LINUX_VERSION(a, b, c);
> > +}
> > +
> > +
> The fopen could fail and if it does, I think you should default to "assume
> latest kernel"
> Same goes for fscanf, you should at least test the return value.

Forgot, use uname(2) instead of /proc/version

Does the above scanf work on "2.6.31-gentoo-r6"?

  Jocke




More information about the linux-mtd mailing list