Re: [PATCH] cifs: Fixed OFD locks do not conflict with eachother

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

 



Fix: 2е письмо с "правильной" почты
----
С Уважением, Георгий gkot Быстренин
ср, 19 дек. 2018 г. в 21:10, Георгий Быстренин <gochankot@xxxxxxxxx>:
>
> While resolving a bug with locks on samba shares found a strange behavior.
> When a file locked by one node and we trying to lock it from another node
> it fail with errno 5 (EIO) but in that case errno must be set to
> (EACCES | EAGAIN).
> This isn't happening when we try to lock file second time on same node.
> In this case it returns EACCES as expected.
> Also this issue not reproduces when we use SMB1 protocol (vers=1.0 in
> mount options).
>
> Further investigation showed that the mapping from status_to_posix_error
> is different for SMB1 and SMB2+ implementations.
> For SMB1 mapping is [NT_STATUS_LOCK_NOT_GRANTED to ERRlock]
> (https://github.com/torvalds/linux/blob/master/fs/cifs/netmisc.c#L66)
> but for SMB2+ mapping is [STATUS_LOCK_NOT_GRANTED to -EIO]
> (https://github.com/torvalds/linux/blob/master/fs/cifs/smb2maperror.c#L383)
>
> Quick changes in SMB2+ mapping from EIO to EACCES has fixed issue.
>
> BUG: https://bugzilla.kernel.org/show_bug.cgi?id=201971
>
> Signed-off-by: Georgy A Bystrenin <gkot@xxxxxxxxxxxx>
> ---
>  fs/cifs/smb2maperror.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cifs/smb2maperror.c b/fs/cifs/smb2maperror.c
> index 62c88dfed57b..d7e839cb773f 100644
> --- a/fs/cifs/smb2maperror.c
> +++ b/fs/cifs/smb2maperror.c
> @@ -378,8 +378,8 @@ static const struct status_to_posix_error
> smb2_error_map_table[] = {
>         {STATUS_NONEXISTENT_EA_ENTRY, -EIO, "STATUS_NONEXISTENT_EA_ENTRY"},
>         {STATUS_NO_EAS_ON_FILE, -ENODATA, "STATUS_NO_EAS_ON_FILE"},
>         {STATUS_EA_CORRUPT_ERROR, -EIO, "STATUS_EA_CORRUPT_ERROR"},
> -       {STATUS_FILE_LOCK_CONFLICT, -EIO, "STATUS_FILE_LOCK_CONFLICT"},
> -       {STATUS_LOCK_NOT_GRANTED, -EIO, "STATUS_LOCK_NOT_GRANTED"},
> +       {STATUS_FILE_LOCK_CONFLICT, -EACCES, "STATUS_FILE_LOCK_CONFLICT"},
> +       {STATUS_LOCK_NOT_GRANTED, -EACCES, "STATUS_LOCK_NOT_GRANTED"},
>         {STATUS_DELETE_PENDING, -ENOENT, "STATUS_DELETE_PENDING"},
>         {STATUS_CTL_FILE_NOT_SUPPORTED, -ENOSYS,
>         "STATUS_CTL_FILE_NOT_SUPPORTED"},
> --
> 2.17.1



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux