You can use the catalogPath property of an ArcPy Describe object instead of the dataSource property of an ArcPy Mapping Layer object. I prefer this approach because often times I am working with layer names as strings instead of layers as layer objects. Also, using the ArcPy Describe function works if you are in a standalone script that doesn't involve a map document.
Depending on the circumstances, I either write a normal function or a lambda function to get the catalog path, and then call the function and pass the layer name in the search cursor:
dataSource = lambda in_layer: arcpy.Describe(in_layer).catalogPath
with arcpy.da.SearchCursor(dataSource(layer_name), fields) as cur:
...