locking questions (regarding file systems)

Eric Anderson anderson at centtech.com
Thu Aug 3 18:13:17 UTC 2006


On 08/03/06 01:14, R. B. Riddick wrote:
> --- Eric Anderson <anderson at centtech.com> wrote:
>> # here use_count is 1
>> 	error = vflush(mp, 1, flags, td);
>> 	if (error)
>> 		return (error);
>> 		
>> 	DROP_GIANT();
>> 	g_topology_lock();
>> # this is where the use_count is now zero, and it blocks
>> 	g_vfs_close(cp, td);
>> 	g_topology_unlock();
>> 	PICKUP_GIANT();
>> 	vrele(devvp);
>> 	
>> Is it blocking because the use_count is already 0?  Is the vflush 
>> breaking things?
>>
>>From the man page of vflush() I would guess, that u call it too early or
> unnecessarily...
> 
> My feeling says: Open & Close it... ;-)
> 
> Or did u read a tutorial, that said u should do vflush() and vrele()?
> I personally find that both calls should be done in the close() function...

Hahahah! A tutorial! :)  I'd *love* to read a tutorial on this, but I 
can't find one!

>> Actually, I misinformed you earlier - I can't actually unmount, because 
>> it hangs during the first unmount.  It will only unmount successfully if 
>> I remove the block above (the DROP_GIANT down to PICKUP_GIANT).
>>
> Hmm... Did u try to run without vflush() and vrele()? :-)


I've tried getting rid of the vrele and vflush, and that doesn't help.

Any other ideas?  I have to be missing something very simple here..

Eric


-- 
------------------------------------------------------------------------
Eric Anderson        Sr. Systems Administrator        Centaur Technology
Anything that works is better than anything that doesn't.
------------------------------------------------------------------------


More information about the freebsd-fs mailing list