Thanks Pranay. Please see below- On Mon, Sep 1, 2014 at 10:19 AM, Pranay Srivastava <pranjas@gmail.com> wrote:
On 01-Sep-2014 10:18 AM, "Pranay Srivastava" <pranjas@gmail.com> wrote:
On 30-Aug-2014 10:49 AM, "Joshi" <joshiiitr@gmail.com> wrote:
I am trying to obtain file name at block layer level (above IO scheduler). At this level I receive bio structure, within which page pointers are kept.
Thereby I do following to obtain the inode and dentry -
struct inode *inode_ptr = page->mapping->host; if (inode_ptr != NULL) /* Access dentry i.e. i_dentry in the inode */
Are you doing this in readpage(s) or writepage(s) callback? If that's the case your page would be locked and dentry/inode wouldn't go away.
If you are doing something else then first make sure you do lock_page and proceed only if you get that page lock.
I am not operating at file-system level. I am operating on the bio that file-system(or any other component above IO scheduler) might have sent. Do you think that page descriptor kept in bio (for write) is going to vanish? I am not accessing the data of the page, just the page->mapping pointer.
Second you can try dget and dput before you start working with dentry.
I will try that.
This works usually. But problem is, inode and dentry may get released from inode and dentry cache at any time. While accessing inode/dentry I need to ensure that till the time I am accessing'em these structure remain valid in memory. Is it possible to ensure that? Which structures/locks I need to check for the purpose.
is this your observation from your test case? Can you explain your test case a bit.
No, normally I obtain file name. But with fsstress, this causes crash.
Have you seen d_alias and see if that can help you with filename?
I do get filename from dentry. But while I am accessing that, it can be freed by vfs.
Appreciate any help.
Thanks!
-- Joshi
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Joshi