code: func (s *Server) OpenV3(p *Packet) (interface{}, error) {
  	req := new(RequestOpenV3)
  	err := UnmarshalBinary(p.Payload, req)
  	if err != nil {
  		return nil, err
  	}
  
  	session, err := s.getSession(p)
  	if err != nil {
  		return nil, err
  	}
  
  	name := req.FileName.Path()
  
  	if req.DesiredLock != LockNone {
  		return nil, &Status{
  			Err:  fmt.Errorf("open lock type=%d not supported for file %q", req.DesiredLock, name),
  			Code: StatusOperationNotSupported,
  		}
  	}
  
  	file, err := s.OpenFile(name, req.OpenMode)
  	if err != nil {
  		return nil, err
  	}
  
  	res := &ReplyOpenV3{
  		Handle: s.newHandle(),
  	}
  
  	session.mu.Lock()
  	session.files[res.Handle] = file
  	session.mu.Unlock()
  
  	return res, nil
  }
docs: // OpenV3 handles OpOpenV3 requests