Reading and Writing to Block from di_spare

David Schultz das at FreeBSD.ORG
Thu Jan 17 11:45:18 PST 2008

On Thu, Jan 17, 2008, Adam wrote:
> Hi, I am working on a project for where I want to take the standard  
> UFS/FFS file system that BSD ships with and add several blocks of  
> information to the dinode.  The simplest way of doing it seemed to be  
> to allocate blocks to di_spare.  I believe that I have figured out how  
> to do that:
> ffs_alloc(inode, 0 , 0, (int)(inode->i_fs->fs_bsize), td->td_ucred,  
> &addr);
> dinode->di_spare[1]=(int64_t)addr;
> I'm having problems taking that block address and reading/writing to  
> it.   As far as I can tell most of the buffer read routines (getblk,  
> bread) seem to be geared toward reading and writing direct and  
> indirect blocks in an inode.
> How do I read and write a block that is neither a direct nor an  
> indirect block?

Maybe I'm misunderstanding your question, but I don't see how you
could expect FreeBSD to have routines to read and write things
that don't exist in FreeBSD. :)

See extattr(2). It may be possible that the "extra information"
you want to store with files can be stored in user space using the
relatively standard extended attributes API.

More information about the freebsd-current mailing list