[Devel] [PATCH VZ9 6/7] fs/fuse: refactor fuse_file_fail_immediately()

Liu Kui kui.liu at virtuozzo.com
Mon Sep 15 16:02:04 MSK 2025


Remove redundant code related to fuse_file_fail_immediately().

Signed-off-by: Liu Kui <kui.liu at virtuozzo.com>
---
 fs/fuse/dev.c    | 10 +++++-----
 fs/fuse/file.c   | 15 ++++++++-------
 fs/fuse/fuse_i.h |  9 ++-------
 3 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 5f19af552cb5..8112de4abadd 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -619,21 +619,21 @@ static int fuse_request_queue_background(struct fuse_req *req)
 	}
 	__set_bit(FR_ISREPLY, &req->flags);
 
-	if (fc->kio.op && req->args->async && !nonblocking && READ_ONCE(fc->connected) &&
-		(!ff || !test_bit(FUSE_S_FAIL_IMMEDIATELY, &ff->ff_state))) {
-		int ret = fc->kio.op->req_classify(req, false, false);
+	if (fc->kio.op && req->args->async && !nonblocking) {
+		ret = fc->kio.op->req_classify(req, false, false);
 		if (likely(!ret)) {
 			unsigned int bkt = fuse_qhash_bucket();
+
 			__clear_bit(FR_BACKGROUND, &req->flags);
 			__set_bit(FR_NO_ACCT, &req->flags);
 			if (wait_event_killable_exclusive(fc->qhash[bkt].waitq,
 						(atomic_read(&fc->qhash[bkt].num_reqs) < fuse_qhash_bucket_len ||
 					   !READ_ONCE(fc->connected) ||
-					   (ff && test_bit(FUSE_S_FAIL_IMMEDIATELY, &ff->ff_state)))))
+					   fuse_file_fail_immediately(ff))))
 				return -EIO;
 			if (!READ_ONCE(fc->connected))
 				return -ENOTCONN;
-			if (ff && test_bit(FUSE_S_FAIL_IMMEDIATELY, &ff->ff_state))
+			if (fuse_file_fail_immediately(ff))
 				return -EIO;
 			req->qhash = bkt;
 			atomic_inc(&fc->qhash[bkt].num_reqs);
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index c8e1056370ad..ce9f6b8eb274 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1141,7 +1141,7 @@ static int fuse_do_readpage(struct file *file, struct page *page,
 	 */
 	fuse_wait_on_page_writeback(inode, page->index);
 	spin_lock(&ff->lock);
-	if (unlikely(__fuse_file_fail_immediately(ff))) {
+	if (unlikely(fuse_file_fail_immediately(ff))) {
 		spin_unlock(&ff->lock);
 		return -EIO;
 	}
@@ -1303,7 +1303,7 @@ static void fuse_send_readpages(struct fuse_io_args *ia, struct file *file)
 		ap->args.end = fuse_readpages_end;
 
 		spin_lock(&ff->lock);
-		if (unlikely(__fuse_file_fail_immediately(ff))) {
+		if (unlikely(fuse_file_fail_immediately(ff))) {
 			spin_unlock(&ff->lock);
 			INIT_LIST_HEAD(&ia->revoke_entry);
 			err = -EIO;
@@ -2454,7 +2454,7 @@ static void fuse_writepages_send(struct fuse_fill_wb_data *data)
 
 	wpa->ia.ff = fuse_file_get(data->ff);
 	spin_lock(&fi->lock);
-	if (test_bit(FUSE_S_FAIL_IMMEDIATELY, &data->ff->ff_state)) {
+	if (fuse_file_fail_immediately(data->ff)) {
 		shoot_on_sight = 1;
 		fi->writectr++;
 	} else {
@@ -2758,7 +2758,7 @@ static int fuse_write_begin(struct file *file, struct address_space *mapping,
 
 	fuse_wait_on_page_writeback(mapping->host, page->index);
 
-	if (fuse_file_fail_immediately(file)) {
+	if (fuse_file_fail_immediately(file->private_data)) {
 		err = -EIO;
 		goto cleanup;
 	}
@@ -2870,9 +2870,10 @@ static void fuse_vma_close(struct vm_area_struct *vma)
 static vm_fault_t fuse_page_mkwrite(struct vm_fault *vmf)
 {
 	struct page *page = vmf->page;
-	struct inode *inode = file_inode(vmf->vma->vm_file);
+	struct file *file = vmf->vma->vm_file;
+	struct inode *inode = file_inode(file);
 
-	file_update_time(vmf->vma->vm_file);
+	file_update_time(file);
 	lock_page(page);
 	if (page->mapping != inode->i_mapping) {
 		unlock_page(page);
@@ -2880,7 +2881,7 @@ static vm_fault_t fuse_page_mkwrite(struct vm_fault *vmf)
 	}
 
 	fuse_wait_on_page_writeback(inode, page->index);
-	if (fuse_file_fail_immediately(vmf->vma->vm_file)) {
+	if (fuse_file_fail_immediately(file->private_data)) {
 		unlock_page(page);
 		return VM_FAULT_SIGSEGV;
 	}
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index 901956ccb6d8..916d69680543 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -1443,14 +1443,9 @@ static inline void fuse_dio_wait(struct fuse_inode *fi)
 	fuse_write_dio_wait(fi);
 }
 
-static inline bool __fuse_file_fail_immediately(struct fuse_file *ff)
+static inline bool fuse_file_fail_immediately(struct fuse_file *ff)
 {
-	return test_bit(FUSE_S_FAIL_IMMEDIATELY, &ff->ff_state);
-}
-
-static inline bool fuse_file_fail_immediately(struct file *file)
-{
-	return  __fuse_file_fail_immediately(file->private_data);
+	return ff && test_bit(FUSE_S_FAIL_IMMEDIATELY, &ff->ff_state);
 }
 
 /**
-- 
2.39.5 (Apple Git-154)



More information about the Devel mailing list