Re: [PATCH 05/11] xfsprogs: missing and dummy calls for OS X support

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

 



On Mon, Aug 17, 2015 at 06:23:20PM +0200, Jan Tulak wrote:
> Add and update various API, macros and types where is some change
> in OS X or xfsprogs. Most changes are in darwin.h.
> 
> Add dummy implementations where native support is nonexistent
> and the tools are not expected to work anyway, so all tools can be
> at least compiled.
> 
> Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx>
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  fsr/xfs_fsr.c    |   8 +++
>  include/darwin.h | 153 +++++++++++++++++++++++++++++++++++++++++++++++++------
>  2 files changed, 145 insertions(+), 16 deletions(-)
> 
> diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c
> index 7c1d776..b4ff136 100644
> --- a/fsr/xfs_fsr.c
> +++ b/fsr/xfs_fsr.c
> @@ -43,6 +43,14 @@
>  #define _PATH_FSRLAST		"/var/tmp/.fsrlast_xfs"
>  #define _PATH_PROC_MOUNTS	"/proc/mounts"
>  
> +#ifdef USE_DUMMY_XATTR
> +	/* OS X has fsetxattr with different number of arguments.
> +	 * Because it won't work anyway (no fstab/mtab and so on),
> +	 * hijack the call to a dummy function so it can at least
> +	 * compile.
> +	 */
> +#  define fsetxattr(a,b,c,d,e) dummy_fsetxattr(a,b,c,d,e)
> +#endif

I don't think this is the right way to do it.  I'd rather:

a) check for fsetxattr using autoconf, and
b) stub out the whole code calling it.
c) make this a patch on it's own

>  
>  char *progname;
>  
> diff --git a/include/darwin.h b/include/darwin.h
> index 8b5a661..775dfc8 100644
> --- a/include/darwin.h
> +++ b/include/darwin.h
> @@ -76,45 +76,37 @@ static __inline__ void platform_getoptreset(void)
>  
>  static __inline__ int platform_uuid_compare(uuid_t *uu1, uuid_t *uu2)
>  {
> -	return uuid_compare(uu1, uu2, NULL);
> +	return uuid_compare((const unsigned char *) uu1, (const unsigned char*) uu2);

Do you have any idea why MacOS defines a uuid_t, but wants unsigned
char arguments to uuid_compare?

Or given that the others work with pointer dereferences why doesn't:

	return uuid_compare(*uu1, *uu2);

work?

Also please make the uuid changes a patch on it's own.

> -#define ENOATTR		989     /* Attribute not found */
>  #define EFSCORRUPTED	990	/* Filesystem is corrupted */
>  #define EFSBADCRC	991	/* Bad CRC detected */
>  #define constpp		char * const *

> +#define XATTR_SIZE_MAX 65536    /* size of an extended attribute value (64k) */
> +#define XATTR_LIST_MAX 65536    /* size of extended attribute namelist (64k) */

Eww, looks like we depend on these Linux values in the on disk
defintion.  I think we need to add new XFS_XATTR_SIZE_MAX and
XFS_XATTR_LIST_MAX defintions to xfs_format.h and use them where
we currently use these.

> +/*
> + * Dummy POSIX timer replacement
> + */
> +#define CLOCK_REALTIME 1
> +typedef uint64_t timer_t;
> +typedef double   timer_c;
> +typedef clock_id_t clockid_t;
> +struct itimerspec
> +  {
> +    struct timespec it_interval;
> +    struct timespec it_value;
> +  };
> +
> +static inline int timer_create (clockid_t __clock_id,
> +                         struct sigevent *__restrict __evp,
> +                         timer_t *__restrict __timerid)
> +{
> +	return 0;
> +}
> +
> +static inline int timer_settime (timer_t __timerid, int __flags,
> +                          const struct itimerspec *__restrict __value,
> +                          struct itimerspec *__restrict __ovalue)
> +{
> +	return 0;
> +}
> +
> +static inline int timer_delete (timer_t __timerid)
> +{
> +	return 0;
> +}
> +
> +static inline int timer_gettime (timer_t __timerid, struct itimerspec *__value)
> +{
> +	return 0;
> +}

I don't think these stubs will work.  It might be worth to figure
out what people use as replacement for realtime clocks on MacOS
by searching various programming resoures on the internet.

> +static inline int nftw64(const char *path, int (*fn)(const char *, const struct stat *ptr, int flag, struct FTW *), int depth,
> +         int flags)
> +{
> +	return nftw(path, fn, depth, flags);
> +}
> +
> +#define MREMAP_FIXED 1
> +#define MREMAP_MAYMOVE 2
> +static inline void *mremap(void *old_address, size_t old_size,
> +                    size_t new_size, int flags, ... /* void *new_address */)
> +{
> +	return NULL;
> +}
> +
> +/* FSR */

Please just build the mremap file in xfs_io conditional.

> +typedef int __fsblkcnt_t;
> +typedef int __fsfilcnt_t;
> +typedef long long int __fsblkcnt64_t;
> +typedef long long int __fsfilcnt64_t;
> +
> +struct statvfs64
> +{
> +	unsigned long int f_bsize;
> +	unsigned long int f_frsize;
> +	__fsblkcnt64_t f_blocks;
> +	__fsblkcnt64_t f_bfree;
> +	__fsblkcnt64_t f_bavail;
> +	__fsfilcnt64_t f_files;
> +	__fsfilcnt64_t f_ffree;
> +	__fsfilcnt64_t f_favail;
> +	unsigned long int f_fsid;
> +	int __f_unused;
> +	unsigned long int f_flag;
> +	unsigned long int f_namemax;
> +	int __f_spare[6];
> +};

Does MacOS support statvfs? or statfs?  We should use the proper API
here instead of a dummy.  Or maybe just not build fsr on OSX for now,
as that would solve the fsetxattr issue as well.

> +struct mntent
> +{

Another fsr issue, right?  Seems like it would need similar getmntinfo
based code.  As a stopgap I'd suggest we stop building fsr on OSX for
now.

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs



[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux