Re: [lustre-devel] insanity in ll_dirty_page_discard_warn()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm also working on a fix in osc_completion where rc=-ENOMEM, and a bunch
of the asserts are not true since various structures haven't been
initialized yet, so there is definitely some work to be done in the area.

-Ben

On 7/28/16, 3:25 PM, "lustre-devel on behalf of Oleg Drokin"
<lustre-devel-bounces@xxxxxxxxxxxxxxxx on behalf of oleg.drokin@xxxxxxxxx>
wrote:

>
>On Jul 28, 2016, at 2:26 PM, Al Viro wrote:
>
>>        /* this can be called inside spin lock so use GFP_ATOMIC. */
>>        buf = (char *)__get_free_page(GFP_ATOMIC);
>>        if (buf) {
>>                dentry = d_find_alias(page->mapping->host);
>> 	...
>> 	if (dentry)
>> 		dput(dentry);
>> 
>> If it *can* be called under a spinlock, you have an obvious problem -
>> dput() can sleep.  d_find_alias() might've picked a hashed dentry with
>> zero refcount that got unhashed by the time of dput().  Or other
>>references
>> used to exist, but got dropped by that point...
>
>Ah, the dput()->dentry_kill()->cpu_relax() I guess?
>
>(the final iput cannot catch us here, I think, because we still have pages
>in the mapping)
>
>HmŠ So the original reported path was:
>            ll_dirty_page_discard_warn at ffffffffa0a3d252 [lustre]
>            vvp_page_completion_common at ffffffffa0a7adfc [lustre]
>            vvp_page_completion_write_common at ffffffffa0a7ae6b [lustre]
>            vvp_page_completion_write at ffffffffa0a7b83e [lustre]
>            cl_page_completion at ffffffffa05eed8f [obdclass]
>            osc_completion at ffffffffa0880812 [osc]
>            osc_ap_completion at ffffffffa086a544 [osc]
>            brw_interpret at ffffffffa0876d69 [osc]
>
>But we don't even have a call to osc_ap_completion from brw_interpret
>anymore.
>
>osc_ap_completion() itself has a comment that it is to be called under
>cl_loi_list_lock, but then tries to take it itself, so the comment
>is definitely stale.
>And osc_completion() is called outside of that coverage.
>
>I tend to think the comment is stale now, but need to do some more
>investigations
>before I am 100% sure of that.
>
>Thanks for bringing it to our attention.
>_______________________________________________
>lustre-devel mailing list
>lustre-devel@xxxxxxxxxxxxxxxx
>http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org

--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux