diff options
| author | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2025-09-13 15:00:48 +0100 | 
|---|---|---|
| committer | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2025-09-13 15:00:48 +0100 | 
| commit | 421d4487ef2ead206f57a8950ea9bdd1f7a7b39a (patch) | |
| tree | b679546eeaa70f88b5c8d6caeb79e214efb68121 /fs/netfs | |
| parent | 3422b4bc606eee2ba7758ea9347c83332eeec3e3 (diff) | |
| parent | 1b237f190eb3d36f52dffe07a40b5eb210280e00 (diff) | |
Merge tag 'v6.17-rc3' into togreg
Linux 6.17-rc3
Diffstat (limited to 'fs/netfs')
| -rw-r--r-- | fs/netfs/read_collect.c | 4 | ||||
| -rw-r--r-- | fs/netfs/write_collect.c | 10 | ||||
| -rw-r--r-- | fs/netfs/write_issue.c | 4 | 
3 files changed, 13 insertions, 5 deletions
| diff --git a/fs/netfs/read_collect.c b/fs/netfs/read_collect.c index 3e804da1e1eb..a95e7aadafd0 100644 --- a/fs/netfs/read_collect.c +++ b/fs/netfs/read_collect.c @@ -281,8 +281,10 @@ reassess:  		} else if (test_bit(NETFS_RREQ_SHORT_TRANSFER, &rreq->flags)) {  			notes |= MADE_PROGRESS;  		} else { -			if (!stream->failed) +			if (!stream->failed) {  				stream->transferred += transferred; +				stream->transferred_valid = true; +			}  			if (front->transferred < front->len)  				set_bit(NETFS_RREQ_SHORT_TRANSFER, &rreq->flags);  			notes |= MADE_PROGRESS; diff --git a/fs/netfs/write_collect.c b/fs/netfs/write_collect.c index 0f3a36852a4d..cbf3d9194c7b 100644 --- a/fs/netfs/write_collect.c +++ b/fs/netfs/write_collect.c @@ -254,6 +254,7 @@ reassess_streams:  			if (front->start + front->transferred > stream->collected_to) {  				stream->collected_to = front->start + front->transferred;  				stream->transferred = stream->collected_to - wreq->start; +				stream->transferred_valid = true;  				notes |= MADE_PROGRESS;  			}  			if (test_bit(NETFS_SREQ_FAILED, &front->flags)) { @@ -356,6 +357,7 @@ bool netfs_write_collection(struct netfs_io_request *wreq)  {  	struct netfs_inode *ictx = netfs_inode(wreq->inode);  	size_t transferred; +	bool transferred_valid = false;  	int s;  	_enter("R=%x", wreq->debug_id); @@ -376,12 +378,16 @@ bool netfs_write_collection(struct netfs_io_request *wreq)  			continue;  		if (!list_empty(&stream->subrequests))  			return false; -		if (stream->transferred < transferred) +		if (stream->transferred_valid && +		    stream->transferred < transferred) {  			transferred = stream->transferred; +			transferred_valid = true; +		}  	}  	/* Okay, declare that all I/O is complete. */ -	wreq->transferred = transferred; +	if (transferred_valid) +		wreq->transferred = transferred;  	trace_netfs_rreq(wreq, netfs_rreq_trace_write_done);  	if (wreq->io_streams[1].active && diff --git a/fs/netfs/write_issue.c b/fs/netfs/write_issue.c index 50bee2c4130d..0584cba1a043 100644 --- a/fs/netfs/write_issue.c +++ b/fs/netfs/write_issue.c @@ -118,12 +118,12 @@ struct netfs_io_request *netfs_create_write_req(struct address_space *mapping,  	wreq->io_streams[0].prepare_write	= ictx->ops->prepare_write;  	wreq->io_streams[0].issue_write		= ictx->ops->issue_write;  	wreq->io_streams[0].collected_to	= start; -	wreq->io_streams[0].transferred		= LONG_MAX; +	wreq->io_streams[0].transferred		= 0;  	wreq->io_streams[1].stream_nr		= 1;  	wreq->io_streams[1].source		= NETFS_WRITE_TO_CACHE;  	wreq->io_streams[1].collected_to	= start; -	wreq->io_streams[1].transferred		= LONG_MAX; +	wreq->io_streams[1].transferred		= 0;  	if (fscache_resources_valid(&wreq->cache_resources)) {  		wreq->io_streams[1].avail	= true;  		wreq->io_streams[1].active	= true; | 
