diff options
author | imp <imp@FreeBSD.org> | 2014-04-18 17:03:43 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2014-04-18 17:03:43 +0000 |
commit | af1f03cbf480161e858291b0269b7b3dcf85ffa3 (patch) | |
tree | 5768dfe6f397f0a1b1b83565a6fbf0faa2eb443e | |
parent | dc1d630338e8d8a813fdacbb556799df5848769f (diff) | |
download | FreeBSD-src-af1f03cbf480161e858291b0269b7b3dcf85ffa3.zip FreeBSD-src-af1f03cbf480161e858291b0269b7b3dcf85ffa3.tar.gz |
Take out the hack to write -1's to non-NAND. Always do a BIO_DELETE on
the ranges we want to erase. This is nicer to SSDs that want TRIMs
anyway.
-rw-r--r-- | sys/fs/nandfs/nandfs.h | 2 | ||||
-rw-r--r-- | sys/fs/nandfs/nandfs_subr.c | 32 | ||||
-rw-r--r-- | sys/fs/nandfs/nandfs_vfsops.c | 6 |
3 files changed, 3 insertions, 37 deletions
diff --git a/sys/fs/nandfs/nandfs.h b/sys/fs/nandfs/nandfs.h index 2c093be..fd5978a 100644 --- a/sys/fs/nandfs/nandfs.h +++ b/sys/fs/nandfs/nandfs.h @@ -159,8 +159,6 @@ struct nandfs_device { int nd_syncer_exit; int nd_cleaner_exit; - int nd_is_nand; - struct nandfs_fsarea nd_fsarea[NANDFS_NFSAREAS]; int nd_last_fsarea; diff --git a/sys/fs/nandfs/nandfs_subr.c b/sys/fs/nandfs/nandfs_subr.c index 5ed31e7..fa6ff72 100644 --- a/sys/fs/nandfs/nandfs_subr.c +++ b/sys/fs/nandfs/nandfs_subr.c @@ -1065,42 +1065,12 @@ nandfs_buf_check(struct buf *bp, uint32_t bits) int nandfs_erase(struct nandfs_device *fsdev, off_t offset, size_t size) { - struct buf *bp; - int read_size, error, i; - DPRINTF(BLOCK, ("%s: performing erase at offset %jx size %zx\n", __func__, offset, size)); MPASS(size % fsdev->nd_erasesize == 0); - if (fsdev->nd_is_nand) { - error = g_delete_data(fsdev->nd_gconsumer, offset, size); - return (error); - } - - if (size > MAXBSIZE) - read_size = MAXBSIZE; - else - read_size = size; - - error = 0; - for (i = 0; i < size / MAXBSIZE; i++) { - error = bread(fsdev->nd_devvp, btodb(offset + i * read_size), - read_size, NOCRED, &bp); - if (error) { - brelse(bp); - return (error); - } - memset(bp->b_data, 0xff, read_size); - error = bwrite(bp); - if (error) { - nandfs_error("%s: err:%d from bwrite\n", - __func__, error); - return (error); - } - } - - return (error); + return (g_delete_data(fsdev->nd_gconsumer, offset, size)); } int diff --git a/sys/fs/nandfs/nandfs_vfsops.c b/sys/fs/nandfs/nandfs_vfsops.c index 33b7564..eba4b4c 100644 --- a/sys/fs/nandfs/nandfs_vfsops.c +++ b/sys/fs/nandfs/nandfs_vfsops.c @@ -913,7 +913,6 @@ nandfs_mount_device(struct vnode *devvp, struct mount *mp, * We conclude that this is not NAND storage */ nandfsdev->nd_erasesize = NANDFS_DEF_ERASESIZE; - nandfsdev->nd_is_nand = 0; } else { DROP_GIANT(); g_topology_lock(); @@ -924,11 +923,10 @@ nandfs_mount_device(struct vnode *devvp, struct mount *mp, free(nandfsdev, M_NANDFSMNT); return (error); } - } else { - nandfsdev->nd_erasesize = erasesize; - nandfsdev->nd_is_nand = 1; } + nandfsdev->nd_erasesize = erasesize; + DPRINTF(VOLUMES, ("%s: erasesize %x\n", __func__, nandfsdev->nd_erasesize)); |