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

_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to