[PATCH 0/5] PMFS: Rebase to Linux 3.9

Ross Zwisler ross.zwisler at linux.intel.com
Mon Apr 29 15:05:56 EDT 2013


> I'm seeing build errors with this patch applied to both 3.9 and 3.9rc7 (the
> original baseline).  These reproduce on both CentOS 6.4 and Ubuntu 12.10.
> 
> fs/pmfs/namei.c: In function ‘pmfs_get_parent’:
> fs/pmfs/namei.c:763: error: unknown field ‘len’ specified in initializer
> fs/pmfs/namei.c:763: warning: excess elements in struct initializer
> fs/pmfs/namei.c:763: warning: (near initialization for ‘dotdot’)
> fs/pmfs/namei.c: At top level:
> fs/pmfs/namei.c:781: warning: initialization from incompatible pointer type
> fs/pmfs/namei.c:782: warning: initialization from incompatible pointer type
>   CC      fs/eventfd.o
> make[2]: *** [fs/pmfs/namei.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
>   CC      fs/aio.o
>   CC      fs/locks.o
>   CC      fs/compat.o
> fs/pmfs/inode.c: In function ‘pmfs_read_inode’:
> fs/pmfs/inode.c:823: error: incompatible types when assigning to type ‘kuid_t’ from type ‘__le32’
> fs/pmfs/inode.c:824: error: incompatible types when assigning to type ‘kgid_t’ from type ‘__le32’
> fs/pmfs/inode.c: In function ‘pmfs_update_inode’:
> fs/pmfs/inode.c:878: error: aggregate value used where an integer was expected
> fs/pmfs/inode.c:879: error: aggregate value used where an integer was expected
> fs/pmfs/inode.c: In function ‘pmfs_is_inode_dirty’:
> fs/pmfs/inode.c:1206: error: invalid operands to binary != (have ‘kuid_t’ and ‘__le32’)
> fs/pmfs/inode.c:1207: error: invalid operands to binary != (have ‘kgid_t’ and ‘__le32’)
> fs/pmfs/inode.c: In function ‘pmfs_update_single_field’:
> fs/pmfs/inode.c:1437: error: aggregate value used where an integer was expected
> fs/pmfs/inode.c:1440: error: aggregate value used where an integer was expected
> make[2]: *** [fs/pmfs/inode.o] Error 1
> fs/pmfs/super.c: In function ‘pmfs_fill_super’:
> fs/pmfs/super.c:679: error: incompatible types when assigning to type ‘uid_t’ from type ‘kuid_t’
> fs/pmfs/super.c:680: error: incompatible types when assigning to type ‘gid_t’ from type ‘kgid_t’
> make[2]: *** [fs/pmfs/super.o] Error 1
> 
> 
> Config attached.
> 
> - Ross
> 


I think these build errors were caused because kuid_t and kgid_t are now structs:

typedef struct {
	uid_t val;
} kuid_t;


typedef struct {
	gid_t val;
} kgid_t;

So, to compare to a u32, you have to grab the value "val".  

Continuing the review.  :)

With these changes I'm able to build:

diff --git a/fs/pmfs/inode.c b/fs/pmfs/inode.c
index 08bdc87..15ebe02 100644
--- a/fs/pmfs/inode.c
+++ b/fs/pmfs/inode.c
@@ -820,8 +820,8 @@ static int pmfs_read_inode(struct inode *inode, struct pmfs_inode *pi)
 #endif
 
 	inode->i_mode = le16_to_cpu(pi->i_mode);
-	inode->i_uid = le32_to_cpu(pi->i_uid);
-	inode->i_gid = le32_to_cpu(pi->i_gid);
+	inode->i_uid.val = le32_to_cpu(pi->i_uid);
+	inode->i_gid.val = le32_to_cpu(pi->i_gid);
 	set_nlink(inode, le16_to_cpu(pi->i_links_count));
 	inode->i_size = le64_to_cpu(pi->i_size);
 	inode->i_atime.tv_sec = le32_to_cpu(pi->i_atime);
@@ -875,8 +875,8 @@ static void pmfs_update_inode(struct inode *inode, struct pmfs_inode *pi)
 {
 	pmfs_memunlock_inode(inode->i_sb, pi);
 	pi->i_mode = cpu_to_le16(inode->i_mode);
-	pi->i_uid = cpu_to_le32(inode->i_uid);
-	pi->i_gid = cpu_to_le32(inode->i_gid);
+	pi->i_uid = cpu_to_le32(inode->i_uid.val);
+	pi->i_gid = cpu_to_le32(inode->i_gid.val);
 	pi->i_links_count = cpu_to_le16(inode->i_nlink);
 	pi->i_size = cpu_to_le64(inode->i_size);
 	pi->i_blocks = cpu_to_le64(inode->i_blocks);
@@ -1203,8 +1203,8 @@ static bool pmfs_is_inode_dirty(struct inode *inode, struct pmfs_inode *pi)
 		inode->i_mtime.tv_sec != le32_to_cpu(pi->i_mtime) ||
 		inode->i_size != le64_to_cpu(pi->i_size) ||
 		inode->i_mode != le16_to_cpu(pi->i_mode) ||
-		inode->i_uid != le32_to_cpu(pi->i_uid) ||
-		inode->i_gid != le32_to_cpu(pi->i_gid) ||
+		inode->i_uid.val != le32_to_cpu(pi->i_uid) ||
+		inode->i_gid.val != le32_to_cpu(pi->i_gid) ||
 		inode->i_nlink != le16_to_cpu(pi->i_links_count) ||
 		inode->i_blocks != le64_to_cpu(pi->i_blocks) ||
 		inode->i_atime.tv_sec != le32_to_cpu(pi->i_atime))
@@ -1434,10 +1434,10 @@ static int pmfs_update_single_field(struct super_block *sb, struct inode *inode,
 			pi->i_mode = cpu_to_le16(inode->i_mode);
 			break;
 		case ATTR_UID:
-			pi->i_uid = cpu_to_le32(inode->i_uid);
+			pi->i_uid = cpu_to_le32(inode->i_uid.val);
 			break;
 		case ATTR_GID:
-			pi->i_gid = cpu_to_le32(inode->i_gid);
+			pi->i_gid = cpu_to_le32(inode->i_gid.val);
 			break;
 		case ATTR_SIZE:
 			pi->i_size = cpu_to_le64(inode->i_size);
diff --git a/fs/pmfs/super.c b/fs/pmfs/super.c
index 7f708e8..728fbcf 100644
--- a/fs/pmfs/super.c
+++ b/fs/pmfs/super.c
@@ -676,8 +676,8 @@ static int pmfs_fill_super(struct super_block *sb, void *data, int silent)
 	/* Init with default values */
 	INIT_LIST_HEAD(&sbi->block_inuse_head);
 	sbi->mode = (S_IRWXUGO | S_ISVTX);
-	sbi->uid = current_fsuid();
-	sbi->gid = current_fsgid();
+	sbi->uid = current_fsuid().val;
+	sbi->gid = current_fsgid().val;
 	set_opt(sbi->s_mount_opt, XIP);
 	clear_opt(sbi->s_mount_opt, PROTECT);
 	set_opt(sbi->s_mount_opt, HUGEIOREMAP);





More information about the Linux-pmfs mailing list