Author: mmacy
Date: Sat Feb 23 20:45:45 2019
New Revision: 344484
URL: https://svnweb.freebsd.org/changeset/base/344484

Log:
  linux/fs: simplify interop and correct definition of loff_t
  
  - offsets can be negative, loff_t needs to be signed, it also simplifies
    interop with the rest of the code base to use off_t than the actual linux
    definition "long long"
  - don't rely on the defining "file" to "linux_file" in interface definitions
    as that causes heartache with includes
  
  Reviewed by:  hps@
  MFC after:    1 week
  Sponsored by: iX Systems
  Differential Revision:        https://reviews.freebsd.org/D19274

Modified:
  head/sys/compat/linuxkpi/common/include/linux/fs.h
  head/sys/compat/linuxkpi/common/include/linux/types.h

Modified: head/sys/compat/linuxkpi/common/include/linux/fs.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/fs.h  Sat Feb 23 14:27:09 
2019        (r344483)
+++ head/sys/compat/linuxkpi/common/include/linux/fs.h  Sat Feb 23 20:45:45 
2019        (r344484)
@@ -129,25 +129,25 @@ do {                                                      
                \
                pgsigio(*(queue), (sig), 0);                            \
 } while (0)
 
-typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
+typedef int (*filldir_t)(void *, const char *, int, off_t, u64, unsigned);
 
 struct file_operations {
        struct module *owner;
-       ssize_t (*read)(struct file *, char __user *, size_t, loff_t *);
-       ssize_t (*write)(struct file *, const char __user *, size_t, loff_t *);
-       unsigned int (*poll) (struct file *, struct poll_table_struct *);
-       long (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);
-       long (*compat_ioctl)(struct file *, unsigned int, unsigned long);
-       int (*mmap)(struct file *, struct vm_area_struct *);
+       ssize_t (*read)(struct linux_file *, char __user *, size_t, off_t *);
+       ssize_t (*write)(struct linux_file *, const char __user *, size_t, 
off_t *);
+       unsigned int (*poll) (struct linux_file *, struct poll_table_struct *);
+       long (*unlocked_ioctl)(struct linux_file *, unsigned int, unsigned 
long);
+       long (*compat_ioctl)(struct linux_file *, unsigned int, unsigned long);
+       int (*mmap)(struct linux_file *, struct vm_area_struct *);
        int (*open)(struct inode *, struct file *);
-       int (*release)(struct inode *, struct file *);
-       int (*fasync)(int, struct file *, int);
+       int (*release)(struct inode *, struct linux_file *);
+       int (*fasync)(int, struct linux_file *, int);
 
 /* Although not supported in FreeBSD, to align with Linux code
  * we are adding llseek() only when it is mapped to no_llseek which returns
  * an illegal seek error
  */
-       loff_t (*llseek)(struct file *, loff_t, int);
+       off_t (*llseek)(struct linux_file *, off_t, int);
 #if 0
        /* We do not support these methods.  Don't permit them to compile. */
        loff_t (*llseek)(struct file *, loff_t, int);

Modified: head/sys/compat/linuxkpi/common/include/linux/types.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/types.h       Sat Feb 23 
14:27:09 2019        (r344483)
+++ head/sys/compat/linuxkpi/common/include/linux/types.h       Sat Feb 23 
20:45:45 2019        (r344484)
@@ -55,7 +55,7 @@ typedef uint64_t __be64;
 
 typedef unsigned int    uint;
 typedef unsigned gfp_t;
-typedef uint64_t loff_t;
+typedef off_t loff_t;
 typedef vm_paddr_t resource_size_t;
 typedef uint16_t __bitwise__ __sum16;
 typedef unsigned long pgoff_t;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to