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