From patchwork Wed Apr 20 10:19:02 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artem Bityutskiy X-Patchwork-Id: 92188 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 8CB4FB6FCD for ; Wed, 20 Apr 2011 20:23:34 +1000 (EST) Received: from canuck.infradead.org ([2001:4978:20e::1]) by bombadil.infradead.org with esmtps (Exim 4.72 #1 (Red Hat Linux)) id 1QCUVQ-0001ns-CS; Wed, 20 Apr 2011 10:19:33 +0000 Received: from localhost ([127.0.0.1] helo=canuck.infradead.org) by canuck.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1QCUVO-0006Rh-Rh; Wed, 20 Apr 2011 10:19:30 +0000 Received: from smtp.nokia.com ([147.243.1.47] helo=mgw-sa01.nokia.com) by canuck.infradead.org with esmtps (Exim 4.72 #1 (Red Hat Linux)) id 1QCUS0-0006A2-FW for linux-mtd@lists.infradead.org; Wed, 20 Apr 2011 10:16:14 +0000 Received: from nokia.com (localhost [127.0.0.1]) by mgw-sa01.nokia.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id p3KAFmUv009491 for ; Wed, 20 Apr 2011 13:15:59 +0300 Received: from eru.research.nokia.com ([[172.21.24.121]]) by mgw-sa01.nokia.com with ESMTP id p3KAFTSM009198 ; Wed, 20 Apr 2011 13:15:46 +0300 From: Artem Bityutskiy To: MTD list Subject: [PATCH 29/35] fs-tests: integck: introduce free_writes_info helper Date: Wed, 20 Apr 2011 13:19:02 +0300 Message-Id: <1303294748-5492-30-git-send-email-dedekind1@gmail.com> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1303294748-5492-1-git-send-email-dedekind1@gmail.com> References: <1303294748-5492-1-git-send-email-dedekind1@gmail.com> X-Nokia-AV: Clean X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20110420_061601_194756_E221FB6A X-CRM114-Status: GOOD ( 12.93 ) X-Spam-Score: 3.4 (+++) X-Spam-Report: SpamAssassin version 3.3.1 on canuck.infradead.org summary: Content analysis details: (3.4 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, low trust [147.243.1.47 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is freemail (dedekind1[at]gmail.com) 0.0 DKIM_ADSP_CUSTOM_MED No valid author signature, adsp_override is CUSTOM_MED 2.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends in digit (dedekind1[at]gmail.com) 0.0 RFC_ABUSE_POST Both abuse and postmaster missing on sender domain 1.2 NML_ADSP_CUSTOM_MED ADSP custom_med hit, and not from a mailing list Cc: Adrian Hunter X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Artem Bityutskiy We have duplicated code for freeing write informatio - put it into a helper function. Signed-off-by: Artem Bityutskiy --- tests/fs-tests/integrity/integck.c | 50 +++++++++++++++++------------------ 1 files changed, 24 insertions(+), 26 deletions(-) diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c index 666bc70..50b414f 100644 --- a/tests/fs-tests/integrity/integck.c +++ b/tests/fs-tests/integrity/integck.c @@ -152,7 +152,6 @@ struct file_info /* Each file has one of these */ off_t length; int link_count; unsigned int check_run_no; /* Run number used when checking */ - unsigned int deleted:1; /* File has been deleted but is still open */ unsigned int no_space_error:1; /* File has incurred a ENOSPC error */ }; @@ -442,7 +441,7 @@ static void remove_dir_entry(struct dir_entry_info *entry) file->links = entry->next_link; file->link_count -= 1; if (file->link_count == 0) - file->deleted = 1; + assert(file->links == NULL); } free(entry->name); @@ -599,6 +598,21 @@ static void file_close_all(struct file_info *file) } /* + * Free all the information about writes to a file. + */ +static void free_writes_info(struct file_info *file) +{ + struct write_info *w, *next; + + w = file->writes; + while (w) { + next = w->next; + free(w); + w = next; + } +} + +/* * Unlink a directory entry for a file. */ static int file_unlink(struct dir_entry_info *entry) @@ -622,18 +636,10 @@ static int file_unlink(struct dir_entry_info *entry) /* Free struct file_info if file is not open and not linked */ if (!file->fds && !file->links) { - struct write_info *w, *next; - + free_writes_info(file); free(file->name); - w = file->writes; - while (w) { - next = w->next; - free(w); - w = next; - } free(file); - } else if (!file->links) - file->deleted = 1; + } return 0; } @@ -702,7 +708,7 @@ static void file_info_display(struct file_info *file) normsg(" File was open: %s", (file->fds == NULL) ? "false" : "true"); normsg(" File was deleted: %s", - (file->deleted == 0) ? "false" : "true"); + (file->link_count == 0) ? "true" : "false"); normsg(" File was out of space: %s", (file->no_space_error == 0) ? "false" : "true"); normsg(" File Data:"); @@ -1048,7 +1054,7 @@ static int file_write(struct file_info *file, int fd) unsigned int seed; int ret, truncate = 0; - if (fsinfo.can_mmap && !full && !file->deleted && + if (fsinfo.can_mmap && !full && file->link_count && random_no(100) == 1) return file_mmap_write(file); @@ -1189,16 +1195,8 @@ static void file_close(struct fd_info *fdi) if (fdp == fdi) { *prev = fdi->next; free(fdi); - if (file->deleted && !file->fds) { - /* Closing deleted file */ - struct write_info *w, *next; - - w = file->writes; - while (w) { - next = w->next; - free(w); - w = next; - } + if (!file->link_count && !file->fds) { + free_writes_info(file); free(file->name); free(file); } @@ -1554,7 +1552,7 @@ static void check_deleted_files(void) struct open_file_info *ofi; for (ofi = open_files; ofi; ofi = ofi->next) - if (ofi->fdi->file->deleted) + if (!ofi->fdi->file->link_count) file_check(ofi->fdi->file, ofi->fdi->fd); } @@ -2017,7 +2015,7 @@ static int operate_on_open_file(struct fd_info *fdi) ret = file_truncate(fdi->file, fdi->fd); else if (r < 21) file_close(fdi); - else if (shrink && r < 121 && !fdi->file->deleted) + else if (shrink && r < 121 && fdi->file->link_count) ret = file_delete(fdi->file); else { ret = file_write(fdi->file, fdi->fd);