On Thu, Sep 4, 2014 at 1:33 AM, Rohan Puri <rohan.puri15@xxxxxxxxx> wrote: > On Wed, Sep 3, 2014 at 10:50 PM, Joshi <joshiiitr@xxxxxxxxx> wrote: >> >> Thanks Pranay. Please see below- >> >> On Mon, Sep 1, 2014 at 10:19 AM, Pranay Srivastava <pranjas@xxxxxxxxx> wrote: >> > >> > On 01-Sep-2014 10:18 AM, "Pranay Srivastava" <pranjas@xxxxxxxxx> wrote: >> >> >> >> >> >> On 30-Aug-2014 10:49 AM, "Joshi" <joshiiitr@xxxxxxxxx> 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. Yes, it can happen. Race condition for your case can happen either due to page mapping removed or dentry removed from cache.Cases that I can think of are invalidations/truncation of page mapping happening (truncate, file delete, file hole punching) & as default IO is async so dentry can be evicted due to load as in fsstress by the time you print filename. >> >> >> >> 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@xxxxxxxxxxxxxxxxx >> >> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> >> >> >> -- >> Joshi >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@xxxxxxxxxxxxxxxxx >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > Make use of proper synchronization stuff as Pranay pointed out. Btw, what is the use case you need this for ? (just curious to know) - Rohan _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies