Find the answer to your Linux question:
Results 1 to 2 of 2
Hi, I wrote small code in read_write.c in linux-2.6.35.4/fs/. I am trying to retrieve entire path of some file where read operation is being performed. I changed 'SYSCALL_DEFINE3(read, unsigned int, ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Nov 2006
    Posts
    9

    kernel code not working


    Hi,
    I wrote small code in read_write.c in linux-2.6.35.4/fs/. I am trying to retrieve entire path of some file where read operation is being performed. I changed 'SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)' to call my function 'getEntirePath(file->f_dentry, path, &length)'.
    The definition of getEntirePath is as follows:

    Code:
    void getEntirePath(struct dentry *self, char *filePath, int *length)
    {
    	int i=0;
    	//int offset;
    	int MAX_PATH_DEPTH=30;
    	char stack[MAX_PATH_DEPTH][40];
    
    	do
    	{	
    		strcpy(stack[i], self->d_name.name);
    		printk("swapnil: Dir::%s",stack[i]);		
    		if(i!=0 && stack[i][0]!='/')
    		{
    			stack[i][self->d_name.len]='/';
    		}
    		self=self->d_parent;
    	}while(stack[i++][0]!='/' && i<MAX_PATH_DEPTH);
    
    	while(i>0)
    		strcat(filePath,stack[--i]);
    	*length=strlen(filePath);
    }
    This code takes the dentry *self as input parameter and should trace back the path up to '/'.
    This code hangs as soon as I enable it through a driver. Also I want to know from which function I should call this code for getting the entire path of file being read/written? I called it from vfs_write/vfs_read, do_sync_write/do_sync_read, but the function is not getting called each time some file is read/wrote.


    Thanks for help.

  2. #2
    Just Joined!
    Join Date
    Nov 2006
    Posts
    9
    Someone please answer, my project is stuck due to this.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •