0

Making a kernel module to link an inode to a directory. Beginner so on the learning curve. The plan is to resolve the directory to an inode, find its superblock and then get the inode from the file with iget_locked, finally link that inode into the dentry of the target directory and increment its link count.

tony wallace
  • 135
  • 6
  • 1
    Possible duplicate of [How to obtain a pathname or dentry or struct file from a given inode?](https://stackoverflow.com/q/8556461/608639), [How to find a dentry from an inode/pathname?](https://stackoverflow.com/q/43235313/608639), etc. – jww May 07 '18 at 03:54

1 Answers1

1

syscall stat will take a pathname as input and dump a stat struct.

int stat(const char *pathname, struct stat *statbuf);

The inode to the file can be find as a member of the struct:

       struct stat {
           dev_t     st_dev;         /* ID of device containing file */
           ino_t     st_ino;         /* Inode number */
           mode_t    st_mode;        /* File type and mode */
           nlink_t   st_nlink;       /* Number of hard links */
           uid_t     st_uid;         /* User ID of owner */
           gid_t     st_gid;         /* Group ID of owner */
           dev_t     st_rdev;        /* Device ID (if special file) */
           off_t     st_size;        /* Total size, in bytes */
           blksize_t st_blksize;     /* Block size for filesystem I/O */
           blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */

           /* Since Linux 2.6, the kernel supports nanosecond
              precision for the following timestamp fields.
              For the details before Linux 2.6, see NOTES. */

           struct timespec st_atim;  /* Time of last access */
           struct timespec st_mtim;  /* Time of last modification */
           struct timespec st_ctim;  /* Time of last status change */

       #define st_atime st_atim.tv_sec      /* Backward compatibility */
       #define st_mtime st_mtim.tv_sec
       #define st_ctime st_ctim.tv_sec
       };

Referring to manpage stat(2). Hope this answers your question.

Zzyzx
  • 501
  • 3
  • 7