Re: ffs_truncate3 panics

From: Rick Macklem <rmacklem_at_uoguelph.ca>
Date: Thu, 9 Aug 2018 20:38:50 +0000
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
Received on Thu Aug 09 2018 - 18:38:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:17 UTC