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, rickReceived 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