From patchwork Thu May 14 01:53:37 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Chinner X-Patchwork-Id: 6402431 Return-Path: X-Original-To: patchwork-fstests@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 96417BEEE1 for ; Thu, 14 May 2015 01:54:04 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A27E520382 for ; Thu, 14 May 2015 01:54:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 116D8203AB for ; Thu, 14 May 2015 01:54:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933504AbbENBx7 (ORCPT ); Wed, 13 May 2015 21:53:59 -0400 Received: from ipmail07.adl2.internode.on.net ([150.101.137.131]:59570 "EHLO ipmail07.adl2.internode.on.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933439AbbENBx5 (ORCPT ); Wed, 13 May 2015 21:53:57 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2ARDgAk/1NV//DOLHlcgw+BMrJfAQEBAQEBBpsVTQEBAQEBAYELQQWDWwEFVjMIGDE5AxsZiCvbFoYWikaEFwW0QiNhZgELMx+BZCwxgkYBAQE Received: from ppp121-44-206-240.lns20.syd7.internode.on.net (HELO dastard) ([121.44.206.240]) by ipmail07.adl2.internode.on.net with ESMTP; 14 May 2015 11:23:52 +0930 Received: from disappointment.disaster.area ([192.168.1.110] helo=disappointment) by dastard with esmtp (Exim 4.80) (envelope-from ) id 1YsiLD-0004WV-FN for fstests@vger.kernel.org; Thu, 14 May 2015 11:53:39 +1000 Received: from dave by disappointment with local (Exim 4.82_1-5b7a7c0-XX) (envelope-from ) id 1YsiLD-0001hF-Ee for fstests@vger.kernel.org; Thu, 14 May 2015 11:53:39 +1000 From: Dave Chinner To: fstests@vger.kernel.org Subject: [PATCH 3/3] generic/275: writes may not partially succeed Date: Thu, 14 May 2015 11:53:37 +1000 Message-Id: <1431568417-6462-4-git-send-email-david@fromorbit.com> X-Mailer: git-send-email 2.0.0 In-Reply-To: <1431568417-6462-1-git-send-email-david@fromorbit.com> References: <1431568417-6462-1-git-send-email-david@fromorbit.com> Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dave Chinner When a large IO is done as a single buffer, there is no guarantee that it will partially succeed when close to ENOSPC. The test assumes that the kernel is going to break the write down into smaller chunks (i.e. buffered IO breaking it down into PAGE_SIZE allocations), but certain configurations will not do this. e.g. extent size hints are set or DAX is being used) and hence the large write fails completely as there is not space for the entire allocation to be made. Hence break the final write in the test up into multiple small writes, thereby acheiving the same effect - ensuring that we can write more data after removing some space.... Signed-off-by: Dave Chinner --- tests/generic/275 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/generic/275 b/tests/generic/275 index 7382edb..f1963d8 100755 --- a/tests/generic/275 +++ b/tests/generic/275 @@ -57,6 +57,8 @@ umount $SCRATCH_DEV 2>/dev/null _scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seqres.full 2>&1 _scratch_mount +# this file will get removed to create 256k of free space after ENOSPC +# conditions are created. dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=256K count=1 >>$seqres.full 2>&1 [ $? -ne 0 ] && _fail "Error creating file" @@ -79,14 +81,16 @@ $DF_PROG $SCRATCH_MNT >>$seqres.full 2>&1 _freespace=`$DF_PROG -k $SCRATCH_MNT | tail -n 1 | awk '{print $5}'` [ $_freespace -gt 1024 ] && _fail "could not sufficiently fill filesystem" -# Try a write larger than available space -dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=1M count=1 >>$seqres.full 2>&1 +# Try to write more than available space in chunks that will allow at least one +# full write to succeed. +dd if=/dev/zero of=$SCRATCH_MNT/tmp1 bs=128k count=8 >>$seqres.full 2>&1 echo "Bytes written until ENOSPC:" >>$seqres.full du $SCRATCH_MNT/tmp1 >>$seqres.full # And at least some of it should succeed. _filesize=`ls -l $SCRATCH_MNT/tmp1 | awk '{print $5}'` -[ $_filesize -eq 0 ] && _fail "write file err: Partial write until enospc failed; wrote 0 bytes." +[ $_filesize -lt $((128 * 1024)) ] && \ + _fail "Partial write until enospc failed; wrote $_filesize bytes." echo "done" status=0