Inode number changing
Manish Katiyar
mkatiyar at gmail.com
Thu Mar 22 11:26:14 EDT 2012
On Fri, Mar 9, 2012 at 11:02 AM, Ganesh Patil <patil.ganesh170 at gmail.com> wrote:
>
>
> On Sat, Mar 10, 2012 at 12:18 AM, Manish Katiyar <mkatiyar at gmail.com> wrote:
>>
>> > Sir, every time when I modify file content then file's inode get change.
>> > Why this is happening?
>> > Below I have pasted the output please check inode numbers.
>>
>> Without looking at the code and knowing what you are doing, its close
>> to impossible to say what inode you are accessing or what you are
>> doing. On my wildest guess, I can think of that you are probably
>> trying to modify something in editor, and the inode number that is
>> getting printed is one of the temp files that the editor may be
>> creating underneath( similar to .swp files of vi).
>>
>>
>> --
>> Thanks -
>> Manish
>
>
> Yes sir, I am trying to modify my file in vim editor.
> below I have pasted my code :
> #include <linux/kernel.h>
> #include<linux/module.h>
> #include<linux/fs.h>
> #include<linux/namei.h>
> #include<linux/path.h>
> #include<linux/mount.h>
> #include<linux/myheader.h>
> struct ext4_inode1 {
> __le16 i_mode; /* File mode */
> __le16 i_uid; /* Low 16 bits of Owner Uid */
> __le32 i_size_lo; /* Size in bytes */
> __le32 i_atime; /* Access time */
> __le32 i_ctime; /* Inode Change time */
> __le32 i_mtime; /* Modification time */
> __le32 i_dtime; /* Deletion Time */
> __le16 i_gid; /* Low 16 bits of Group Id */
> __le16 i_links_count; /* Links count */
> __le32 i_blocks_lo; /* Blocks count */
> __le32 i_flags; /* File flags */
> union {
> struct {
> __le32 l_i_version;
> } linux1;
> struct {
> __u32 h_i_translator;
> } hurd1;
> struct {
> __u32 m_i_reserved1;
> } masix1;
> } osd1; /* OS dependent 1 */
> __le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
> __le32 i_generation; /* File version (for NFS) */
> __le32 i_file_acl_lo; /* File ACL */
> __le32 i_size_high;
> __le32 i_obso_faddr; /* Obsoleted fragment address */
> union {
> struct {
> __le16 l_i_blocks_high; /* were l_i_reserved1 */
> __le16 l_i_file_acl_high;
> __le16 l_i_uid_high; /* these 2 fields */
> __le16 l_i_gid_high; /* were reserved2[0] */
> __u32 l_i_reserved2;
> } linux2;
> struct {
> __le16 h_i_reserved1; /* Obsoleted fragment
> number/size which are removed in ext4 */
> __u16 h_i_mode_high;
> __u16 h_i_uid_high;
> __u16 h_i_gid_high;
> __u32 h_i_author;
> } hurd2;
> struct {
> __le16 h_i_reserved1; /* Obsoleted fragment
> number/size which are removed in ext4 */
> __le16 m_i_file_acl_high;
> __u32 m_i_reserved2[2];
> } masix2;
> } osd2; /* OS dependent 2 */
> __le16 i_extra_isize;
> __le16 i_pad1;
> __le32 i_ctime_extra; /* extra Change time (nsec << 2 |
> epoch) */
> __le32 i_mtime_extra; /* extra Modification time(nsec << 2 |
> epoch) */
> __le32 i_atime_extra; /* extra Access time (nsec << 2 |
> epoch) */
> __le32 i_crtime; /* File Creation time */
> __le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 |
> epoch) */
> __le32 i_version_hi; /* high 32 bits for 64-bit version */
> };
> typedef struct ext4_inode ext4_inode1;
> extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *);
>
> int init_module(void)
> {
> char buf[200]="/mnt/one/a.txt";
>
> struct nameidata nd;
> struct path path1;
> struct dentry *dentry1;
> struct inode *d_inode1;
> struct ext4_iloc iloc;
> int ret,i;
> struct ext4_inode *e4_inode=NULL;
> ext4_inode1 *m1;
> path_lookup(buf, LOOKUP_CONTINUE, &nd);
> path1=nd.path;
> dentry1=path1.dentry;
> d_inode1=dentry1->d_inode;
> m1 = (ext4_inode1 *) kmalloc (sizeof (ext4_inode1), GFP_KERNEL);
> //m1->i_ino=d_inode1->i_ino;
> printk(KERN_INFO "inode no of file=%ld",d_inode1->i_ino);
> ret= ext4_get_inode_loc(d_inode1, &iloc);
> e4_inode= ext4_raw_inode(&iloc);
> m1->i_size_lo=e4_inode->i_size_lo;
> printk(KERN_INFO "size of file =%d",e4_inode->i_size_lo);
> printk(KERN_INFO "size of file copied =%d",m1->i_size_lo);
> printk(KERN_INFO "data blocks=");
> for(i=0;i<5;i++)
> {
> printk(KERN_INFO "%d",e4_inode->i_block[i]);
> }
> return 0;
> }
> void cleanup_module(void)
> {
> printk(KERN_INFO "Goodbye world 1.\n");
> }
Did you get an answer for this ? Did you try writing through 'dd'.
Also what were your original inode numbers ?
--
Thanks -
Manish
More information about the Kernelnewbies
mailing list