NetBSD-Users archive

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

Re: UFS fragments



On Wed, 13 Jul 2016, Michael van Elst wrote:
> Fragments are just the last (partial) block of a file. Fragments from 
> multiple files can be combined into a single block to save space, 
> especially for small files.

Thanks for replying. I'm assuming then that the metadata for each file 
just points to a set of extents, and thus it doesn't matter if the files 
are tiny and not occupying a full logical block. Of course, I wonder then 
what the point of a logical block is at all. However, I suspect this will 
make itself more apparent as I read more code. 

> When a file is extended, the partial block may need more space than is 
> available or may even require a full block for itself. Then it is 
> re-allocated.

That makes good sense and is what I was pretty much expecting. I just 
couldn't identify if the reallocation copied the fragment into a new block 
or did some kind of pointer magic to truncate the block and point to a new 
spot where there was more space. Ie.. I don't know how it works or what 
I'm doing and was just groping around trying to understand. :-)

> This has little to do with contiguous block allocation.

Okay, thanks.

> The filesystem code needs to find out wether an operation is allowed. 
> You need something like 'user id', 'set of group ids' and 'has superuser 
> privileges' for the entity that started the operation, and that's 
> abstracted into 'cred'.

Ahhh. Okay. After reading this I found the kauth(9) manual page and Elad 
Efrat does a really great job of documenting the kernel authorization 
framework. I was Googling and man'ing all the wrong things at first.

> ffs_alloc() panics when called with NOCRED but not FSCRED.

Heh, that part I figured when I saw this 2-liner: 

        if (cred == NOCRED)
                panic("ffs_alloc: missing credential");

However, since I'm pretty unfamiliar with the kernel code or even more 
than primitive concepts, I didn't know about the kauth system.

> The code isn't even used for modern hard drives because it doesn't make 
> sense with all the hidden buffering and queuing going on.

That's understandable. I was doing some more reading based on this trying 
to figure out how you knew that. I looked at ffs_dirpref() which has a lot 
of logic and rules around how to hunt for cylinder groups. However, I got 
lost pretty quickly. Some of the comments were helpful/insightful, but I'm 
not used to reading code this terse and compact with soooo many external 
references and includes. Ie.. the kernel is a big project and I've only 
done small rinky-dink 30-40 .c and .h file projects, so it's stretching my 
limits (a good thing). My own code uses very long and descriptive variable 
names and that seems to annoy most other coders. However, it's a good 
crutch for when I come back to read something I wrote 6 months back... 
It's just my own style and weaknesses showing. I'm not criticizing the 
kernel code (I'm not smart enough to do that) !

Right now I'm reading code to understand this:
" 
 *   2) quadradically rehash into other cylinder groups, until an
 *      available inode is located.
"

But it's just part of the tour. I'll figure it out or ask more intelligent 
questions. Thanks again for your insight and help.

-Swift



Home | Main Index | Thread Index | Old Index