Re: [PATCH 16/39] libxfs: add configure option to override system header fsxattr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 26, 2016 at 11:56:07AM +1100, Dave Chinner wrote:
> On Tue, Oct 25, 2016 at 04:05:17PM -0700, Darrick J. Wong wrote:
> > By default, libxfs will use the kernel/system headers to define struct
> > fsxattr.  Unfortunately, this creates a problem for developers who are
> > writing new features but building xfsprogs on a stable system, because
> > the stable kernel's headers don't reflect the new feature.  In this
> > case, we want to be able to use the internal fsxattr definition while
> > the kernel headers catch up, so provide some configure magic to allow
> > developers to force the use of the internal definition.
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> ....
> >  #include <stdio.h>
> >  #include <asm/types.h>
> >  #include <mntent.h>
> > +#ifdef OVERRIDE_SYSTEM_FSXATTR
> > +# define fsxattr sys_fsxattr
> > +#endif
> >  #include <linux/fs.h> /* fsxattr defintion for new kernels */
> > +#ifdef OVERRIDE_SYSTEM_FSXATTR
> > +# undef fsxattr
> > +#endif
> 
> messy, but I can't think of a cleaner way of doing this.
> >  
> >  static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p)
> >  {
> > @@ -175,7 +181,7 @@ static inline void platform_mntent_close(struct mntent_cursor * cursor)
> >   * are a copy of the definitions moved to linux/uapi/fs.h in the 4.5 kernel,
> >   * so this is purely for supporting builds against old kernel headers.
> >   */
> > -#ifndef FS_IOC_FSGETXATTR
> > +#if !defined FS_IOC_FSGETXATTR || defined OVERRIDE_SYSTEM_FSXATTR
> >  struct fsxattr {
> >  	__u32		fsx_xflags;	/* xflags field value (get/set) */
> >  	__u32		fsx_extsize;	/* extsize field value (get/set)*/
> > @@ -184,7 +190,9 @@ struct fsxattr {
> >  	__u32		fsx_cowextsize;	/* cow extsize field value (get/set) */
> >  	unsigned char	fsx_pad[8];
> >  };
> > +#endif
> >  
> > +#ifndef FS_IOC_FSGETXATTR
> >  /*
> >   * Flags for the fsx_xflags field
> >   */
> 
> Hmmm - what happens if all we are doing is introducing new flags?
> Doesn't the overide need to cover them as well?

As I did in the next patch, my intent is for the include/ header files to
define any flag that isn't picked up by the system headers.  IOWs, the
OVERRIDE_SYSTEM_FSXATTR only helps us pick up changes to the struct
fsxattr definition.

#ifndef FS_XFLAG_MOOCOW
# define FS_XFLAG_MOOCOW   0xBEEF
#endif

(Inelegant, but oh well.)

--D

> 
> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@xxxxxxxxxxxxx
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux