On Thu, Sep 4, 2014 at 1:33 AM, Rohan Puri <rohan.puri15@gmail.com> wrote:
On Wed, Sep 3, 2014 at 10:50 PM, Joshi <joshiiitr@gmail.com> wrote:
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.
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@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Joshi
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org 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