Home | History | Annotate | Download | only in mkfs
      1 /**
      2  * f2fs_format_utils.c
      3  *
      4  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
      5  *             http://www.samsung.com/
      6  *
      7  * Dual licensed under the GPL or LGPL version 2 licenses.
      8  */
      9 #define _LARGEFILE64_SOURCE
     10 
     11 #include <stdio.h>
     12 #include <unistd.h>
     13 #include <sys/ioctl.h>
     14 #include <sys/stat.h>
     15 
     16 #include "f2fs_fs.h"
     17 
     18 #ifdef HAVE_LINUX_FS_H
     19 #include <linux/fs.h>
     20 #endif
     21 
     22 int f2fs_trim_device()
     23 {
     24 	unsigned long long range[2];
     25 	struct stat stat_buf;
     26 
     27 	if (!config.trim)
     28 		return 0;
     29 
     30 	range[0] = 0;
     31 	range[1] = config.total_sectors * DEFAULT_SECTOR_SIZE;
     32 
     33 	if (fstat(config.fd, &stat_buf) < 0 ) {
     34 		MSG(1, "\tError: Failed to get the device stat!!!\n");
     35 		return -1;
     36 	}
     37 
     38 #if defined(WITH_BLKDISCARD) && defined(BLKDISCARD)
     39 	MSG(0, "Info: Discarding device\n");
     40 	if (S_ISREG(stat_buf.st_mode))
     41 		return 0;
     42 	else if (S_ISBLK(stat_buf.st_mode)) {
     43 		if (ioctl(config.fd, BLKDISCARD, &range) < 0) {
     44 			MSG(0, "Info: This device doesn't support TRIM\n");
     45 		} else {
     46 			MSG(0, "Info: Discarded %lu sectors\n",
     47 						config.total_sectors);
     48 		}
     49 	} else
     50 		return -1;
     51 #endif
     52 	return 0;
     53 }
     54 
     55