g_access questions (Out on a limb here)

Eric Anderson anderson at centtech.com
Wed Nov 15 18:57:49 UTC 2006


On 11/15/06 12:09, Shane Adams wrote:
> Thanks for the reply,
> 
> Can you mount the same device/file more than once at a time?
> 
> Shane

Yes, which screws up my testing sometimes.  :)

Eric



> ----- Original Message ----
> From: Eric Anderson <anderson at centtech.com>
> To: Shane Adams <adamsch1 at yahoo.com>
> Cc: freebsd-geom at freebsd.org
> Sent: Wednesday, November 15, 2006 6:03:35 AM
> Subject: Re: g_access questions (Out on a limb here)
> 
> On 11/14/06 17:00, Shane Adams wrote:
>> Hello,
>>
>> I have a question regarding g_access.  I'm mounting a custom filesytem twice against the same device.  The first time I'm mounting it with read/write access, I then mount the same device to a different mount point.  After I do this, the first mount starts getting write errors, so somehow the second mount is screwing up access rights to the device.  For what its worth, I'm mounting a ram backed mdconfig device.
>>
>> I'm not sure if this is a geom related issue, or related to the fact that you cannot mount a device more than twice in vfs?
>>
>> Anyway - the first time I mount (R/W) I do:
>>
>> g_access(cp, 1,1, 0)
>>
>> I then mount the device again as read only to a different mount point with 
>>
>> g_access(cp,1,0,0)
>>
>> The code I used is taken from g_vfs_open with wr flag set depending if write access is required:
>>
>>    pp = g_dev_getprovider(vp->v_rdev);
>>         if (pp == NULL)
>>                 return (ENOENT);
>>         gp = g_new_geomf(&g_vfs_class2, "%s.%s", fsname, pp->name);
>>         cp = g_new_consumer(gp);
>>         g_attach(cp, pp);
>>         error = g_access(cp, 1, wr, 0);
>>         if (error) {
>>                 g_wither_geom(gp, ENXIO);
>>                 return (error);
>>         }
> 
> 
> Interesting.. I'm mounting a custom file system also, and I'm doing it 
> much differently:
> 
> [...]
>     struct vnode *devvp;    /* vnode of the mount device */
>     struct g_consumer *cp;
> [...]
>     DROP_GIANT();
>     g_topology_lock();
>     error = g_vfs_open(devvp, &cp, "tarfs", 0);
>     g_topology_unlock();
>     PICKUP_GIANT();
>     VOP_UNLOCK(devvp, 0, td);
> [...]
> 
> 
> Eric
> 
> 
> 


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


More information about the freebsd-geom mailing list