ffs_truncate3 panics

Rick Macklem rmacklem at uoguelph.ca
Thu Aug 9 20:38:53 UTC 2018


Konstantin Belousov wrote:
[stuff snipped]
>I wrote:
>>
>> I can add printf()s anywhere you suggest, but I'm not sure how you would catch
>> this case sooner? (For example, I could print out di_extsize at the beginning of
>> ffs_truncate(), if that would help?)
>May be, add a loop at the beginning of ffs_truncate(), over all buffers
>on both clean and dirty queues, calculating number of buffers with
>b_lblkno < 0 and >= -UFS_NXADDR. Print some diagnostic if such buffer is
>detected but di_extsize is zero.
Ok, I can do that. These failures don't occur that often, so it might take a while
to get one.

>BTW, does NFS server use extended attributes ?  What for ?  Can you, please,
>point out the code which does this ?
For the pNFS service, there are two system namespace extended attributes for
each file stored on the service.
pnfsd.dsfile - Stores where the data for the file is. Can be displayed by the
     pnfsdsfile(8) command.

pnfsd.dsattr - Cached attributes that change when a file is written (size, mtime,
change) so that the MDS doesn't have to do a Getattr on the data server for every client Getattr.


The code is in sys/fs/nfsserver/nfs_nfsdport.c and
sys/fs/nfsserver/nfs_nfsdserv.c. Just grep for vn_extattr to see the code.

I did notice that my code locks the vnode first and then calls vn_start_write()
 for the vn_extattr_set() calls, whereas the syscall code locks the vnode after the vn_start_write() call.

Does that matter?


Thanks, rick



More information about the freebsd-current mailing list