summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs
diff options
context:
space:
mode:
Diffstat (limited to 'sys/ufs/ffs')
-rw-r--r--sys/ufs/ffs/ffs_alloc.c7
-rw-r--r--sys/ufs/ffs/ffs_balloc.c24
-rw-r--r--sys/ufs/ffs/ffs_extern.h1
3 files changed, 28 insertions, 4 deletions
diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c
index de34bb8..f1db84d 100644
--- a/sys/ufs/ffs/ffs_alloc.c
+++ b/sys/ufs/ffs/ffs_alloc.c
@@ -116,7 +116,6 @@ static ufs2_daddr_t ffs_clusteralloc(struct inode *, u_int, ufs2_daddr_t, int,
static ino_t ffs_dirpref(struct inode *);
static ufs2_daddr_t ffs_fragextend(struct inode *, u_int, ufs2_daddr_t,
int, int);
-static void ffs_fserr(struct fs *, ino_t, char *);
static ufs2_daddr_t ffs_hashalloc
(struct inode *, u_int, ufs2_daddr_t, int, int, allocfcn_t *);
static ufs2_daddr_t ffs_nodealloccg(struct inode *, u_int, ufs2_daddr_t, int,
@@ -223,7 +222,7 @@ nospace:
goto retry;
}
UFS_UNLOCK(ump);
- if (ppsratecheck(&lastfail, &curfail, 1)) {
+ if (reclaimed > 0 && ppsratecheck(&lastfail, &curfail, 1)) {
ffs_fserr(fs, ip->i_number, "filesystem full");
uprintf("\n%s: write failed, filesystem is full\n",
fs->fs_fsmnt);
@@ -432,7 +431,7 @@ nospace:
UFS_UNLOCK(ump);
if (bp)
brelse(bp);
- if (ppsratecheck(&lastfail, &curfail, 1)) {
+ if (reclaimed > 0 && ppsratecheck(&lastfail, &curfail, 1)) {
ffs_fserr(fs, ip->i_number, "filesystem full");
uprintf("\n%s: write failed, filesystem is full\n",
fs->fs_fsmnt);
@@ -2335,7 +2334,7 @@ ffs_mapsearch(fs, cgp, bpref, allocsiz)
* The form of the error message is:
* fs: error message
*/
-static void
+void
ffs_fserr(fs, inum, cp)
struct fs *fs;
ino_t inum;
diff --git a/sys/ufs/ffs/ffs_balloc.c b/sys/ufs/ffs/ffs_balloc.c
index 4775768..4e8b76b 100644
--- a/sys/ufs/ffs/ffs_balloc.c
+++ b/sys/ufs/ffs/ffs_balloc.c
@@ -105,6 +105,8 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size,
ufs2_daddr_t *lbns_remfree, lbns[NIADDR + 1];
int unwindidx = -1;
int saved_inbdflush;
+ static struct timeval lastfail;
+ static int curfail;
int reclaimed;
ip = VTOI(vp);
@@ -308,6 +310,11 @@ retry:
UFS_UNLOCK(ump);
goto retry;
}
+ if (ppsratecheck(&lastfail, &curfail, 1)) {
+ ffs_fserr(fs, ip->i_number, "filesystem full");
+ uprintf("\n%s: write failed, filesystem "
+ "is full\n", fs->fs_fsmnt);
+ }
goto fail;
}
nb = newb;
@@ -370,6 +377,11 @@ retry:
UFS_UNLOCK(ump);
goto retry;
}
+ if (ppsratecheck(&lastfail, &curfail, 1)) {
+ ffs_fserr(fs, ip->i_number, "filesystem full");
+ uprintf("\n%s: write failed, filesystem "
+ "is full\n", fs->fs_fsmnt);
+ }
goto fail;
}
nb = newb;
@@ -523,6 +535,8 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
int deallocated, osize, nsize, num, i, error;
int unwindidx = -1;
int saved_inbdflush;
+ static struct timeval lastfail;
+ static int curfail;
int reclaimed;
ip = VTOI(vp);
@@ -836,6 +850,11 @@ retry:
UFS_UNLOCK(ump);
goto retry;
}
+ if (ppsratecheck(&lastfail, &curfail, 1)) {
+ ffs_fserr(fs, ip->i_number, "filesystem full");
+ uprintf("\n%s: write failed, filesystem "
+ "is full\n", fs->fs_fsmnt);
+ }
goto fail;
}
nb = newb;
@@ -898,6 +917,11 @@ retry:
UFS_UNLOCK(ump);
goto retry;
}
+ if (ppsratecheck(&lastfail, &curfail, 1)) {
+ ffs_fserr(fs, ip->i_number, "filesystem full");
+ uprintf("\n%s: write failed, filesystem "
+ "is full\n", fs->fs_fsmnt);
+ }
goto fail;
}
nb = newb;
diff --git a/sys/ufs/ffs/ffs_extern.h b/sys/ufs/ffs/ffs_extern.h
index 75f9d38..58c72ee 100644
--- a/sys/ufs/ffs/ffs_extern.h
+++ b/sys/ufs/ffs/ffs_extern.h
@@ -69,6 +69,7 @@ int ffs_flushfiles(struct mount *, int, struct thread *);
void ffs_fragacct(struct fs *, int, int32_t [], int);
int ffs_freefile(struct ufsmount *, struct fs *, struct vnode *, ino_t,
int, struct workhead *);
+void ffs_fserr(struct fs *, ino_t, char *);
int ffs_isblock(struct fs *, u_char *, ufs1_daddr_t);
int ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t);
void ffs_load_inode(struct buf *, struct inode *, struct fs *, ino_t);
OpenPOWER on IntegriCloud