[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