I'm a tad confused why you're posting what is essentially an opengl question to the cocos2d forum. Your scrolling method is pure opengl- there's pretty much nothing cocos2d about it.
My game scrolls seamlessly at 60fps even at extremely high or extremely low speeds using pure cocos2d methods. What I did was to make my background an AtlasSpriteManager, then slice the texture up into an array of equal sized strips, each corresponding to an AtlasSprite. I then overrode the setPosition function of the layer and added a function that positions the strips correctly so that they are constantly following and staying in the viewable area. As the camera moves left to right, the leftmost strip will keep getting repositioned forward an amount equal to (number of strips * width of a strip), and vice-versa for scrolling in the opposite direction. I can vary the background as if it were tiled by repositioning the source rect of the AtlasSprite when it is moved.