diff options
| author | Shehjar Tikoo <shehjart@gluster.com> | 2009-10-01 06:58:47 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2009-10-01 07:22:46 -0700 | 
| commit | e11d66c8d6dea72d02f9bcdbf65c67bd5c60b5cc (patch) | |
| tree | ffa96a3f78b79db2704a5bc410174714fd66fa67 /libglusterfs | |
| parent | 186a86f342625a9dce53fe537f8237c6099d5c54 (diff) | |
Global: NFS-friendly prototype changes
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 145 (NFSv3 related additions to 2.1 task list)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=145
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/call-stub.c | 225 | ||||
| -rw-r--r-- | libglusterfs/src/call-stub.h | 88 | ||||
| -rw-r--r-- | libglusterfs/src/defaults.c | 103 | ||||
| -rw-r--r-- | libglusterfs/src/defaults.h | 3 | ||||
| -rw-r--r-- | libglusterfs/src/protocol.h | 32 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 65 | 
6 files changed, 399 insertions, 117 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c index 89a212807d0..bc7d556c22f 100644 --- a/libglusterfs/src/call-stub.c +++ b/libglusterfs/src/call-stub.c @@ -82,7 +82,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,  		     int32_t op_errno,  		     inode_t *inode,  		     struct stat *buf, -		     dict_t *dict) +                     dict_t *dict, +                     struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -100,6 +101,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,  		stub->args.lookup_cbk.buf = *buf;  	if (dict)  		stub->args.lookup_cbk.dict = dict_ref (dict); +        if (postparent) +                stub->args.lookup_cbk.postparent = *postparent;  out:  	return stub;  } @@ -412,7 +415,8 @@ fop_truncate_cbk_stub (call_frame_t *frame,  		       fop_truncate_cbk_t fn,  		       int32_t op_ret,  		       int32_t op_errno, -		       struct stat *buf) +		       struct stat *prebuf, +                       struct stat *postbuf)  {  	call_stub_t *stub = NULL; @@ -424,8 +428,10 @@ fop_truncate_cbk_stub (call_frame_t *frame,  	stub->args.truncate_cbk.fn = fn;  	stub->args.truncate_cbk.op_ret = op_ret;  	stub->args.truncate_cbk.op_errno = op_errno; -	if (buf) -		stub->args.truncate_cbk.buf = *buf; +	if (prebuf) +		stub->args.truncate_cbk.prebuf = *prebuf; +        if (postbuf) +                stub->args.truncate_cbk.postbuf = *postbuf;  out:  	return stub;  } @@ -459,7 +465,8 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,  			fop_ftruncate_cbk_t fn,  			int32_t op_ret,  			int32_t op_errno, -			struct stat *buf) +			struct stat *prebuf, +                        struct stat *postbuf)  {  	call_stub_t *stub = NULL; @@ -471,8 +478,10 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,  	stub->args.ftruncate_cbk.fn = fn;  	stub->args.ftruncate_cbk.op_ret = op_ret;  	stub->args.ftruncate_cbk.op_errno = op_errno; -	if (buf) -		stub->args.ftruncate_cbk.buf = *buf; +	if (prebuf) +		stub->args.ftruncate_cbk.prebuf = *prebuf; +	if (postbuf) +		stub->args.ftruncate_cbk.postbuf = *postbuf;  out:  	return stub;  } @@ -595,7 +604,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,  		       fop_readlink_cbk_t fn,  		       int32_t op_ret,  		       int32_t op_errno, -		       const char *path) +		       const char *path, +                       struct stat *sbuf)  {  	call_stub_t *stub = NULL; @@ -609,6 +619,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,  	stub->args.readlink_cbk.op_errno = op_errno;  	if (path)  		stub->args.readlink_cbk.buf = strdup (path); +        if (sbuf) +                stub->args.readlink_cbk.sbuf = *sbuf;  out:  	return stub;  } @@ -644,7 +656,9 @@ fop_mknod_cbk_stub (call_frame_t *frame,  		    int32_t op_ret,  		    int32_t op_errno,  		    inode_t *inode, -		    struct stat *buf) +                    struct stat *buf, +                    struct stat *preparent, +                    struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -660,6 +674,10 @@ fop_mknod_cbk_stub (call_frame_t *frame,  		stub->args.mknod_cbk.inode = inode_ref (inode);  	if (buf)  		stub->args.mknod_cbk.buf = *buf; +        if (preparent) +                stub->args.mknod_cbk.preparent = *preparent; +        if (postparent) +                stub->args.mknod_cbk.postparent = *postparent;  out:  	return stub;  } @@ -693,7 +711,9 @@ fop_mkdir_cbk_stub (call_frame_t *frame,  		    int32_t op_ret,  		    int32_t op_errno,  		    inode_t *inode, -		    struct stat *buf) +                    struct stat *buf, +                    struct stat *preparent, +                    struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -709,6 +729,10 @@ fop_mkdir_cbk_stub (call_frame_t *frame,  		stub->args.mkdir_cbk.inode = inode_ref (inode);  	if (buf)  		stub->args.mkdir_cbk.buf = *buf; +        if (preparent) +                stub->args.mkdir_cbk.preparent = *preparent; +        if (postparent) +                stub->args.mkdir_cbk.postparent = *postparent;  out:  	return stub;  } @@ -738,7 +762,9 @@ call_stub_t *  fop_unlink_cbk_stub (call_frame_t *frame,  		     fop_unlink_cbk_t fn,  		     int32_t op_ret, -		     int32_t op_errno) +		     int32_t op_errno, +                     struct stat *preparent, +                     struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -750,6 +776,10 @@ fop_unlink_cbk_stub (call_frame_t *frame,  	stub->args.unlink_cbk.fn = fn;  	stub->args.unlink_cbk.op_ret = op_ret;  	stub->args.unlink_cbk.op_errno = op_errno; +        if (preparent) +                stub->args.unlink_cbk.preparent = *preparent; +        if (postparent) +                stub->args.unlink_cbk.postparent = *postparent;  out:  	return stub;  } @@ -780,7 +810,9 @@ call_stub_t *  fop_rmdir_cbk_stub (call_frame_t *frame,  		    fop_rmdir_cbk_t fn,  		    int32_t op_ret, -		    int32_t op_errno) +		    int32_t op_errno, +                    struct stat *preparent, +                    struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -792,6 +824,10 @@ fop_rmdir_cbk_stub (call_frame_t *frame,  	stub->args.rmdir_cbk.fn = fn;  	stub->args.rmdir_cbk.op_ret = op_ret;  	stub->args.rmdir_cbk.op_errno = op_errno; +        if (preparent) +                stub->args.rmdir_cbk.preparent = *preparent; +        if (postparent) +                stub->args.rmdir_cbk.postparent = *postparent;  out:  	return stub;  } @@ -826,7 +862,9 @@ fop_symlink_cbk_stub (call_frame_t *frame,  		      int32_t op_ret,  		      int32_t op_errno,  		      inode_t *inode, -		      struct stat *buf) +                      struct stat *buf, +                      struct stat *preparent, +                      struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -842,6 +880,10 @@ fop_symlink_cbk_stub (call_frame_t *frame,  		stub->args.symlink_cbk.inode = inode_ref (inode);  	if (buf)  		stub->args.symlink_cbk.buf = *buf; +        if (preparent) +                stub->args.symlink_cbk.preparent = *preparent; +        if (postparent) +                stub->args.symlink_cbk.postparent = *postparent;  out:  	return stub;  } @@ -875,7 +917,11 @@ fop_rename_cbk_stub (call_frame_t *frame,  		     fop_rename_cbk_t fn,  		     int32_t op_ret,  		     int32_t op_errno, -		     struct stat *buf) +		     struct stat *buf, +                     struct stat *preoldparent, +                     struct stat *postoldparent, +                     struct stat *prenewparent, +                     struct stat *postnewparent)  {  	call_stub_t *stub = NULL; @@ -889,6 +935,14 @@ fop_rename_cbk_stub (call_frame_t *frame,  	stub->args.rename_cbk.op_errno = op_errno;  	if (buf)  		stub->args.rename_cbk.buf = *buf; +        if (preoldparent) +                stub->args.rename_cbk.preoldparent = *preoldparent; +        if (postoldparent) +                stub->args.rename_cbk.postoldparent = *postoldparent; +        if (prenewparent) +                stub->args.rename_cbk.prenewparent = *prenewparent; +        if (postnewparent) +                stub->args.rename_cbk.postnewparent = *postnewparent;  out:  	return stub;  } @@ -924,7 +978,9 @@ fop_link_cbk_stub (call_frame_t *frame,  		   int32_t op_ret,  		   int32_t op_errno,  		   inode_t *inode, -		   struct stat *buf) +                   struct stat *buf, +                   struct stat *preparent, +                   struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -940,6 +996,10 @@ fop_link_cbk_stub (call_frame_t *frame,  		stub->args.link_cbk.inode = inode_ref (inode);  	if (buf)  		stub->args.link_cbk.buf = *buf; +        if (preparent) +                stub->args.link_cbk.preparent = *preparent; +        if (postparent) +                stub->args.link_cbk.postparent = *postparent;  out:  	return stub;  } @@ -978,7 +1038,9 @@ fop_create_cbk_stub (call_frame_t *frame,  		     int32_t op_errno,  		     fd_t *fd,  		     inode_t *inode, -		     struct stat *buf) +		     struct stat *buf, +                     struct stat *preparent, +                     struct stat *postparent)  {  	call_stub_t *stub = NULL; @@ -996,6 +1058,10 @@ fop_create_cbk_stub (call_frame_t *frame,  		stub->args.create_cbk.inode = inode_ref (inode);  	if (buf)  		stub->args.create_cbk.buf = *buf; +        if (preparent) +                stub->args.create_cbk.preparent = *preparent; +        if (postparent) +                stub->args.create_cbk.postparent = *postparent;  out:  	return stub;  } @@ -1005,7 +1071,8 @@ call_stub_t *  fop_open_stub (call_frame_t *frame,  	       fop_open_t fn,  	       loc_t *loc, -	       int32_t flags, fd_t *fd) +	       int32_t flags, fd_t *fd, +               int32_t wbflags)  {  	call_stub_t *stub = NULL; @@ -1018,6 +1085,7 @@ fop_open_stub (call_frame_t *frame,  	stub->args.open.fn = fn;  	loc_copy (&stub->args.open.loc, loc);  	stub->args.open.flags = flags; +        stub->args.open.wbflags = wbflags;  	if (fd)  		stub->args.open.fd = fd_ref (fd);  out: @@ -1140,7 +1208,8 @@ fop_writev_cbk_stub (call_frame_t *frame,  		     fop_writev_cbk_t fn,  		     int32_t op_ret,  		     int32_t op_errno, -		     struct stat *stbuf) +                     struct stat *prebuf, +		     struct stat *postbuf)  {  	call_stub_t *stub = NULL; @@ -1154,7 +1223,9 @@ fop_writev_cbk_stub (call_frame_t *frame,  	stub->args.writev_cbk.op_ret = op_ret;  	stub->args.writev_cbk.op_errno = op_errno;  	if (op_ret >= 0) -		stub->args.writev_cbk.stbuf = *stbuf; +		stub->args.writev_cbk.postbuf = *postbuf; +        if (prebuf) +                stub->args.writev_cbk.prebuf = *prebuf;  out:  	return stub;  } @@ -1231,8 +1302,9 @@ call_stub_t *  fop_fsync_cbk_stub (call_frame_t *frame,  		    fop_fsync_cbk_t fn,  		    int32_t op_ret, -		    int32_t op_errno) - +		    int32_t op_errno, +                    struct stat *prebuf, +                    struct stat *postbuf)  {  	call_stub_t *stub = NULL; @@ -1244,6 +1316,10 @@ fop_fsync_cbk_stub (call_frame_t *frame,  	stub->args.fsync_cbk.fn = fn;  	stub->args.fsync_cbk.op_ret = op_ret;  	stub->args.fsync_cbk.op_errno = op_errno; +        if (prebuf) +                stub->args.fsync_cbk.prebuf = *prebuf; +        if (postbuf) +                stub->args.fsync_cbk.postbuf = *postbuf;  out:  	return stub;  } @@ -2459,7 +2535,8 @@ call_resume_wind (call_stub_t *stub)  		stub->args.open.fn (stub->frame,   				    stub->frame->this,  				    &stub->args.open.loc,  -				    stub->args.open.flags, stub->args.open.fd); +				    stub->args.open.flags, stub->args.open.fd, +                                    stub->args.open.wbflags);  		break;  	}  	case GF_FOP_CREATE: @@ -2958,7 +3035,9 @@ call_resume_unwind (call_stub_t *stub)  				      stub->args.create_cbk.op_errno,  				      stub->args.create_cbk.fd,  				      stub->args.create_cbk.inode, -				      &stub->args.create_cbk.buf); +				      &stub->args.create_cbk.buf, +                                      &stub->args.create_cbk.preparent, +                                      &stub->args.create_cbk.postparent);  		else  			stub->args.create_cbk.fn (stub->frame,  						  stub->frame->cookie, @@ -2967,7 +3046,9 @@ call_resume_unwind (call_stub_t *stub)  						  stub->args.create_cbk.op_errno,  						  stub->args.create_cbk.fd,  						  stub->args.create_cbk.inode, -						  &stub->args.create_cbk.buf); +						  &stub->args.create_cbk.buf, +                                                  &stub->args.create_cbk.preparent, +                                                  &stub->args.create_cbk.postparent);  		break;  	} @@ -2996,14 +3077,16 @@ call_resume_unwind (call_stub_t *stub)  			STACK_UNWIND (stub->frame,  				      stub->args.readlink_cbk.op_ret,  				      stub->args.readlink_cbk.op_errno, -				      stub->args.readlink_cbk.buf); +				      stub->args.readlink_cbk.buf, +                                      &stub->args.readlink_cbk.sbuf);  		else  			stub->args.readlink_cbk.fn (stub->frame,  						    stub->frame->cookie,  						    stub->frame->this,  						    stub->args.readlink_cbk.op_ret,  						    stub->args.readlink_cbk.op_errno, -						    stub->args.readlink_cbk.buf); +						    stub->args.readlink_cbk.buf, +                                                    &stub->args.readlink_cbk.sbuf);  		break;  	} @@ -3015,7 +3098,9 @@ call_resume_unwind (call_stub_t *stub)  				      stub->args.mknod_cbk.op_ret,  				      stub->args.mknod_cbk.op_errno,  				      stub->args.mknod_cbk.inode, -				      &stub->args.mknod_cbk.buf); +                                      &stub->args.mknod_cbk.buf, +                                      &stub->args.mknod_cbk.preparent, +                                      &stub->args.mknod_cbk.postparent);  		else  			stub->args.mknod_cbk.fn (stub->frame,  						 stub->frame->cookie, @@ -3023,7 +3108,9 @@ call_resume_unwind (call_stub_t *stub)  						 stub->args.mknod_cbk.op_ret,  						 stub->args.mknod_cbk.op_errno,  						 stub->args.mknod_cbk.inode, -						 &stub->args.mknod_cbk.buf); +                                                 &stub->args.mknod_cbk.buf, +                                                 &stub->args.mknod_cbk.preparent, +                                                 &stub->args.mknod_cbk.postparent);  		break;  	} @@ -3034,7 +3121,9 @@ call_resume_unwind (call_stub_t *stub)  				      stub->args.mkdir_cbk.op_ret,  				      stub->args.mkdir_cbk.op_errno,  				      stub->args.mkdir_cbk.inode, -				      &stub->args.mkdir_cbk.buf); +                                      &stub->args.mkdir_cbk.buf, +                                      &stub->args.mkdir_cbk.preparent, +                                      &stub->args.mkdir_cbk.postparent);  		else  			stub->args.mkdir_cbk.fn (stub->frame,  						 stub->frame->cookie, @@ -3042,7 +3131,9 @@ call_resume_unwind (call_stub_t *stub)  						 stub->args.mkdir_cbk.op_ret,  						 stub->args.mkdir_cbk.op_errno,  						 stub->args.mkdir_cbk.inode, -						 &stub->args.mkdir_cbk.buf); +                                                 &stub->args.mkdir_cbk.buf, +                                                 &stub->args.mkdir_cbk.preparent, +                                                 &stub->args.mkdir_cbk.postparent);  		if (stub->args.mkdir_cbk.inode)  			inode_unref (stub->args.mkdir_cbk.inode); @@ -3055,13 +3146,17 @@ call_resume_unwind (call_stub_t *stub)  		if (!stub->args.unlink_cbk.fn)  			STACK_UNWIND (stub->frame,  				      stub->args.unlink_cbk.op_ret, -				      stub->args.unlink_cbk.op_errno); +				      stub->args.unlink_cbk.op_errno, +                                      &stub->args.unlink_cbk.preparent, +                                      &stub->args.unlink_cbk.postparent);  		else  			stub->args.unlink_cbk.fn (stub->frame,  						  stub->frame->cookie,  						  stub->frame->this,  						  stub->args.unlink_cbk.op_ret, -						  stub->args.unlink_cbk.op_errno); +						  stub->args.unlink_cbk.op_errno, +                                                  &stub->args.unlink_cbk.preparent, +                                                  &stub->args.unlink_cbk.postparent);  		break;  	} @@ -3070,13 +3165,17 @@ call_resume_unwind (call_stub_t *stub)  		if (!stub->args.rmdir_cbk.fn)  			STACK_UNWIND (stub->frame,  				      stub->args.rmdir_cbk.op_ret, -				      stub->args.rmdir_cbk.op_errno); +				      stub->args.rmdir_cbk.op_errno, +                                      &stub->args.rmdir_cbk.preparent, +                                      &stub->args.rmdir_cbk.postparent);  		else  			stub->args.unlink_cbk.fn (stub->frame,  						  stub->frame->cookie,  						  stub->frame->this,  						  stub->args.rmdir_cbk.op_ret, -						  stub->args.rmdir_cbk.op_errno); +						  stub->args.rmdir_cbk.op_errno, +                                                  &stub->args.rmdir_cbk.preparent, +                                                  &stub->args.rmdir_cbk.postparent);  		break;  	} @@ -3087,7 +3186,9 @@ call_resume_unwind (call_stub_t *stub)  				      stub->args.symlink_cbk.op_ret,  				      stub->args.symlink_cbk.op_errno,  				      stub->args.symlink_cbk.inode, -				      &stub->args.symlink_cbk.buf); +                                      &stub->args.symlink_cbk.buf, +                                      &stub->args.symlink_cbk.preparent, +                                      &stub->args.symlink_cbk.postparent);  		else  			stub->args.symlink_cbk.fn (stub->frame,  						   stub->frame->cookie, @@ -3095,7 +3196,9 @@ call_resume_unwind (call_stub_t *stub)  						   stub->args.symlink_cbk.op_ret,  						   stub->args.symlink_cbk.op_errno,  						   stub->args.symlink_cbk.inode, -						   &stub->args.symlink_cbk.buf); +                                                   &stub->args.symlink_cbk.buf, +                                                   &stub->args.symlink_cbk.preparent, +                                                   &stub->args.symlink_cbk.postparent);  	}  	break; @@ -3106,14 +3209,22 @@ call_resume_unwind (call_stub_t *stub)  			STACK_UNWIND (stub->frame,  				      stub->args.rename_cbk.op_ret,  				      stub->args.rename_cbk.op_errno, -				      &stub->args.rename_cbk.buf); +				      &stub->args.rename_cbk.buf, +                                      &stub->args.rename_cbk.preoldparent, +                                      &stub->args.rename_cbk.postoldparent, +                                      &stub->args.rename_cbk.prenewparent, +                                      &stub->args.rename_cbk.postnewparent);  		else  			stub->args.rename_cbk.fn (stub->frame,  						  stub->frame->cookie,  						  stub->frame->this,  						  stub->args.rename_cbk.op_ret,  						  stub->args.rename_cbk.op_errno, -						  &stub->args.rename_cbk.buf); +						  &stub->args.rename_cbk.buf, +                                                  &stub->args.rename_cbk.preoldparent, +                                                  &stub->args.rename_cbk.postoldparent, +                                                  &stub->args.rename_cbk.prenewparent, +                                                  &stub->args.rename_cbk.postnewparent);  #endif  		break;  	} @@ -3133,7 +3244,9 @@ call_resume_unwind (call_stub_t *stub)  						stub->args.link_cbk.op_ret,  						stub->args.link_cbk.op_errno,  						stub->args.link_cbk.inode, -						&stub->args.link_cbk.buf); +                                                &stub->args.link_cbk.buf, +                                                &stub->args.link_cbk.preparent, +                                                &stub->args.link_cbk.postparent);  		break;  	} @@ -3177,14 +3290,16 @@ call_resume_unwind (call_stub_t *stub)  			STACK_UNWIND (stub->frame,  				      stub->args.truncate_cbk.op_ret,  				      stub->args.truncate_cbk.op_errno, -				      &stub->args.truncate_cbk.buf); +				      &stub->args.truncate_cbk.prebuf, +                                      &stub->args.truncate_cbk.postbuf);  		else  			stub->args.truncate_cbk.fn (stub->frame,  						    stub->frame->cookie,  						    stub->frame->this,  						    stub->args.truncate_cbk.op_ret,  						    stub->args.truncate_cbk.op_errno, -						    &stub->args.truncate_cbk.buf); +						    &stub->args.truncate_cbk.prebuf, +                                                    &stub->args.truncate_cbk.postbuf);  		break;  	} @@ -3217,14 +3332,16 @@ call_resume_unwind (call_stub_t *stub)  			STACK_UNWIND (stub->frame,  				      stub->args.writev_cbk.op_ret,  				      stub->args.writev_cbk.op_errno, -				      &stub->args.writev_cbk.stbuf); +                                      &stub->args.writev_cbk.prebuf, +				      &stub->args.writev_cbk.postbuf);  		else  			stub->args.writev_cbk.fn (stub->frame,  						  stub->frame->cookie,  						  stub->frame->this,  						  stub->args.writev_cbk.op_ret,  						  stub->args.writev_cbk.op_errno, -						  &stub->args.writev_cbk.stbuf); +                                                  &stub->args.writev_cbk.prebuf, +						  &stub->args.writev_cbk.postbuf);  		break;  	} @@ -3266,13 +3383,17 @@ call_resume_unwind (call_stub_t *stub)  		if (!stub->args.fsync_cbk.fn)  			STACK_UNWIND (stub->frame,  				      stub->args.fsync_cbk.op_ret, -				      stub->args.fsync_cbk.op_errno); +				      stub->args.fsync_cbk.op_errno, +                                      &stub->args.fsync_cbk.prebuf, +                                      &stub->args.fsync_cbk.postbuf);  		else  			stub->args.fsync_cbk.fn (stub->frame,  						 stub->frame->cookie,  						 stub->frame->this,  						 stub->args.fsync_cbk.op_ret, -						 stub->args.fsync_cbk.op_errno); +						 stub->args.fsync_cbk.op_errno, +                                                 &stub->args.fsync_cbk.prebuf, +                                                 &stub->args.fsync_cbk.postbuf);  		break;  	} @@ -3433,14 +3554,16 @@ call_resume_unwind (call_stub_t *stub)  			STACK_UNWIND (stub->frame,  				      stub->args.ftruncate_cbk.op_ret,  				      stub->args.ftruncate_cbk.op_errno, -				      &stub->args.ftruncate_cbk.buf); +				      &stub->args.ftruncate_cbk.prebuf, +				      &stub->args.ftruncate_cbk.postbuf);  		else  			stub->args.ftruncate_cbk.fn (stub->frame,  						     stub->frame->cookie,  						     stub->frame->this,  						     stub->args.ftruncate_cbk.op_ret,  						     stub->args.ftruncate_cbk.op_errno, -						     &stub->args.ftruncate_cbk.buf); +						     &stub->args.ftruncate_cbk.prebuf, +						     &stub->args.ftruncate_cbk.postbuf);  		break;  	} @@ -3605,7 +3728,8 @@ call_resume_unwind (call_stub_t *stub)  				      stub->args.lookup_cbk.op_errno,  				      stub->args.lookup_cbk.inode,  				      &stub->args.lookup_cbk.buf, -				      stub->args.lookup_cbk.dict); +                                      stub->args.lookup_cbk.dict, +                                      &stub->args.lookup_cbk.postparent);  		else  			stub->args.lookup_cbk.fn (stub->frame,   						  stub->frame->cookie, @@ -3613,8 +3737,9 @@ call_resume_unwind (call_stub_t *stub)  						  stub->args.lookup_cbk.op_ret,  						  stub->args.lookup_cbk.op_errno,  						  stub->args.lookup_cbk.inode, -						  &stub->args.lookup_cbk.buf,  -						  stub->args.lookup_cbk.dict); +                                                  &stub->args.lookup_cbk.buf, +                                                  stub->args.lookup_cbk.dict, +                                                  &stub->args.lookup_cbk.postparent);  		/* FIXME NULL should not be passed */  		if (stub->args.lookup_cbk.dict) diff --git a/libglusterfs/src/call-stub.h b/libglusterfs/src/call-stub.h index 63439478cc4..88e26c24f72 100644 --- a/libglusterfs/src/call-stub.h +++ b/libglusterfs/src/call-stub.h @@ -48,6 +48,7 @@ typedef struct {  			inode_t *inode;  			struct stat buf;  			dict_t *dict; +                        struct stat postparent;  		} lookup_cbk;  		/* stat */ @@ -131,7 +132,8 @@ typedef struct {  		struct {  			fop_truncate_cbk_t fn;  			int32_t op_ret, op_errno; -			struct stat buf; +			struct stat prebuf; +                        struct stat postbuf;  		} truncate_cbk;  		/* ftruncate */ @@ -143,7 +145,8 @@ typedef struct {  		struct {  			fop_ftruncate_cbk_t fn;  			int32_t op_ret, op_errno; -			struct stat buf; +			struct stat prebuf; +                        struct stat postbuf;  		} ftruncate_cbk;  		/* utimens */ @@ -179,6 +182,7 @@ typedef struct {  			fop_readlink_cbk_t fn;  			int32_t op_ret, op_errno;  			const char *buf; +                        struct stat sbuf;  		} readlink_cbk;  		/* mknod */ @@ -193,6 +197,8 @@ typedef struct {  			int32_t op_ret, op_errno;  			inode_t *inode;  			struct stat buf; +                        struct stat preparent; +                        struct stat postparent;  		} mknod_cbk;  		/* mkdir */ @@ -206,6 +212,8 @@ typedef struct {  			int32_t op_ret, op_errno;  			inode_t *inode;  			struct stat buf; +                        struct stat preparent; +                        struct stat postparent;  		} mkdir_cbk;  		/* unlink */ @@ -216,6 +224,8 @@ typedef struct {  		struct {  			fop_unlink_cbk_t fn;  			int32_t op_ret, op_errno; +                        struct stat preparent; +                        struct stat postparent;  		} unlink_cbk;  		/* rmdir */ @@ -226,6 +236,8 @@ typedef struct {  		struct {  			fop_rmdir_cbk_t fn;  			int32_t op_ret, op_errno; +                        struct stat preparent; +                        struct stat postparent;  		} rmdir_cbk;  		/* symlink */ @@ -239,6 +251,8 @@ typedef struct {  			int32_t op_ret, op_errno;  			inode_t *inode;  			struct stat buf; +                        struct stat preparent; +                        struct stat postparent;  		} symlink_cbk;  		/* rename */ @@ -251,6 +265,10 @@ typedef struct {  			fop_rename_cbk_t fn;  			int32_t op_ret, op_errno;  			struct stat buf; +                        struct stat preoldparent; +                        struct stat postoldparent; +                        struct stat prenewparent; +                        struct stat postnewparent;  		} rename_cbk;  		/* link */ @@ -264,6 +282,8 @@ typedef struct {  			int32_t op_ret, op_errno;  			inode_t *inode;  			struct stat buf; +                        struct stat preparent; +                        struct stat postparent;  		} link_cbk;  		/* create */ @@ -280,6 +300,8 @@ typedef struct {  			fd_t *fd;  			inode_t *inode;  			struct stat buf; +                        struct stat preparent; +                        struct stat postparent;  		} create_cbk;  		/* open */ @@ -288,6 +310,7 @@ typedef struct {  			loc_t loc;  			int32_t flags;  			fd_t *fd; +                        int32_t wbflags;  		} open;  		struct {  			fop_open_cbk_t fn; @@ -324,7 +347,8 @@ typedef struct {  		struct {  			fop_writev_cbk_t fn;  			int32_t op_ret, op_errno; -			struct stat stbuf; +                        struct stat prebuf; +			struct stat postbuf;  		} writev_cbk;  		/* flush */ @@ -346,6 +370,8 @@ typedef struct {  		struct {  			fop_fsync_cbk_t fn;  			int32_t op_ret, op_errno; +                        struct stat prebuf; +                        struct stat postbuf;  		} fsync_cbk;  		/* opendir */ @@ -678,7 +704,8 @@ fop_lookup_cbk_stub (call_frame_t *frame,  		     int32_t op_errno,  		     inode_t *inode,  		     struct stat *buf, -		     dict_t *dict); +                     dict_t *dict, +                     struct stat *postparent);  call_stub_t *  fop_stat_stub (call_frame_t *frame,  	       fop_stat_t fn, @@ -760,7 +787,8 @@ fop_truncate_cbk_stub (call_frame_t *frame,  		       fop_truncate_cbk_t fn,  		       int32_t op_ret,  		       int32_t op_errno, -		       struct stat *buf); +		       struct stat *prebuf, +                       struct stat *postbuf);  call_stub_t *  fop_ftruncate_stub (call_frame_t *frame, @@ -773,7 +801,8 @@ fop_ftruncate_cbk_stub (call_frame_t *frame,  			fop_ftruncate_cbk_t fn,  			int32_t op_ret,  			int32_t op_errno, -			struct stat *buf); +			struct stat *prebuf, +                        struct stat *postbuf);  call_stub_t *  fop_utimens_stub (call_frame_t *frame, @@ -811,7 +840,8 @@ fop_readlink_cbk_stub (call_frame_t *frame,  		       fop_readlink_cbk_t fn,  		       int32_t op_ret,  		       int32_t op_errno, -		       const char *path); +		       const char *path, +                       struct stat *buf);  call_stub_t *  fop_mknod_stub (call_frame_t *frame, @@ -826,7 +856,9 @@ fop_mknod_cbk_stub (call_frame_t *frame,  		    int32_t op_ret,  		    int32_t op_errno,  		    inode_t *inode, -		    struct stat *buf); +                    struct stat *buf, +                    struct stat *preparent, +                    struct stat *postparent);  call_stub_t *  fop_mkdir_stub (call_frame_t *frame, @@ -840,7 +872,9 @@ fop_mkdir_cbk_stub (call_frame_t *frame,  		    int32_t op_ret,  		    int32_t op_errno,  		    inode_t *inode, -		    struct stat *buf); +                    struct stat *buf, +                    struct stat *preparent, +                    struct stat *postparent);  call_stub_t *  fop_unlink_stub (call_frame_t *frame, @@ -851,7 +885,9 @@ call_stub_t *  fop_unlink_cbk_stub (call_frame_t *frame,  		     fop_unlink_cbk_t fn,  		     int32_t op_ret, -		     int32_t op_errno); +		     int32_t op_errno, +                     struct stat *preparent, +                     struct stat *postparent);  call_stub_t *  fop_rmdir_stub (call_frame_t *frame, @@ -862,7 +898,9 @@ call_stub_t *  fop_rmdir_cbk_stub (call_frame_t *frame,  		    fop_rmdir_cbk_t fn,  		    int32_t op_ret, -		    int32_t op_errno); +		    int32_t op_errno, +                    struct stat *preparent, +                    struct stat *postparent);  call_stub_t *  fop_symlink_stub (call_frame_t *frame, @@ -876,7 +914,9 @@ fop_symlink_cbk_stub (call_frame_t *frame,  		      int32_t op_ret,  		      int32_t op_errno,  		      inode_t *inode, -		      struct stat *buf); +                      struct stat *buf, +                      struct stat *preparent, +                      struct stat *postparent);  call_stub_t *  fop_rename_stub (call_frame_t *frame, @@ -889,7 +929,11 @@ fop_rename_cbk_stub (call_frame_t *frame,  		     fop_rename_cbk_t fn,  		     int32_t op_ret,  		     int32_t op_errno, -		     struct stat *buf); +		     struct stat *buf, +                     struct stat *preoldparent, +                     struct stat *postoldparent, +                     struct stat *prenewparent, +                     struct stat *postnewparent);  call_stub_t *  fop_link_stub (call_frame_t *frame, @@ -903,7 +947,9 @@ fop_link_cbk_stub (call_frame_t *frame,  		   int32_t op_ret,  		   int32_t op_errno,  		   inode_t *inode, -		   struct stat *buf); +                   struct stat *buf, +                   struct stat *preparent, +                   struct stat *postparent);  call_stub_t *  fop_create_stub (call_frame_t *frame, @@ -919,14 +965,17 @@ fop_create_cbk_stub (call_frame_t *frame,  		     int32_t op_errno,  		     fd_t *fd,  		     inode_t *inode, -		     struct stat *buf); +		     struct stat *buf, +                     struct stat *preparent, +                     struct stat *postparent);  call_stub_t *  fop_open_stub (call_frame_t *frame,  	       fop_open_t fn,  	       loc_t *loc,  	       int32_t flags, -	       fd_t *fd); +	       fd_t *fd, +               int32_t wbflags);  call_stub_t *  fop_open_cbk_stub (call_frame_t *frame, @@ -966,7 +1015,8 @@ fop_writev_cbk_stub (call_frame_t *frame,  		     fop_writev_cbk_t fn,  		     int32_t op_ret,  		     int32_t op_errno, -		     struct stat *stbuf); +                     struct stat *prebuf, +                     struct stat *postbuf);  call_stub_t *  fop_flush_stub (call_frame_t *frame, @@ -989,7 +1039,9 @@ call_stub_t *  fop_fsync_cbk_stub (call_frame_t *frame,  		    fop_fsync_cbk_t fn,  		    int32_t op_ret, -		    int32_t op_errno); +		    int32_t op_errno, +                    struct stat *prebuf, +                    struct stat *postbuf);  call_stub_t *  fop_opendir_stub (call_frame_t *frame, diff --git a/libglusterfs/src/defaults.c b/libglusterfs/src/defaults.c index f72eca1f819..a2163010331 100644 --- a/libglusterfs/src/defaults.c +++ b/libglusterfs/src/defaults.c @@ -41,14 +41,16 @@ default_lookup_cbk (call_frame_t *frame,  		    int32_t op_errno,  		    inode_t *inode,  		    struct stat *buf, -		    dict_t *dict) +                    dict_t *dict, +                    struct stat *postparent)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno,  		      inode,  		      buf, -		      dict); +                      dict, +                      postparent);  	return 0;  } @@ -234,12 +236,14 @@ default_truncate_cbk (call_frame_t *frame,  		      xlator_t *this,  		      int32_t op_ret,  		      int32_t op_errno, -		      struct stat *buf) +		      struct stat *prebuf, +                      struct stat *postbuf)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno, -		      buf); +		      prebuf, +                      postbuf);  	return 0;  } @@ -264,12 +268,14 @@ default_ftruncate_cbk (call_frame_t *frame,  		       xlator_t *this,  		       int32_t op_ret,  		       int32_t op_errno, -		       struct stat *buf) +		       struct stat *prebuf, +                       struct stat *postbuf)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno, -		      buf); +		      prebuf, +                      postbuf);  	return 0;  } @@ -354,12 +360,14 @@ default_readlink_cbk (call_frame_t *frame,  		      xlator_t *this,  		      int32_t op_ret,  		      int32_t op_errno, -		      const char *path) +		      const char *path, +                      struct stat *buf)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno, -		      path); +		      path, +                      buf);  	return 0;  } @@ -386,13 +394,17 @@ default_mknod_cbk (call_frame_t *frame,  		   int32_t op_ret,  		   int32_t op_errno,  		   inode_t *inode, -		   struct stat *buf) +                   struct stat *buf, +                   struct stat *preparent, +                   struct stat *postparent)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno,  		      inode, -		      buf); +                      buf, +                      preparent, +                      postparent);  	return 0;  } @@ -418,13 +430,17 @@ default_mkdir_cbk (call_frame_t *frame,  		   int32_t op_ret,  		   int32_t op_errno,  		   inode_t *inode, -		   struct stat *buf) +                   struct stat *buf, +                   struct stat *preparent, +                   struct stat *postparent)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno,  		      inode, -		      buf); +                      buf, +                      preparent, +                      postparent);  	return 0;  } @@ -447,9 +463,11 @@ default_unlink_cbk (call_frame_t *frame,  		    void *cookie,  		    xlator_t *this,  		    int32_t op_ret, -		    int32_t op_errno) +		    int32_t op_errno, +                    struct stat *preparent, +                    struct stat *postparent)  { -	STACK_UNWIND (frame, op_ret, op_errno); +	STACK_UNWIND (frame, op_ret, op_errno, preparent, postparent);  	return 0;  } @@ -471,11 +489,15 @@ default_rmdir_cbk (call_frame_t *frame,  		   void *cookie,  		   xlator_t *this,  		   int32_t op_ret, -		   int32_t op_errno) +		   int32_t op_errno, +                   struct stat *preparent, +                   struct stat *postparent)  {  	STACK_UNWIND (frame,  		      op_ret, -		      op_errno); +		      op_errno, +                      preparent, +                      postparent);  	return 0;  } @@ -500,9 +522,12 @@ default_symlink_cbk (call_frame_t *frame,  		     int32_t op_ret,  		     int32_t op_errno,  		     inode_t *inode, -		     struct stat *buf) +                     struct stat *buf, +                     struct stat *preparent, +                     struct stat *postparent)  { -	STACK_UNWIND (frame, op_ret, op_errno, inode,	buf); +        STACK_UNWIND (frame, op_ret, op_errno, inode, buf, preparent, +                      postparent);  	return 0;  } @@ -527,9 +552,14 @@ default_rename_cbk (call_frame_t *frame,  		    xlator_t *this,  		    int32_t op_ret,  		    int32_t op_errno, -		    struct stat *buf) +		    struct stat *buf, +                    struct stat *preoldparent, +                    struct stat *postoldparent, +                    struct stat *prenewparent, +                    struct stat *postnewparent)  { -	STACK_UNWIND (frame, op_ret, op_errno, buf); +	STACK_UNWIND (frame, op_ret, op_errno, buf, preoldparent, postoldparent, +                      prenewparent, postnewparent);  	return 0;  } @@ -555,9 +585,12 @@ default_link_cbk (call_frame_t *frame,  		  int32_t op_ret,  		  int32_t op_errno,  		  inode_t *inode, -		  struct stat *buf) +                  struct stat *buf, +                  struct stat *preparent, +                  struct stat *postparent)  { -	STACK_UNWIND (frame, op_ret, op_errno, inode,	buf); +        STACK_UNWIND (frame, op_ret, op_errno, inode, buf, preparent, +                      postparent);  	return 0;  } @@ -584,9 +617,12 @@ default_create_cbk (call_frame_t *frame,  		    int32_t op_errno,  		    fd_t *fd,  		    inode_t *inode, -		    struct stat *buf) +		    struct stat *buf, +                    struct stat *preparent, +                    struct stat *postparent)  { -	STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf); +	STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf, preparent, +                      postparent);  	return 0;  } @@ -623,13 +659,14 @@ int32_t  default_open (call_frame_t *frame,  	      xlator_t *this,  	      loc_t *loc, -	      int32_t flags, fd_t *fd) +	      int32_t flags, fd_t *fd, +              int32_t wbflags)  {  	STACK_WIND (frame,  		    default_open_cbk,  		    FIRST_CHILD(this),  		    FIRST_CHILD(this)->fops->open, -		    loc, flags, fd); +		    loc, flags, fd, wbflags);  	return 0;  } @@ -678,12 +715,14 @@ default_writev_cbk (call_frame_t *frame,  		    xlator_t *this,  		    int32_t op_ret,  		    int32_t op_errno, -		    struct stat *stbuf) +                    struct stat *prebuf, +		    struct stat *postbuf)  {  	STACK_UNWIND (frame,  		      op_ret,  		      op_errno, -		      stbuf); +                      prebuf, +		      postbuf);  	return 0;  } @@ -740,11 +779,15 @@ default_fsync_cbk (call_frame_t *frame,  		   void *cookie,  		   xlator_t *this,  		   int32_t op_ret, -		   int32_t op_errno) +		   int32_t op_errno, +                   struct stat *prebuf, +                   struct stat *postbuf)  {  	STACK_UNWIND (frame,  		      op_ret, -		      op_errno); +		      op_errno, +                      prebuf, +                      postbuf);  	return 0;  } diff --git a/libglusterfs/src/defaults.h b/libglusterfs/src/defaults.h index d8b99848683..2c167d97ed4 100644 --- a/libglusterfs/src/defaults.h +++ b/libglusterfs/src/defaults.h @@ -161,7 +161,8 @@ int32_t default_create (call_frame_t *frame,  int32_t default_open (call_frame_t *frame,  		      xlator_t *this,  		      loc_t *loc, -		      int32_t flags, fd_t *fd); +		      int32_t flags, fd_t *fd, +                      int32_t wbflags);  int32_t default_readv (call_frame_t *frame,  		       xlator_t *this, diff --git a/libglusterfs/src/protocol.h b/libglusterfs/src/protocol.h index 91b876a6ff3..59ebaf2bc08 100644 --- a/libglusterfs/src/protocol.h +++ b/libglusterfs/src/protocol.h @@ -337,6 +337,7 @@ typedef struct {  	char     path[0];     /* NULL terminated */  } __attribute__((packed)) gf_fop_readlink_req_t;  typedef struct { +        struct gf_stat buf;  	char     path[0]; /* NULL terminated */  } __attribute__((packed)) gf_fop_readlink_rsp_t; @@ -350,6 +351,8 @@ typedef struct {  } __attribute__((packed)) gf_fop_mknod_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_mknod_rsp_t; @@ -361,6 +364,8 @@ typedef struct {  } __attribute__((packed)) gf_fop_mkdir_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_mkdir_rsp_t; @@ -370,6 +375,8 @@ typedef struct {  	char     bname[0]; /* NULL terminated */  } __attribute__((packed)) gf_fop_unlink_req_t;  typedef struct { +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_unlink_rsp_t; @@ -379,6 +386,8 @@ typedef struct {  	char     bname[0]; /* NULL terminated */  } __attribute__((packed)) gf_fop_rmdir_req_t;  typedef struct { +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_rmdir_rsp_t; @@ -390,6 +399,8 @@ typedef struct {  } __attribute__((packed)) gf_fop_symlink_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat preparent; +        struct gf_stat postparent;  }__attribute__((packed)) gf_fop_symlink_rsp_t; @@ -403,6 +414,10 @@ typedef struct {  } __attribute__((packed)) gf_fop_rename_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat preoldparent; +        struct gf_stat postoldparent; +        struct gf_stat prenewparent; +        struct gf_stat postnewparent;  } __attribute__((packed)) gf_fop_rename_rsp_t; @@ -415,6 +430,8 @@ typedef struct {  }__attribute__((packed)) gf_fop_link_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_link_rsp_t; @@ -445,13 +462,15 @@ typedef struct {  	char     path[0];  } __attribute__((packed)) gf_fop_truncate_req_t;  typedef struct { -	struct gf_stat stat; +	struct gf_stat prestat; +        struct gf_stat poststat;  } __attribute__((packed)) gf_fop_truncate_rsp_t;  typedef struct {  	uint64_t ino;  	uint32_t flags; +        uint32_t wbflags;  	char     path[0];  } __attribute__((packed)) gf_fop_open_req_t;  typedef struct { @@ -478,7 +497,8 @@ typedef struct {  	uint32_t size;  } __attribute__((packed)) gf_fop_write_req_t;  typedef struct { -	struct gf_stat stat; +	struct gf_stat prestat; +        struct gf_stat poststat;  } __attribute__((packed)) gf_fop_write_rsp_t; @@ -504,6 +524,8 @@ typedef struct fsync_req {  	uint32_t data;  } __attribute__((packed)) gf_fop_fsync_req_t;  typedef struct { +        struct gf_stat prestat; +        struct gf_stat poststat;  } __attribute__((packed)) gf_fop_fsync_rsp_t; @@ -636,6 +658,8 @@ typedef struct {  typedef struct {  	struct gf_stat stat;  	uint64_t       fd; +        struct gf_stat preparent; +        struct gf_stat postparent;  } __attribute__((packed)) gf_fop_create_rsp_t; @@ -646,7 +670,8 @@ typedef struct {  	uint64_t offset;  } __attribute__((packed)) gf_fop_ftruncate_req_t;  typedef struct { -	struct gf_stat stat; +	struct gf_stat prestat; +        struct gf_stat poststat;  } __attribute__((packed)) gf_fop_ftruncate_rsp_t; @@ -757,6 +782,7 @@ typedef struct {  } __attribute__((packed)) gf_fop_lookup_req_t;  typedef struct {  	struct gf_stat stat; +        struct gf_stat postparent;  	uint32_t       dict_len;  	char           dict[0];  } __attribute__((packed)) gf_fop_lookup_rsp_t; diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index afaaed4a4d8..a00d4975d92 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -172,7 +172,8 @@ typedef int32_t (*fop_lookup_cbk_t) (call_frame_t *frame,  				     int32_t op_errno,  				     inode_t *inode,  				     struct stat *buf, -				     dict_t *xattr); +                                     dict_t *xattr, +                                     struct stat *postparent);  typedef int32_t (*fop_stat_cbk_t) (call_frame_t *frame,  				   void *cookie, @@ -221,14 +222,16 @@ typedef int32_t (*fop_truncate_cbk_t) (call_frame_t *frame,  				       xlator_t *this,  				       int32_t op_ret,  				       int32_t op_errno, -				       struct stat *buf); +				       struct stat *prebuf, +                                       struct stat *postbuf);  typedef int32_t (*fop_ftruncate_cbk_t) (call_frame_t *frame,  					void *cookie,  					xlator_t *this,  					int32_t op_ret,  					int32_t op_errno, -					struct stat *buf); +					struct stat *prebuf, +                                        struct stat *postbuf);  typedef int32_t (*fop_utimens_cbk_t) (call_frame_t *frame,  				      void *cookie, @@ -248,7 +251,8 @@ typedef int32_t (*fop_readlink_cbk_t) (call_frame_t *frame,  				       xlator_t *this,  				       int32_t op_ret,  				       int32_t op_errno, -				       const char *path); +				       const char *path, +                                       struct stat *buf);  typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame,  				    void *cookie, @@ -256,7 +260,9 @@ typedef int32_t (*fop_mknod_cbk_t) (call_frame_t *frame,  				    int32_t op_ret,  				    int32_t op_errno,  				    inode_t *inode, -				    struct stat *buf); +                                    struct stat *buf, +                                    struct stat *preparent, +                                    struct stat *postparent);  typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame,  				    void *cookie, @@ -264,19 +270,25 @@ typedef int32_t (*fop_mkdir_cbk_t) (call_frame_t *frame,  				    int32_t op_ret,  				    int32_t op_errno,  				    inode_t *inode, -				    struct stat *buf); +                                    struct stat *buf, +                                    struct stat *preparent, +                                    struct stat *postparent);  typedef int32_t (*fop_unlink_cbk_t) (call_frame_t *frame,  				     void *cookie,  				     xlator_t *this,  				     int32_t op_ret, -				     int32_t op_errno); +				     int32_t op_errno, +                                     struct stat *preparent, +                                     struct stat *postparent);  typedef int32_t (*fop_rmdir_cbk_t) (call_frame_t *frame,  				    void *cookie,  				    xlator_t *this,  				    int32_t op_ret, -				    int32_t op_errno); +				    int32_t op_errno, +                                    struct stat *preparent, +                                    struct stat *postparent);  typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame,  				      void *cookie, @@ -284,14 +296,20 @@ typedef int32_t (*fop_symlink_cbk_t) (call_frame_t *frame,  				      int32_t op_ret,  				      int32_t op_errno,  				      inode_t *inode, -				      struct stat *buf); +                                      struct stat *buf, +                                      struct stat *preparent, +                                      struct stat *postparent);  typedef int32_t (*fop_rename_cbk_t) (call_frame_t *frame,  				     void *cookie,  				     xlator_t *this,  				     int32_t op_ret,  				     int32_t op_errno, -				     struct stat *buf); +				     struct stat *buf, +                                     struct stat *preoldparent, +                                     struct stat *postoldparent, +                                     struct stat *prenewparent, +                                     struct stat *postnewparent);  typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame,  				   void *cookie, @@ -299,7 +317,9 @@ typedef int32_t (*fop_link_cbk_t) (call_frame_t *frame,  				   int32_t op_ret,  				   int32_t op_errno,  				   inode_t *inode, -				   struct stat *buf); +                                   struct stat *buf, +                                   struct stat *preparent, +                                   struct stat *postparent);  typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame,  				     void *cookie, @@ -308,7 +328,9 @@ typedef int32_t (*fop_create_cbk_t) (call_frame_t *frame,  				     int32_t op_errno,  				     fd_t *fd,  				     inode_t *inode, -				     struct stat *buf); +				     struct stat *buf, +                                     struct stat *preparent, +                                     struct stat *postparent);  typedef int32_t (*fop_open_cbk_t) (call_frame_t *frame,  				   void *cookie, @@ -332,7 +354,8 @@ typedef int32_t (*fop_writev_cbk_t) (call_frame_t *frame,  				     xlator_t *this,  				     int32_t op_ret,  				     int32_t op_errno, -				     struct stat *stbuf); +				     struct stat *prebuf, +                                     struct stat *postbuf);  typedef int32_t (*fop_flush_cbk_t) (call_frame_t *frame,  				    void *cookie, @@ -344,7 +367,9 @@ typedef int32_t (*fop_fsync_cbk_t) (call_frame_t *frame,  				    void *cookie,  				    xlator_t *this,  				    int32_t op_ret, -				    int32_t op_errno); +				    int32_t op_errno, +                                    struct stat *prebuf, +                                    struct stat *postbuf);  typedef int32_t (*fop_opendir_cbk_t) (call_frame_t *frame,  				      void *cookie, @@ -593,11 +618,21 @@ typedef int32_t (*fop_create_t) (call_frame_t *frame,  				 mode_t mode,  				 fd_t *fd); +/* Tell subsequent writes on the fd_t to fsync after every writev fop without + * requiring a fsync fop. + */ +#define GF_OPEN_FSYNC   0x01 + +/* Tell write-behind to disable writing behind despite O_SYNC not being set. + */ +#define GF_OPEN_NOWB    0x02 +  typedef int32_t (*fop_open_t) (call_frame_t *frame,  			       xlator_t *this,  			       loc_t *loc,  			       int32_t flags, -			       fd_t *fd); +			       fd_t *fd, +                               int32_t wbflags);  typedef int32_t (*fop_readv_t) (call_frame_t *frame,  				xlator_t *this,  | 
