I cobbled this patch.
It compiles in 6.11 and 6.12.
No idea if it actually works.

Related changes in 6.12:
* FMODE_UNSIGNED_OFFSET moved to fop_flags, renamed FOP_UNSIGNED_OFFSET
* fd.file gone, (new) accessor needed : fd_file(fd)
     Kept fd_file(fd) syntax, redefining it as the old fd.file if not
already defined.
* .fop_flags added in struct file_operations.

Regards,
     Gerardo Malazdrewicz
diff --git a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.c b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.c
index 80d3597..0ad4eed 100644
--- a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.c
+++ b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.c
@@ -921,7 +921,14 @@ static inline const char* opstr(int op)
 
 static inline bool unsigned_offsets(struct file *file)
 {
-        return file->f_mode & FMODE_UNSIGNED_OFFSET;
+        return
+#if defined(FOP_UNSIGNED_OFFSET)
+               file->f_op->fop_flags & FOP_UNSIGNED_OFFSET;
+#elif defined(FMODE_UNSIGNED_OFFSET)
+               file->f_mode & FMODE_UNSIGNED_OFFSET;
+#elif
+               false;
+#endif
 }
 
 int nvfs_rw_verify_area(int read_write, struct file *file,
@@ -1610,26 +1617,26 @@ struct nvfs_io* nvfs_io_init(int op, nvfs_ioctl_ioargs_t *ioargs)
 	}
 
 	fd = fdget(ioargs->fd);
-	if (!fd.file) {
+	if (!fd_file(fd)) {
 		nvfs_err("%s:%d invalid file descriptor:%d\n",
 				__func__, __LINE__, ioargs->fd);
 		return ERR_PTR(ret);
 	}
 
-	ret = nvfs_check_file_permissions(op, fd.file,
+	ret = nvfs_check_file_permissions(op, fd_file(fd),
                                        ioargs->allowreads);
 	if (ret) {
 		nvfs_err("Invalid file permissions\n");
 		goto fd_put;
 	}
 
-	inode = file_inode(fd.file);
+	inode = file_inode(fd_file(fd));
 	// we already have a valid fd
 	BUG_ON(inode == NULL);
 
 	if (file_args->inum) {
 		// for NFS majdev is zero
-		if (S_ISREG(file_inode(fd.file)->i_mode) &&
+		if (S_ISREG(file_inode(fd_file(fd))->i_mode) &&
 				file_args->majdev) {
                         #if 0
 			if (file_args->generation == 0) {
@@ -1642,7 +1649,7 @@ struct nvfs_io* nvfs_io_init(int op, nvfs_ioctl_ioargs_t *ioargs)
 				goto fd_put;
 			}
                         #endif
-		} else if ((S_ISBLK(file_inode(fd.file)->i_mode)) &&
+		} else if ((S_ISBLK(file_inode(fd_file(fd))->i_mode)) &&
 				(file_args->majdev == 0)) {
 			ret = -EINVAL;
 			nvfs_err("invalid file_args, no major number for block device file\n");
@@ -1718,7 +1725,7 @@ struct nvfs_io* nvfs_io_init(int op, nvfs_ioctl_ioargs_t *ioargs)
         nvfsio->op  = op;
 
 #ifndef SIMULATE_INLINE_READS
-	if ((fd.file->f_flags & O_DIRECT) == 0) {
+	if ((fd_file(fd)->f_flags & O_DIRECT) == 0) {
 		nvfs_err("O_DIRECT flag is not set\n");
 		ret = -EINVAL;
                 goto mgroup_put;
@@ -1958,7 +1965,7 @@ long nvfs_io_start_op(nvfs_io_t* nvfsio)
 						struct nvfs_io_mgroup, nvfsio);
 	struct nvfs_gpu_args  *gpu_info = &nvfs_mgroup->gpu_info;
         ssize_t ret = 0, bytes_done = 0, bytes_left = nvfsio->length;
-        struct file *f = nvfsio->fd.file;
+        struct file *f = fd_file(nvfsio->fd);
         struct inode *inode = file_inode(f);
         loff_t fd_offset = nvfsio->fd_offset;
 	u64 va_offset = 0;
diff --git a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.h b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.h
index 45faa24..ac524be 100644
--- a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.h
+++ b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-core.h
@@ -79,6 +79,10 @@ extern int nvfs_peer_stats_enabled;
 
 typedef unsigned long long u64;
 
+#if !defined(fd_file) 
+#define fd_file(fd) fd.file
+#endif
+
 /*
  * IOCTL structures
  */
diff --git a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-stat.c b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-stat.c
index 941bf67..791a026 100644
--- a/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-stat.c
+++ b/nvidia-cuda/nvidia_fs/usr/src/nvidia-fs/nvfs-stat.c
@@ -647,5 +647,8 @@ const struct file_operations nvfs_stats_fops = {
         .write          = nvfs_stats_clear,
         .llseek         = seq_lseek,
         .release        = single_release,
+#if defined(FOP_UNSIGNED_OFFSET)
+        .fop_flags      = FOP_UNSIGNED_OFFSET,
+#endif
 };
 #endif

Reply via email to