From: Stef B. <st...@gm...> - 2011-01-31 15:49:25
|
Hi, I've had simular questions lately, look at: http://marc.info/?l=linux-aio&m=129625279300982&w=2 I had questions because I want to get aio working. Important is the alignment of the backend where the file is on. On the sata drive I've understood it's 4096. Frpm what I understan is that a file always starts at an aligned point, but may not end at one, well not seen by the system. It will take the whole last sector, but will not report that in for example the size of the file. So when doing a write to the last sector is posssible, when writing to the whole last sector, but you'll have to adjust the size later. Hope that helps. Look futher at the discussion at the link. Jeff Moyer gave some noce links also. Stef 2011/1/19 Sven Utcke <sve...@gm...>: > Hello Serdar, > >> Hi, I wrote this two three weeks ago, maybe someone can tell me how fuse >> write works? > > well, that really depends on your backend, doesn't it. You just get > passed chunks of data (plus its size, and an offset, obviously, and > possibly some sort of filehandle), what you do with them, is really > your business. > >> > I am trying to understand how write works and I guess I made some mistakes. >> > I am trying to write the buffer buf to a voidpointer. but it stops at 2.2M. >> > That's why I am thinking, I understand it wrong how write is working, >> > maybe someone can explain it to me. > > what do you mean by "stops"? segmentation fault? > >> > void *data = NULL; >> > if (node->data != NULL){ >> > data = malloc(sizeof(void)*node->len); >> > memcpy(data, node->data, node->len); >> > oss_free(node->data); >> > } > >> > node->data = oss_alloc(sizeof(void)*(size+offset), consmod,&attr); > > as you do not check the return value: could this silently fail? > >> > if(data == NULL) >> > memcpy(node->data,buf,size); > > note that in general offset could be non-0 even if called for the > first time and therefore data = NULL and, worse, possibly the oiginal > node->data=NULL (I guess), so that you never allocated any memory for > data --- never mind that node->len might have been smaller then > size... but this might of course not apply to you... > >> > else { >> > memcpy(node->data,data,offset); >> > memcpy(node->data+offset,buf,size); >> > } > > What if offset+size<node->len? Or is this guaranteed to never be the > case? > >> > node->len = size+offset; >> > return size; > > in general, no-one stops you to write to the middle of the file, in > which case this probably should be the maximum of the above and > node->len > > But of course there might be a guarantee you are only writing in > sequence... > > Sven > -- > _ ___ ___ ___ > __| |/ __|| __|/ __| The dCache File System > / _` | (__ | _| \__ \ An archive file-system for PB of data > \__,_|\___||_| |___/ http://www.desy.de/~utcke/Data/ > > ------------------------------------------------------------------------------ > Protect Your Site and Customers from Malware Attacks > Learn about various malware tactics and how to avoid them. Understand > malware threats, the impact they can have on your business, and how you > can protect your company and customers by using code signing. > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > fuse-devel mailing list > fus...@li... > https://lists.sourceforge.net/lists/listinfo/fuse-devel > |