/** * Set open flags for a given cache mode * * Return 0 on success, -1 if the cache mode was invalid. */intbdrv_parse_cache_flags(constchar*mode,int*flags){*flags&=~BDRV_O_CACHE_MASK; if(!strcmp(mode,"off")||!strcmp(mode,"none")){*flags|=BDRV_O_NOCACHE|BDRV_O_CACHE_WB;}elseif(!strcmp(mode,"directsync")){*flags|=BDRV_O_NOCACHE;}elseif(!strcmp(mode,"writeback")){*flags|=BDRV_O_CACHE_WB;}elseif(!strcmp(mode,"unsafe")){*flags|=BDRV_O_CACHE_WB;*flags|=BDRV_O_NO_FLUSH;}elseif(!strcmp(mode,"writethrough")){/* this is the default */}else{return-1;} return0;}
/* Use O_DSYNC for write-through caching, no flags for write-back caching, * and O_DIRECT for no caching. */if((bdrv_flags&BDRV_O_NOCACHE))s->open_flags|=O_DIRECT;if(!(bdrv_flags&BDRV_O_CACHE_WB))s->open_flags|=O_DSYNC;