inode_operations, предупреждение: инициализация из несовместимого типа указателя

Я пытаюсь скомпилировать простую программу ядра, которая читает и записывает из файла proc.

Я пытаюсь установить разрешение для этого файла, переопределив разрешение fp в структуре inode_operations (.permission)

static int module_permission(struct inode *inode, int op, struct nameidata *foo)

{ . . . }

static struct inode_operations Inode_Ops
        .permission = module_permission,        /* check for permissions */
Our_Proc_File = { .permission = module_permission, /* check for permissions */

};

Our_Proc_File->proc_iops = &Inode_Ops
        .permission = module_permission,        /* check for permissions */
Our_Proc_File;

По какой-то причине, когда я компилирую это, я получаю -> предупреждение: инициализация из несовместимого типа указателя в следующей строке:

        .permission = module_permission,        /* check for permissions */

Есть идеи, как это решить?

Спасибо!


person djTeller    schedule 08.05.2010    source источник


Ответы (1)


Какую версию ядра вы используете? Я использую 2.6.33, и вот как объявляется inode_operations:

struct inode_operations {
    ...
int (*permission) (struct inode *, int);
    int (*check_acl)(struct inode *, int);
int (*setattr) (struct dentry *, struct iattr *);
    int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
    ...
}

Если в вашем ядре есть то же самое, тогда сигнатура функции вашей функции module_permission будет (struct inode *, int, struct nameidata *), где, как ожидает .permission (struct inode *, int)

person Bandan    schedule 08.05.2010
comment
Linux ubuntu 2.6.28-18-generic # 59-Ubuntu SMP Вы правы, я искал неправильный заголовок файловой системы (fs.h) int (* разрешение) (struct inode *, int); Большое спасибо! - person djTeller; 09.05.2010