Re: nfs4.1+: workaround for defunct clientaddr?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 03.10.22 um 14:26 schrieb Jeff Layton:
> On Mon, 2022-10-03 at 13:55 +0200, Manfred Schwarb wrote:
>> Am 03.10.22 um 13:39 schrieb Jeff Layton:
>>> On Sun, 2022-10-02 at 14:35 +0200, Manfred Schwarb wrote:
>>>> Hi,
>>>>
>>>> I have 2 boxes connected with 2 network cards each, one
>>>> crossover connection and one connection via LAN.
>>>> I want to use the crossover connection for backup,
>>>> so I want to be able to select exactly this wire when
>>>> doing my NFS backup transfers. Everything interconnected via NFS4.1
>>>> and automount.
>>>>
>>>> Now the thing is, if there is an already existing connection
>>>> via LAN, I am not able to select the crossover connection,
>>>> there is some session reuse against my will.
>>>>
>>>> automount config:
>>>> /net/192.168.99.1  -fstype=nfs4,nfsvers=4,minorversion=1,clientaddr=192.168.99.100   /  192.168.99.1:/
>>>> /net2/192.168.98.1 -fstype=nfs4,nfsvers=4,minorversion=1,clientaddr=192.168.98.100   /  192.168.98.1:/
>>>>
>>>> mount -l:
>>>> 192.168.99.1:/data on /net/192.168.99.1/data type nfs4 (...,clientaddr=192.168.99.100,addr=192.168.99.1)
>>>> 192.168.99.1:/data on /net2/192.168.98.1/data type nfs4 (...,clientaddr=192.168.99.100,addr=192.168.99.1)
>>>>
>>>> As you see, both connections are on "192.168.99.1:/data", and the backup runs
>>>> over the same wire as all user communication, which is not desired.
>>>> This even happens if I explicitly set some clientaddr= option.
>>>>
>>>> Now I found two workarounds:
>>>> - downgrade to NFS 4.0, clientaddr seems to work with it
>>>> - choose different NFS versions, i.e. one connection with
>>>>   minorversion=1 and the other with minorversion=2
>>>>
>>>> Both possibilities seem a bit lame to me.
>>>> Are there some other (recommended) variants which do what I want?
>>>>
>>>> It seems different minor versions result in different "nfs4_unique_id" values,
>>>> and therefore no session sharing occurs. But why do different network
>>>> interfaces (via explicitly set clientaddr= by user) not result in different
>>>> "nfs4_unique_id" values?
>>>>
>>>> Thanks for any comments and advice,
>>>> Manfred
>>>
>>> That sounds like a bug. We probably need to compare the clientaddr
>>> values in nfs_compare_super or nfs_compare_mount_options so that it
>>> doesn't match if the clientaddrs are different.
>>>
>
>
> Actually, I take it back, clientaddr is specifically advertised as being
> for NFSv4.0 only. The workaround for you is "nosharecache", which will
> force the mount under /net2 to get a new superblock altogether.

But clientaddr is silently accepted on NFS4.1+, and seemingly silently does nothing.

The point is, RFC5661 explicitely tells
"NFS minor version 1 is deemed superior to NFS minor version 0 with no loss of functionality".

So this behavior comes as a surprise.

>
>>> As a workaround, you can probably mount the second mount with
>>> -o nosharecache and get what you want.
>>
>> Indeed, nosharecache works. But the man page has some scary words for it:
>>   "This is considered a data risk".
>>
>
> Yeah, it does sound scary but it's not a huge issue unless you're doing
> I/O to the same files at the same time via both mounts. With
> "sharecache" (the default) you get better cache coherency in that
> situation since the inode and its pagecache are the same.
>

So I guess this is equivalent to the minorversion=1/minorversion=2 trick
cache coherency wise then?


> With "nosharecache" you need to be more careful to flush caches, etc. if
> you are doing reads and writes to the same files via different paths. If
> you need careful coordination there, then you probably want to use file
> locking.

Thanks for these explanations, it is appreciated!
Manfred

> --
> Jeff Layton <jlayton@xxxxxxxxxx>





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux