How to safely access inode/dentry obtained from struct page *?

Joshi joshiiitr at gmail.com
Wed Sep 3 13:20:14 EDT 2014


Thanks Pranay. Please see below-

On Mon, Sep 1, 2014 at 10:19 AM, Pranay Srivastava <pranjas at gmail.com> wrote:
>
> On 01-Sep-2014 10:18 AM, "Pranay Srivastava" <pranjas at gmail.com> wrote:
>>
>>
>> On 30-Aug-2014 10:49 AM, "Joshi" <joshiiitr at 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 at kernelnewbies.org
>> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



-- 
Joshi



More information about the Kernelnewbies mailing list