| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | /* * Copyright (c) 2017 Nordic Semiconductor ASA * Copyright (c) 2015 Runtime Inc * * SPDX-License-Identifier: Apache-2.0 */#include <fs/fcb.h>#include "fcb_priv.h"intfcb_rotate(struct fcb *fcb){	struct flash_sector *sector;	int rc = 0;	rc = k_mutex_lock(&fcb->f_mtx, K_FOREVER);	if (rc) {		return -EINVAL;	}	rc = fcb_erase_sector(fcb, fcb->f_oldest);	if (rc) {		rc = -EIO;		goto out;	}	if (fcb->f_oldest == fcb->f_active.fe_sector) {		/*		 * Need to create a new active area, as we're wiping		 * the current.		 */		sector = fcb_getnext_sector(fcb, fcb->f_oldest);		rc = fcb_sector_hdr_init(fcb, sector, fcb->f_active_id + 1);		if (rc) {			goto out;		}		fcb->f_active.fe_sector = sector;		fcb->f_active.fe_elem_off = sizeof(struct fcb_disk_area);		fcb->f_active_id++;	}	fcb->f_oldest = fcb_getnext_sector(fcb, fcb->f_oldest);out:	k_mutex_unlock(&fcb->f_mtx);	return rc;}
 |