From: Will T. <wt...@pr...> - 2006-06-07 10:49:55
|
Any news on how much beer would be required for you to make your patch read a config from IET on a per target or lun basis ? -------- Original Message -------- Subject: [Fwd: Re: [Iscsitarget-devel] SYNCHRONIZE_CACHE - Merge patch by make optional] Date: Fri, 02 Jun 2006 13:52:38 +0100 From: Will Tatam <wt...@pr...> To: rab...@gm... If you could write this patch then I owe you a beer -------- Original Message -------- Subject: Re: [Iscsitarget-devel] SYNCHRONIZE_CACHE - Merge patch by make optional Date: Thu, 01 Jun 2006 23:37:17 +0900 From: FUJITA Tomonori <fuj...@la...> To: mi...@el... CC: isc...@li..., ef...@in... References: <1149165675.19907.3.camel@localhost.localdomain> <524...@we...> <1149169797.19907.37.camel@localhost.localdomain> From: Ming Zhang <mi...@el...> Subject: Re: [Iscsitarget-devel] SYNCHRONIZE_CACHE - Merge patch by make optional Date: Thu, 01 Jun 2006 09:49:57 -0400 > On Thu, 2006-06-01 at 09:31 -0400, ef...@in... wrote: > > On Thu, June 1, 2006 08:41, Ming Zhang wrote: > > > there are already enough discussion on list about this topic. i believe > > > you can grasp the whole reason behind it. > > > > > > if you grab the patch, apply it, and use it. then u can enjoy the speed > > > easily. > > > > Yes, and I could even fork the project, but that would be a waste of > > energy. However it seems natural to me that the sync/async exists as an > > option at least on the roadmap... > > this depends on our main developer. OK. I'm waiting for someone to send a patch. Note that this could lead to TMFs due to synchronizing lots of dirty pages one time and OOM. And as everyone knows, IET's TMF code is not perfect. So please don't complain about it if you use the asynchronous feature. _______________________________________________ Iscsitarget-devel mailing list Isc...@li... https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel -- Will Tatam Internal Systems Manager Tel +44 (0) 20 7837 2690 Fax +44 (0) 20 7278 3113 SIP wt...@pr... JID wt...@ja... Premier IT http://www.premierit.com/ New Premier House | Southampton Row London | WC1B 5AL -- Will Tatam Internal Systems Manager Tel +44 (0) 20 7837 2690 Fax +44 (0) 20 7278 3113 SIP wt...@pr... JID wt...@ja... Premier IT http://www.premierit.com/ New Premier House | Southampton Row London | WC1B 5AL |
From: Ming Z. <mi...@el...> - 2005-02-04 21:19:09
|
This is what I got from linux-cluster list. We need to have the persistent reserve support in order to support GFS. Ming -----Forwarded Message----- > From: Benjamin Marzinski <bma...@re...> > To: Ming Zhang <mi...@el...> > Cc: linux clistering <lin...@re...> > Subject: Re: [Linux-cluster] [Fwd: any special requirement on scsi device?] > Date: Fri, 04 Feb 2005 14:20:31 -0600 > > On Fri, Feb 04, 2005 at 02:15:00PM -0500, Ming Zhang wrote: > > On Fri, 2005-02-04 at 14:03, Benjamin Marzinski wrote: > > > On Mon, Jan 31, 2005 at 08:17:19PM -0500, Ming Zhang wrote: > > > > Hi folks > > > > > > > > I asked this question today, somebody there guided me to here. Can > > > > anybody help me on this? Thanks. > > > > > > > > ps, how to subscribe on this list? Thanks. > > > > > > I believe you can get to a subscription page from > > > http://sources.redhat.com/cluster > > thx a lot. though it is very slow to connect. :P > > > > > > > > > > > Pls cc to me, Thanks. > > > > > > > > Ming > > > > > > > > -----Forwarded Message----- > > > > > From: Ming Zhang <mi...@el...> > > > > > To: ope...@li... > > > > > Subject: any special requirement on scsi device? > > > > > Date: Mon, 31 Jan 2005 16:41:00 -0500 > > > > > > > > > > Hi, folks > > > > > > > > > > I wonder if opengfs has any special requirements on scsi deivces. For > > > > > example, reserve/release scsi commands. > > > > > > > > > > the reason i ask this is we are developing a open source iscsi target > > > > > and would like to support opengfs. since we build all scsi response, we > > > > > need to know what extra scsi commands or feature we need to support. > > > > > > Persistent reservations would be really useful for fencing. > > u mean this is "useful". but is this "enough"? > > We have a fencing agent based on SCSI 3 persistent reservation. So if you > implement persistent reservation, that should be enough for GFS fencing > purposes. > > > because many end users on our list ask for this feature. so i want to > > know what we need to do in order to get it done. thanks. > > > > ps, what is the minimum # of pc i need in order to install a gfs and > > test? > > two machines. I'm not sure that we have made the persistent reservation > fencing agent generally available, but if you would like to test it, we can > defintely do that. > > -Ben > > > ming > > > > > > > > -Ben > > > > > > > > > > > > > thanks. > > > > > > > > > > > > > > > ming > > > > > > > > -- > > > > Linux-cluster mailing list > > > > Lin...@re... > > > > http://www.redhat.com/mailman/listinfo/linux-cluster |
From: AJ L. <al...@re...> - 2005-02-04 21:32:46
|
From: Ming Zhang <mi...@el...> Subject: [Iscsitarget-devel] [Fwd: Re: [Linux-cluster] [Fwd: any special requirement on scsi device?]] Date: Fri, 04 Feb 2005 16:19:02 -0500 > This is what I got from linux-cluster list. > > We need to have the persistent reserve support in order to support GFS. Ming, Persistant reservations *can* be used for fencing with GFS, but it is not *required* for use with GFS. AFAIK, there are no SCSI specific commands that GFS requires at this time. Regards, - AJ Lewis Voice: 612-638-0500 Red Hat Inc. E-Mail: al...@re... 720 Washington Ave. SE, Suite 200 Minneapolis, MN 55414 Current GPG fingerprint = D9F8 EDCE 4242 855F A03D 9B63 F50C 54A8 578C 8715 Grab the key at: http://people.redhat.com/alewis/gpg.html or one of the many keyservers out there... |
From: Ming Z. <mi...@el...> - 2005-02-04 21:41:48
|
hehe. confused. so this is optional, but not mandatory. but how gfs decide whether to use it? seems u are on this list as well. so do u have experience on iet+gfs? ming On Fri, 2005-02-04 at 16:32, AJ Lewis wrote: > From: Ming Zhang <mi...@el...> > Subject: [Iscsitarget-devel] [Fwd: Re: [Linux-cluster] [Fwd: any special requirement on scsi device?]] > Date: Fri, 04 Feb 2005 16:19:02 -0500 > > > This is what I got from linux-cluster list. > > > > We need to have the persistent reserve support in order to support GFS. > > Ming, > > Persistant reservations *can* be used for fencing with GFS, but it is > not *required* for use with GFS. AFAIK, there are no SCSI specific > commands that GFS requires at this time. > > Regards, > - > AJ Lewis Voice: 612-638-0500 > Red Hat Inc. E-Mail: al...@re... > 720 Washington Ave. SE, Suite 200 > Minneapolis, MN 55414 > > Current GPG fingerprint = D9F8 EDCE 4242 855F A03D 9B63 F50C 54A8 578C 8715 > Grab the key at: http://people.redhat.com/alewis/gpg.html or one of the > many keyservers out there... |
From: AJ L. <al...@re...> - 2005-02-04 21:56:02
|
From: Ming Zhang <mi...@el...> Subject: Re: any special requirement on scsi device? Date: Fri, 04 Feb 2005 16:41:42 -0500 > hehe. confused. > > so this is optional, but not mandatory. but how gfs decide whether to > use it? There are cluster configuration file(s) that the cluster infrastructure on uses to handle this. GFS itself (the filesystem) relies on the cluster infrastructure to handle things like fencing. > seems u are on this list as well. so do u have experience on iet+gfs? I've not used iet yet, but I have run GFS on iSCSI with hardware iSCSI targets and the linux-iscsi initiator from sourceforge. Regards, -- AJ Lewis Voice: 612-638-0500 Red Hat Inc. E-Mail: al...@re... 720 Washington Ave. SE, Suite 200 Minneapolis, MN 55414 Current GPG fingerprint = D9F8 EDCE 4242 855F A03D 9B63 F50C 54A8 578C 8715 Grab the key at: http://people.redhat.com/alewis/gpg.html or one of the many keyservers out there... |
From: Ming Z. <mi...@el...> - 2005-02-04 22:01:33
|
On Fri, 2005-02-04 at 16:55, AJ Lewis wrote: > From: Ming Zhang <mi...@el...> > Subject: Re: any special requirement on scsi device? > Date: Fri, 04 Feb 2005 16:41:42 -0500 > > > hehe. confused. > > > > so this is optional, but not mandatory. but how gfs decide whether to > > use it? > > There are cluster configuration file(s) that the cluster > infrastructure on uses to handle this. GFS itself (the filesystem) > relies on the cluster infrastructure to handle things like fencing. ic. thx. > > > seems u are on this list as well. so do u have experience on iet+gfs? > > I've not used iet yet, but I have run GFS on iSCSI with hardware iSCSI targets and the linux-iscsi initiator from sourceforge. it is fine. i am thinking if i can run GFS on 2 linux running in vmware. > > Regards, > -- > AJ Lewis Voice: 612-638-0500 > Red Hat Inc. E-Mail: al...@re... > 720 Washington Ave. SE, Suite 200 > Minneapolis, MN 55414 > > Current GPG fingerprint = D9F8 EDCE 4242 855F A03D 9B63 F50C 54A8 578C 8715 > Grab the key at: http://people.redhat.com/alewis/gpg.html or one of the > many keyservers out there... |
From: Richard B. <rab...@gm...> - 2006-06-07 22:51:06
|
On 6/7/06, Will Tatam <wt...@pr...> wrote: > Any news on how much beer would be required for you to make your patch > read a config from IET on a per target or lun basis ? > I've had no time lately to revisit the situation. |
From: Richard B. <rab...@gm...> - 2006-06-27 20:58:14
Attachments:
best_sync.patch
|
I finally worked through the parameter setting / passing logic... so here's the new and improved version of my patch that defaults to the original "safe" behavior - syncing on every write, but lets you change that on a target specific basis. The new parameter is called "SyncWrite" and it defaults to 1: root@LS09:/etc# grep -v '^[ ]*#' ietd.conf Target iqn.1996-08.com.elliott-turbo:storage Lun 0 Path=/x/tmp/1gfile,Type=fileio Lun 1 Path=/x/tmp/10gfile,Type=fileio MaxRecvDataSegmentLength 262144 MaxXmitDataSegmentLength 262144 SyncWrite 0 Target iqn.1996-08.com.elliott-turbo:storage.100g Lun 0 Path=/x/tmp/100gfile,Type=fileio MaxRecvDataSegmentLength 262144 MaxXmitDataSegmentLength 262144 The new parameter setting is also reflected in the /proc entry as in: root@LS09:/etc# cat /proc/net/iet/volume tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g lun:0 state:0 iotype:fileio syncwrite:1 path:/x/tmp/100gfile tid:1 name:iqn.1996-08.com.elliott-turbo:storage lun:0 state:0 iotype:fileio syncwrite:0 path:/x/tmp/1gfile lun:1 state:0 iotype:fileio syncwrite:0 path:/x/tmp/10gfile I also added some debug code to reveal how frequently sync's are being called in the output of dmesg. Rich B |
From: Emmanuel F. <ef...@in...> - 2006-06-27 21:04:56
|
Le Tue, 27 Jun 2006 16:58:09 -0400 vous =E9criviez: > I finally worked through the parameter setting / passing logic... so > here's the new and improved version of my patch that defaults to the > original "safe" behavior - syncing on every write, but lets you change > that on a target specific basis. The new parameter is called > "SyncWrite" and it defaults to 1: Thank you very much, I'll try it. I think it may be a nice improvement. I'll actually look towards latency improvements too... --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com =20 -------------------------------------------------- |
From: Ming Z. <min...@gm...> - 2006-06-27 22:30:01
|
First of all, thanks a lot for this. Second, sorry that this is still a per-target parameter, not a per-Lun parameter. Something like followed will be better I feel. Of course just my personal opinion. Target iqn.1996-08.com.elliott-turbo:storage Lun 0 Path=/x/tmp/1gfile,Type=fileio,Syncwrite=1 Lun 1 Path=/x/tmp/10gfile,Type=fileio,Syncwrite=0 Ming On Tue, 2006-06-27 at 16:58 -0400, Richard Bollinger wrote: > I finally worked through the parameter setting / passing logic... so > here's the new and improved version of my patch that defaults to the > original "safe" behavior - syncing on every write, but lets you change > that on a target specific basis. The new parameter is called > "SyncWrite" and it defaults to 1: > > root@LS09:/etc# grep -v '^[ ]*#' ietd.conf > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio > Lun 1 Path=/x/tmp/10gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > SyncWrite 0 > > Target iqn.1996-08.com.elliott-turbo:storage.100g > Lun 0 Path=/x/tmp/100gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > > The new parameter setting is also reflected in the /proc entry as in: > root@LS09:/etc# cat /proc/net/iet/volume > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > lun:0 state:0 iotype:fileio syncwrite:1 path:/x/tmp/100gfile > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > lun:0 state:0 iotype:fileio syncwrite:0 path:/x/tmp/1gfile > lun:1 state:0 iotype:fileio syncwrite:0 path:/x/tmp/10gfile > > I also added some debug code to reveal how frequently sync's are being > called in the output of dmesg. > > Rich B > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ Iscsitarget-devel mailing list Isc...@li... https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel |
From: Richard B. <rab...@gm...> - 2006-06-28 01:48:28
|
On 6/27/06, Ming Zhang <min...@gm...> wrote: > First of all, thanks a lot for this. > > Second, sorry that this is still a per-target parameter, not a per-Lun > parameter. > > Something like followed will be better I feel. Of course just my > personal opinion. > > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio,Syncwrite=1 > Lun 1 Path=/x/tmp/10gfile,Type=fileio,Syncwrite=0 > > > Ming If that is the concensus, I'll do it again. |
From: Ming Z. <mi...@el...> - 2006-06-28 02:23:20
|
On Tue, 2006-06-27 at 21:48 -0400, Richard Bollinger wrote: > On 6/27/06, Ming Zhang <min...@gm...> wrote: > > First of all, thanks a lot for this. > > > > Second, sorry that this is still a per-target parameter, not a per-Lun > > parameter. > > > > Something like followed will be better I feel. Of course just my > > personal opinion. > > > > Target iqn.1996-08.com.elliott-turbo:storage > > Lun 0 Path=/x/tmp/1gfile,Type=fileio,Syncwrite=1 > > Lun 1 Path=/x/tmp/10gfile,Type=fileio,Syncwrite=0 > > > > > > Ming > If that is the concensus, I'll do it again. sure, > > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Iscsitarget-devel mailing list > Isc...@li... > https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel |
From: Richard B. <rab...@gm...> - 2006-06-28 04:00:22
Attachments:
last_sync.patch
|
OK... this version is as Ming requested - controlled at the lun level: root@LS09:/etc# grep -v '[ ]*#' ietd.conf Target iqn.1996-08.com.elliott-turbo:storage Lun 0 Path=/x/tmp/1gfile,Type=fileio Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 MaxRecvDataSegmentLength 262144 MaxXmitDataSegmentLength 262144 Target iqn.1996-08.com.elliott-turbo:storage.100g Lun 0 Path=/x/tmp/100gfile,Type=fileio MaxRecvDataSegmentLength 262144 MaxXmitDataSegmentLength 262144 root@LS09:/etc# cat /proc/net/iet/volume tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile tid:1 name:iqn.1996-08.com.elliott-turbo:storage lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile |
From: Emmanuel F. <ef...@in...> - 2006-06-28 09:02:38
|
Le Wed, 28 Jun 2006 00:00:19 -0400 vous =E9criviez: > OK... this version is as Ming requested - controlled at the lun level: This is great!=20 --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com =20 -------------------------------------------------- |
From: Will T. <wt...@pr...> - 2006-06-28 10:55:12
|
Not the most scientific test ever, but this patch appears to do just what you would want. If i connect from a windows machine formatting with NTFS then if i create say a Microsoft word doc, even of several meg it does not sync, however if i create a Microsoft access database on the disk then ever time i make a major change , like adding a new table then i see bits in the log for "iscsi-target: fileio_sync(89) res=0, nsyncs=8, ..." Even if there are cases were it isn't truly safe these would only happen if people have explicitly enabled this option. test rpms with this patch (0.4.13-17) can be found at http://rpms.premierithosting.com/fedora/5/i386/RPMS.testing/ I vote for this patch to be merged, well done Richard Richard Bollinger wrote: > OK... this version is as Ming requested - controlled at the lun level: > root@LS09:/etc# grep -v '[ ]*#' ietd.conf > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio > Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > Target iqn.1996-08.com.elliott-turbo:storage.100g > Lun 0 Path=/x/tmp/100gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > root@LS09:/etc# cat /proc/net/iet/volume > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile > lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile > >------------------------------------------------------------------------ > >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c ./kernel/file-io.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/file-io.c Tue Jun 27 23:11:47 2006 >@@ -7,12 +7,14 @@ > #include <linux/blkdev.h> > #include <linux/writeback.h> > #include <linux/parser.h> >+#include <linux/buffer_head.h> > > #include "iscsi.h" > #include "iscsi_dbg.h" > #include "iotype.h" > > struct fileio_data { >+ u32 syncwrite; > char *path; > struct file *filp; > }; >@@ -75,12 +77,57 @@ > struct inode *inode; > loff_t ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; > ssize_t res; >+ static unsigned int nsyncs = 0, msyncs = 0; > > assert(p); >+ if ( ! p->syncwrite ) return 0; > inode = p->filp->f_dentry->d_inode; > > res = sync_page_range(inode, inode->i_mapping, ppos, (size_t) tio->size); > >+ if (++nsyncs > msyncs || res) { >+ eprintk("res=%d, nsyncs=%u, path=\"%s\"\n", res, nsyncs, p->path); >+ if (nsyncs > msyncs) { >+ msyncs <<= 1; >+ msyncs |= 1; >+ } >+ } >+ return 0; >+} >+ >+static int fileio_sync_cache(struct iet_volume *lu) >+{ >+ struct fileio_data *p = (struct fileio_data *) lu->private; >+ struct file * file; >+ struct address_space *mapping; >+ int ret, err; >+ static unsigned int nsyncs = 0, msyncs = 0; >+ >+ assert(p); >+ file = p->filp; >+ assert(file); >+ /* core logic copied from Linux kernel fs/buffer.c do_fsync() */ >+ mapping = file->f_mapping; >+ current->flags |= PF_SYNCWRITE; >+ ret = filemap_fdatawrite(mapping); >+ if (file->f_op && file->f_op->fsync) { >+ mutex_lock(&mapping->host->i_mutex); >+ err = file->f_op->fsync(file, file->f_dentry, 1); >+ if (!ret) >+ ret = err; >+ mutex_unlock(&mapping->host->i_mutex); >+ } >+ err = filemap_fdatawait(mapping); >+ if (!ret) >+ ret = err; >+ current->flags &= ~PF_SYNCWRITE; >+ if (++nsyncs > msyncs || ret) { >+ eprintk("ret=%d, nsyncs=%u, path=\"%s\"\n", ret, nsyncs, p->path); >+ if (nsyncs > msyncs) { >+ msyncs <<= 1; >+ msyncs |= 1; >+ } >+ } > return 0; > } > >@@ -112,6 +159,13 @@ > return err; > } > >+static void set_syncwrite(struct iet_volume *volume, u32 syncwrite) >+{ >+ struct fileio_data *info = (struct fileio_data *) volume->private; >+ >+ info->syncwrite = syncwrite; >+} >+ > static int set_scsiid(struct iet_volume *volume, const char *id) > { > size_t len; >@@ -146,13 +200,14 @@ > } > > enum { >- Opt_scsiid, Opt_path, Opt_ignore, Opt_err, >+ Opt_scsiid, Opt_path, Opt_ignore, Opt_syncwrite, Opt_err, > }; > > static match_table_t tokens = { > {Opt_scsiid, "ScsiId=%s"}, > {Opt_path, "Path=%s"}, > {Opt_ignore, "Type=%s"}, >+ {Opt_syncwrite, "SyncWrite=%d"}, > {Opt_err, NULL}, > }; > >@@ -190,6 +245,14 @@ > break; > case Opt_ignore: > break; >+ case Opt_syncwrite: >+ if (!(q = match_strdup(&args[0]))) { >+ err = -ENOMEM; >+ goto out; >+ } >+ set_syncwrite(volume, simple_strtoul(q,NULL,10)); >+ kfree(q); >+ break; > default: > eprintk("Unknown %s\n", p); > return -EINVAL; >@@ -225,6 +288,7 @@ > if (!(p = kmalloc(sizeof(*p), GFP_KERNEL))) > return -ENOMEM; > memset(p, 0, sizeof(*p)); >+ p->syncwrite = 1; > lu->private = p; > > if ((err = parse_fileio_params(lu, args)) < 0) { >@@ -256,7 +320,7 @@ > void fileio_show(struct iet_volume *lu, struct seq_file *seq) > { > struct fileio_data *p = (struct fileio_data *) lu->private; >- seq_printf(seq, " path:%s\n", p->path); >+ seq_printf(seq, " syncwrite:%d, path:%s\n", p->syncwrite, p->path); > } > > struct iotype fileio = >@@ -265,6 +329,7 @@ > .attach = fileio_attach, > .make_request = fileio_make_request, > .sync = fileio_sync, >+ .sync_cache = fileio_sync_cache, > .detach = fileio_detach, > .show = fileio_show, > }; >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h ./kernel/iotype.h >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h Fri Jan 13 10:20:50 2006 >+++ ./kernel/iotype.h Sun Apr 16 21:41:40 2006 >@@ -15,6 +15,7 @@ > int (*attach)(struct iet_volume *dev, char *args); > int (*make_request)(struct iet_volume *dev, struct tio *tio, int rw); > int (*sync)(struct iet_volume *dev, struct tio *tio); >+ int (*sync_cache)(struct iet_volume *dev); > void (*detach)(struct iet_volume *dev); > void (*show)(struct iet_volume *dev, struct seq_file *seq); > }; >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h ./kernel/iscsi.h >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h Fri Jan 13 10:20:50 2006 >+++ ./kernel/iscsi.h Sun Apr 16 22:17:01 2006 >@@ -328,6 +328,7 @@ > extern int tio_read(struct iet_volume *, struct tio *); > extern int tio_write(struct iet_volume *, struct tio *); > extern int tio_sync(struct iet_volume *, struct tio *); >+extern int tio_sync_cache(struct iet_volume *); > > /* iotype.c */ > extern struct iotype *get_iotype(const char *name); >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c ./kernel/target_disk.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/target_disk.c Tue Jun 27 22:45:01 2006 >@@ -345,6 +345,16 @@ > list_del_init(&cmnd->list); > tio_write(cmnd->lun, tio); > tio_sync(cmnd->lun, tio); >+ return 0; >+} >+ >+static int build_sync_cache_response(struct iscsi_cmnd *cmnd) >+{ >+ >+ assert(cmnd); >+ assert(cmnd->lun); >+ >+ tio_sync_cache(cmnd->lun); > > return 0; > } >@@ -390,9 +400,11 @@ > case WRITE_VERIFY: > send_scsi_rsp(cmnd, build_write_response); > break; >+ case SYNCHRONIZE_CACHE: >+ send_scsi_rsp(cmnd, build_sync_cache_response); >+ break; > case START_STOP: > case TEST_UNIT_READY: >- case SYNCHRONIZE_CACHE: > case VERIFY: > case VERIFY_16: > case RESERVE: >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c ./kernel/tio.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/tio.c Sun Apr 16 21:41:02 2006 >@@ -109,6 +109,13 @@ > return iot->sync ? iot->sync(lu, tio) : 0; > } > >+int tio_sync_cache(struct iet_volume *lu) >+{ >+ struct iotype *iot = lu->iotype; >+ assert(iot); >+ return iot->sync_cache ? iot->sync_cache(lu) : 0; >+} >+ > int tio_init(void) > { > tio_cache = kmem_cache_create("tio", >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c ./usr/ietd.c >--- /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c Fri Jan 13 10:20:52 2006 >+++ ./usr/ietd.c Sat Apr 15 23:47:20 2006 >@@ -137,10 +137,15 @@ > log_warning("unable to set SO_REUSEADDR on server socket (%s)!", > strerror(errno)); > opt = 1; >+ if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt))) >+ log_warning("unable to set SO_KEEPALIVE on server socket (%s)!", >+ strerror(errno)); >+#ifdef IPV6_V6ONLY >+ opt = 1; > if (res->ai_family == AF_INET6 && > setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) > continue; >- >+#endif > if (bind(sock, res->ai_addr, res->ai_addrlen)) { > log_error("unable to bind server socket (%s)!", strerror(errno)); > continue; > > >------------------------------------------------------------------------ > >Using Tomcat but need to do more? Need to support web services, security? >Get stuff done quickly with pre-integrated technology to make your job easier >Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > >------------------------------------------------------------------------ > >_______________________________________________ >Iscsitarget-devel mailing list >Isc...@li... >https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel > > |
From: Will T. <wt...@pr...> - 2006-06-28 09:39:25
|
One final request, any chance of a patch where the sync code that works with the 2.6.9 kernel ? in your original posts you had one that worked, then one that had the /* core logic copied from Linux kernel fs/buffer.c do_fsync() */ which requires a newer versionh of the kernel otherwise you get the following error /iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.c: In function `fileio_sync_cache': /iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.c:114: warning: implicit declaration of function `mutex_lock' /iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.c:114: error: structure has no member named `i_mutex' /iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.c:118: warning: implicit declaration of function `mutex_unlock' /iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.c:118: error: structure has no member named `i_mutex' make[2]: *** [/iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel/file-io.o] Error 1 make[1]: *** [_module_/iscsi/rpmbuild/rpmbuildhome/rpmbuild/BUILD/iscsitarget-0.4.12/kernel] Error 2 make[1]: Leaving directory `/usr/src/kernels/2.6.9-34.0.1.EL-smp-i686' Richard Bollinger wrote: > OK... this version is as Ming requested - controlled at the lun level: > root@LS09:/etc# grep -v '[ ]*#' ietd.conf > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio > Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > Target iqn.1996-08.com.elliott-turbo:storage.100g > Lun 0 Path=/x/tmp/100gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > root@LS09:/etc# cat /proc/net/iet/volume > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile > lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile > >------------------------------------------------------------------------ > >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c ./kernel/file-io.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/file-io.c Tue Jun 27 23:11:47 2006 >@@ -7,12 +7,14 @@ > #include <linux/blkdev.h> > #include <linux/writeback.h> > #include <linux/parser.h> >+#include <linux/buffer_head.h> > > #include "iscsi.h" > #include "iscsi_dbg.h" > #include "iotype.h" > > struct fileio_data { >+ u32 syncwrite; > char *path; > struct file *filp; > }; >@@ -75,12 +77,57 @@ > struct inode *inode; > loff_t ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; > ssize_t res; >+ static unsigned int nsyncs = 0, msyncs = 0; > > assert(p); >+ if ( ! p->syncwrite ) return 0; > inode = p->filp->f_dentry->d_inode; > > res = sync_page_range(inode, inode->i_mapping, ppos, (size_t) tio->size); > >+ if (++nsyncs > msyncs || res) { >+ eprintk("res=%d, nsyncs=%u, path=\"%s\"\n", res, nsyncs, p->path); >+ if (nsyncs > msyncs) { >+ msyncs <<= 1; >+ msyncs |= 1; >+ } >+ } >+ return 0; >+} >+ >+static int fileio_sync_cache(struct iet_volume *lu) >+{ >+ struct fileio_data *p = (struct fileio_data *) lu->private; >+ struct file * file; >+ struct address_space *mapping; >+ int ret, err; >+ static unsigned int nsyncs = 0, msyncs = 0; >+ >+ assert(p); >+ file = p->filp; >+ assert(file); >+ /* core logic copied from Linux kernel fs/buffer.c do_fsync() */ >+ mapping = file->f_mapping; >+ current->flags |= PF_SYNCWRITE; >+ ret = filemap_fdatawrite(mapping); >+ if (file->f_op && file->f_op->fsync) { >+ mutex_lock(&mapping->host->i_mutex); >+ err = file->f_op->fsync(file, file->f_dentry, 1); >+ if (!ret) >+ ret = err; >+ mutex_unlock(&mapping->host->i_mutex); >+ } >+ err = filemap_fdatawait(mapping); >+ if (!ret) >+ ret = err; >+ current->flags &= ~PF_SYNCWRITE; >+ if (++nsyncs > msyncs || ret) { >+ eprintk("ret=%d, nsyncs=%u, path=\"%s\"\n", ret, nsyncs, p->path); >+ if (nsyncs > msyncs) { >+ msyncs <<= 1; >+ msyncs |= 1; >+ } >+ } > return 0; > } > >@@ -112,6 +159,13 @@ > return err; > } > >+static void set_syncwrite(struct iet_volume *volume, u32 syncwrite) >+{ >+ struct fileio_data *info = (struct fileio_data *) volume->private; >+ >+ info->syncwrite = syncwrite; >+} >+ > static int set_scsiid(struct iet_volume *volume, const char *id) > { > size_t len; >@@ -146,13 +200,14 @@ > } > > enum { >- Opt_scsiid, Opt_path, Opt_ignore, Opt_err, >+ Opt_scsiid, Opt_path, Opt_ignore, Opt_syncwrite, Opt_err, > }; > > static match_table_t tokens = { > {Opt_scsiid, "ScsiId=%s"}, > {Opt_path, "Path=%s"}, > {Opt_ignore, "Type=%s"}, >+ {Opt_syncwrite, "SyncWrite=%d"}, > {Opt_err, NULL}, > }; > >@@ -190,6 +245,14 @@ > break; > case Opt_ignore: > break; >+ case Opt_syncwrite: >+ if (!(q = match_strdup(&args[0]))) { >+ err = -ENOMEM; >+ goto out; >+ } >+ set_syncwrite(volume, simple_strtoul(q,NULL,10)); >+ kfree(q); >+ break; > default: > eprintk("Unknown %s\n", p); > return -EINVAL; >@@ -225,6 +288,7 @@ > if (!(p = kmalloc(sizeof(*p), GFP_KERNEL))) > return -ENOMEM; > memset(p, 0, sizeof(*p)); >+ p->syncwrite = 1; > lu->private = p; > > if ((err = parse_fileio_params(lu, args)) < 0) { >@@ -256,7 +320,7 @@ > void fileio_show(struct iet_volume *lu, struct seq_file *seq) > { > struct fileio_data *p = (struct fileio_data *) lu->private; >- seq_printf(seq, " path:%s\n", p->path); >+ seq_printf(seq, " syncwrite:%d, path:%s\n", p->syncwrite, p->path); > } > > struct iotype fileio = >@@ -265,6 +329,7 @@ > .attach = fileio_attach, > .make_request = fileio_make_request, > .sync = fileio_sync, >+ .sync_cache = fileio_sync_cache, > .detach = fileio_detach, > .show = fileio_show, > }; >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h ./kernel/iotype.h >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h Fri Jan 13 10:20:50 2006 >+++ ./kernel/iotype.h Sun Apr 16 21:41:40 2006 >@@ -15,6 +15,7 @@ > int (*attach)(struct iet_volume *dev, char *args); > int (*make_request)(struct iet_volume *dev, struct tio *tio, int rw); > int (*sync)(struct iet_volume *dev, struct tio *tio); >+ int (*sync_cache)(struct iet_volume *dev); > void (*detach)(struct iet_volume *dev); > void (*show)(struct iet_volume *dev, struct seq_file *seq); > }; >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h ./kernel/iscsi.h >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h Fri Jan 13 10:20:50 2006 >+++ ./kernel/iscsi.h Sun Apr 16 22:17:01 2006 >@@ -328,6 +328,7 @@ > extern int tio_read(struct iet_volume *, struct tio *); > extern int tio_write(struct iet_volume *, struct tio *); > extern int tio_sync(struct iet_volume *, struct tio *); >+extern int tio_sync_cache(struct iet_volume *); > > /* iotype.c */ > extern struct iotype *get_iotype(const char *name); >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c ./kernel/target_disk.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/target_disk.c Tue Jun 27 22:45:01 2006 >@@ -345,6 +345,16 @@ > list_del_init(&cmnd->list); > tio_write(cmnd->lun, tio); > tio_sync(cmnd->lun, tio); >+ return 0; >+} >+ >+static int build_sync_cache_response(struct iscsi_cmnd *cmnd) >+{ >+ >+ assert(cmnd); >+ assert(cmnd->lun); >+ >+ tio_sync_cache(cmnd->lun); > > return 0; > } >@@ -390,9 +400,11 @@ > case WRITE_VERIFY: > send_scsi_rsp(cmnd, build_write_response); > break; >+ case SYNCHRONIZE_CACHE: >+ send_scsi_rsp(cmnd, build_sync_cache_response); >+ break; > case START_STOP: > case TEST_UNIT_READY: >- case SYNCHRONIZE_CACHE: > case VERIFY: > case VERIFY_16: > case RESERVE: >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c ./kernel/tio.c >--- /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c Fri Jan 13 10:20:50 2006 >+++ ./kernel/tio.c Sun Apr 16 21:41:02 2006 >@@ -109,6 +109,13 @@ > return iot->sync ? iot->sync(lu, tio) : 0; > } > >+int tio_sync_cache(struct iet_volume *lu) >+{ >+ struct iotype *iot = lu->iotype; >+ assert(iot); >+ return iot->sync_cache ? iot->sync_cache(lu) : 0; >+} >+ > int tio_init(void) > { > tio_cache = kmem_cache_create("tio", >diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c ./usr/ietd.c >--- /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c Fri Jan 13 10:20:52 2006 >+++ ./usr/ietd.c Sat Apr 15 23:47:20 2006 >@@ -137,10 +137,15 @@ > log_warning("unable to set SO_REUSEADDR on server socket (%s)!", > strerror(errno)); > opt = 1; >+ if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt))) >+ log_warning("unable to set SO_KEEPALIVE on server socket (%s)!", >+ strerror(errno)); >+#ifdef IPV6_V6ONLY >+ opt = 1; > if (res->ai_family == AF_INET6 && > setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) > continue; >- >+#endif > if (bind(sock, res->ai_addr, res->ai_addrlen)) { > log_error("unable to bind server socket (%s)!", strerror(errno)); > continue; > > >------------------------------------------------------------------------ > >Using Tomcat but need to do more? Need to support web services, security? >Get stuff done quickly with pre-integrated technology to make your job easier >Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > >------------------------------------------------------------------------ > >_______________________________________________ >Iscsitarget-devel mailing list >Isc...@li... >https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel > > |
From: Emmanuel F. <ef...@in...> - 2006-06-28 11:12:23
|
Le Wed, 28 Jun 2006 09:48:53 +0100 vous =E9criviez: > One final request, any chance of a patch where the sync code that > works with the 2.6.9 kernel ?=20 Why would anyone want to use such an ancient (and extremely buggy) release ? --=20 -------------------------------------------------- Emmanuel Florac www.intellique.com =20 -------------------------------------------------- |
From: Alok K. D. <ad...@sy...> - 2006-06-28 14:05:58
|
is this patch against the latest svn version? also, has it been merged? thanks! Richard Bollinger wrote: > OK... this version is as Ming requested - controlled at the lun level: > root@LS09:/etc# grep -v '[ ]*#' ietd.conf > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio > Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > Target iqn.1996-08.com.elliott-turbo:storage.100g > Lun 0 Path=/x/tmp/100gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > root@LS09:/etc# cat /proc/net/iet/volume > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile > lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile > ------------------------------------------------------------------------ > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c ./kernel/file-io.c > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c Fri Jan 13 10:20:50 2006 > +++ ./kernel/file-io.c Tue Jun 27 23:11:47 2006 > @@ -7,12 +7,14 @@ > #include <linux/blkdev.h> > #include <linux/writeback.h> > #include <linux/parser.h> > +#include <linux/buffer_head.h> > > #include "iscsi.h" > #include "iscsi_dbg.h" > #include "iotype.h" > > struct fileio_data { > + u32 syncwrite; > char *path; > struct file *filp; > }; > @@ -75,12 +77,57 @@ > struct inode *inode; > loff_t ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; > ssize_t res; > + static unsigned int nsyncs = 0, msyncs = 0; > > assert(p); > + if ( ! p->syncwrite ) return 0; > inode = p->filp->f_dentry->d_inode; > > res = sync_page_range(inode, inode->i_mapping, ppos, (size_t) tio->size); > > + if (++nsyncs > msyncs || res) { > + eprintk("res=%d, nsyncs=%u, path=\"%s\"\n", res, nsyncs, p->path); > + if (nsyncs > msyncs) { > + msyncs <<= 1; > + msyncs |= 1; > + } > + } > + return 0; > +} > + > +static int fileio_sync_cache(struct iet_volume *lu) > +{ > + struct fileio_data *p = (struct fileio_data *) lu->private; > + struct file * file; > + struct address_space *mapping; > + int ret, err; > + static unsigned int nsyncs = 0, msyncs = 0; > + > + assert(p); > + file = p->filp; > + assert(file); > + /* core logic copied from Linux kernel fs/buffer.c do_fsync() */ > + mapping = file->f_mapping; > + current->flags |= PF_SYNCWRITE; > + ret = filemap_fdatawrite(mapping); > + if (file->f_op && file->f_op->fsync) { > + mutex_lock(&mapping->host->i_mutex); > + err = file->f_op->fsync(file, file->f_dentry, 1); > + if (!ret) > + ret = err; > + mutex_unlock(&mapping->host->i_mutex); > + } > + err = filemap_fdatawait(mapping); > + if (!ret) > + ret = err; > + current->flags &= ~PF_SYNCWRITE; > + if (++nsyncs > msyncs || ret) { > + eprintk("ret=%d, nsyncs=%u, path=\"%s\"\n", ret, nsyncs, p->path); > + if (nsyncs > msyncs) { > + msyncs <<= 1; > + msyncs |= 1; > + } > + } > return 0; > } > > @@ -112,6 +159,13 @@ > return err; > } > > +static void set_syncwrite(struct iet_volume *volume, u32 syncwrite) > +{ > + struct fileio_data *info = (struct fileio_data *) volume->private; > + > + info->syncwrite = syncwrite; > +} > + > static int set_scsiid(struct iet_volume *volume, const char *id) > { > size_t len; > @@ -146,13 +200,14 @@ > } > > enum { > - Opt_scsiid, Opt_path, Opt_ignore, Opt_err, > + Opt_scsiid, Opt_path, Opt_ignore, Opt_syncwrite, Opt_err, > }; > > static match_table_t tokens = { > {Opt_scsiid, "ScsiId=%s"}, > {Opt_path, "Path=%s"}, > {Opt_ignore, "Type=%s"}, > + {Opt_syncwrite, "SyncWrite=%d"}, > {Opt_err, NULL}, > }; > > @@ -190,6 +245,14 @@ > break; > case Opt_ignore: > break; > + case Opt_syncwrite: > + if (!(q = match_strdup(&args[0]))) { > + err = -ENOMEM; > + goto out; > + } > + set_syncwrite(volume, simple_strtoul(q,NULL,10)); > + kfree(q); > + break; > default: > eprintk("Unknown %s\n", p); > return -EINVAL; > @@ -225,6 +288,7 @@ > if (!(p = kmalloc(sizeof(*p), GFP_KERNEL))) > return -ENOMEM; > memset(p, 0, sizeof(*p)); > + p->syncwrite = 1; > lu->private = p; > > if ((err = parse_fileio_params(lu, args)) < 0) { > @@ -256,7 +320,7 @@ > void fileio_show(struct iet_volume *lu, struct seq_file *seq) > { > struct fileio_data *p = (struct fileio_data *) lu->private; > - seq_printf(seq, " path:%s\n", p->path); > + seq_printf(seq, " syncwrite:%d, path:%s\n", p->syncwrite, p->path); > } > > struct iotype fileio = > @@ -265,6 +329,7 @@ > .attach = fileio_attach, > .make_request = fileio_make_request, > .sync = fileio_sync, > + .sync_cache = fileio_sync_cache, > .detach = fileio_detach, > .show = fileio_show, > }; > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h ./kernel/iotype.h > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h Fri Jan 13 10:20:50 2006 > +++ ./kernel/iotype.h Sun Apr 16 21:41:40 2006 > @@ -15,6 +15,7 @@ > int (*attach)(struct iet_volume *dev, char *args); > int (*make_request)(struct iet_volume *dev, struct tio *tio, int rw); > int (*sync)(struct iet_volume *dev, struct tio *tio); > + int (*sync_cache)(struct iet_volume *dev); > void (*detach)(struct iet_volume *dev); > void (*show)(struct iet_volume *dev, struct seq_file *seq); > }; > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h ./kernel/iscsi.h > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h Fri Jan 13 10:20:50 2006 > +++ ./kernel/iscsi.h Sun Apr 16 22:17:01 2006 > @@ -328,6 +328,7 @@ > extern int tio_read(struct iet_volume *, struct tio *); > extern int tio_write(struct iet_volume *, struct tio *); > extern int tio_sync(struct iet_volume *, struct tio *); > +extern int tio_sync_cache(struct iet_volume *); > > /* iotype.c */ > extern struct iotype *get_iotype(const char *name); > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c ./kernel/target_disk.c > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c Fri Jan 13 10:20:50 2006 > +++ ./kernel/target_disk.c Tue Jun 27 22:45:01 2006 > @@ -345,6 +345,16 @@ > list_del_init(&cmnd->list); > tio_write(cmnd->lun, tio); > tio_sync(cmnd->lun, tio); > + return 0; > +} > + > +static int build_sync_cache_response(struct iscsi_cmnd *cmnd) > +{ > + > + assert(cmnd); > + assert(cmnd->lun); > + > + tio_sync_cache(cmnd->lun); > > return 0; > } > @@ -390,9 +400,11 @@ > case WRITE_VERIFY: > send_scsi_rsp(cmnd, build_write_response); > break; > + case SYNCHRONIZE_CACHE: > + send_scsi_rsp(cmnd, build_sync_cache_response); > + break; > case START_STOP: > case TEST_UNIT_READY: > - case SYNCHRONIZE_CACHE: > case VERIFY: > case VERIFY_16: > case RESERVE: > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c ./kernel/tio.c > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c Fri Jan 13 10:20:50 2006 > +++ ./kernel/tio.c Sun Apr 16 21:41:02 2006 > @@ -109,6 +109,13 @@ > return iot->sync ? iot->sync(lu, tio) : 0; > } > > +int tio_sync_cache(struct iet_volume *lu) > +{ > + struct iotype *iot = lu->iotype; > + assert(iot); > + return iot->sync_cache ? iot->sync_cache(lu) : 0; > +} > + > int tio_init(void) > { > tio_cache = kmem_cache_create("tio", > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c ./usr/ietd.c > --- /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c Fri Jan 13 10:20:52 2006 > +++ ./usr/ietd.c Sat Apr 15 23:47:20 2006 > @@ -137,10 +137,15 @@ > log_warning("unable to set SO_REUSEADDR on server socket (%s)!", > strerror(errno)); > opt = 1; > + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt))) > + log_warning("unable to set SO_KEEPALIVE on server socket (%s)!", > + strerror(errno)); > +#ifdef IPV6_V6ONLY > + opt = 1; > if (res->ai_family == AF_INET6 && > setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) > continue; > - > +#endif > if (bind(sock, res->ai_addr, res->ai_addrlen)) { > log_error("unable to bind server socket (%s)!", strerror(errno)); > continue; > > ------------------------------------------------------------------------ > > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > ------------------------------------------------------------------------ > > _______________________________________________ > Iscsitarget-devel mailing list > Isc...@li... > https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel > -- Alok K. Dhir <ad...@sy...> Symplicity Corporation http://solutions.symplicity.com 703 351 6987 (w) | 703 351-6357 (f) |
From: Ming Z. <min...@gm...> - 2006-06-28 14:11:56
|
On Wed, 2006-06-28 at 10:05 -0400, Alok K. Dhir wrote: > is this patch against the latest svn version? guess so. > > also, has it been merged? not yet. under review and test process. > > thanks! > > Richard Bollinger wrote: > > OK... this version is as Ming requested - controlled at the lun level: > > root@LS09:/etc# grep -v '[ ]*#' ietd.conf > > Target iqn.1996-08.com.elliott-turbo:storage > > Lun 0 Path=/x/tmp/1gfile,Type=fileio > > Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 > > MaxRecvDataSegmentLength 262144 > > MaxXmitDataSegmentLength 262144 > > Target iqn.1996-08.com.elliott-turbo:storage.100g > > Lun 0 Path=/x/tmp/100gfile,Type=fileio > > MaxRecvDataSegmentLength 262144 > > MaxXmitDataSegmentLength 262144 > > root@LS09:/etc# cat /proc/net/iet/volume > > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile > > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile > > lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile > > ------------------------------------------------------------------------ > > > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c ./kernel/file-io.c > > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/file-io.c Fri Jan 13 10:20:50 2006 > > +++ ./kernel/file-io.c Tue Jun 27 23:11:47 2006 > > @@ -7,12 +7,14 @@ > > #include <linux/blkdev.h> > > #include <linux/writeback.h> > > #include <linux/parser.h> > > +#include <linux/buffer_head.h> > > > > #include "iscsi.h" > > #include "iscsi_dbg.h" > > #include "iotype.h" > > > > struct fileio_data { > > + u32 syncwrite; > > char *path; > > struct file *filp; > > }; > > @@ -75,12 +77,57 @@ > > struct inode *inode; > > loff_t ppos = (loff_t) tio->idx << PAGE_CACHE_SHIFT; > > ssize_t res; > > + static unsigned int nsyncs = 0, msyncs = 0; > > > > assert(p); > > + if ( ! p->syncwrite ) return 0; > > inode = p->filp->f_dentry->d_inode; > > > > res = sync_page_range(inode, inode->i_mapping, ppos, (size_t) tio->size); > > > > + if (++nsyncs > msyncs || res) { > > + eprintk("res=%d, nsyncs=%u, path=\"%s\"\n", res, nsyncs, p->path); > > + if (nsyncs > msyncs) { > > + msyncs <<= 1; > > + msyncs |= 1; > > + } > > + } > > + return 0; > > +} > > + > > +static int fileio_sync_cache(struct iet_volume *lu) > > +{ > > + struct fileio_data *p = (struct fileio_data *) lu->private; > > + struct file * file; > > + struct address_space *mapping; > > + int ret, err; > > + static unsigned int nsyncs = 0, msyncs = 0; > > + > > + assert(p); > > + file = p->filp; > > + assert(file); > > + /* core logic copied from Linux kernel fs/buffer.c do_fsync() */ > > + mapping = file->f_mapping; > > + current->flags |= PF_SYNCWRITE; > > + ret = filemap_fdatawrite(mapping); > > + if (file->f_op && file->f_op->fsync) { > > + mutex_lock(&mapping->host->i_mutex); > > + err = file->f_op->fsync(file, file->f_dentry, 1); > > + if (!ret) > > + ret = err; > > + mutex_unlock(&mapping->host->i_mutex); > > + } > > + err = filemap_fdatawait(mapping); > > + if (!ret) > > + ret = err; > > + current->flags &= ~PF_SYNCWRITE; > > + if (++nsyncs > msyncs || ret) { > > + eprintk("ret=%d, nsyncs=%u, path=\"%s\"\n", ret, nsyncs, p->path); > > + if (nsyncs > msyncs) { > > + msyncs <<= 1; > > + msyncs |= 1; > > + } > > + } > > return 0; > > } > > > > @@ -112,6 +159,13 @@ > > return err; > > } > > > > +static void set_syncwrite(struct iet_volume *volume, u32 syncwrite) > > +{ > > + struct fileio_data *info = (struct fileio_data *) volume->private; > > + > > + info->syncwrite = syncwrite; > > +} > > + > > static int set_scsiid(struct iet_volume *volume, const char *id) > > { > > size_t len; > > @@ -146,13 +200,14 @@ > > } > > > > enum { > > - Opt_scsiid, Opt_path, Opt_ignore, Opt_err, > > + Opt_scsiid, Opt_path, Opt_ignore, Opt_syncwrite, Opt_err, > > }; > > > > static match_table_t tokens = { > > {Opt_scsiid, "ScsiId=%s"}, > > {Opt_path, "Path=%s"}, > > {Opt_ignore, "Type=%s"}, > > + {Opt_syncwrite, "SyncWrite=%d"}, > > {Opt_err, NULL}, > > }; > > > > @@ -190,6 +245,14 @@ > > break; > > case Opt_ignore: > > break; > > + case Opt_syncwrite: > > + if (!(q = match_strdup(&args[0]))) { > > + err = -ENOMEM; > > + goto out; > > + } > > + set_syncwrite(volume, simple_strtoul(q,NULL,10)); > > + kfree(q); > > + break; > > default: > > eprintk("Unknown %s\n", p); > > return -EINVAL; > > @@ -225,6 +288,7 @@ > > if (!(p = kmalloc(sizeof(*p), GFP_KERNEL))) > > return -ENOMEM; > > memset(p, 0, sizeof(*p)); > > + p->syncwrite = 1; > > lu->private = p; > > > > if ((err = parse_fileio_params(lu, args)) < 0) { > > @@ -256,7 +320,7 @@ > > void fileio_show(struct iet_volume *lu, struct seq_file *seq) > > { > > struct fileio_data *p = (struct fileio_data *) lu->private; > > - seq_printf(seq, " path:%s\n", p->path); > > + seq_printf(seq, " syncwrite:%d, path:%s\n", p->syncwrite, p->path); > > } > > > > struct iotype fileio = > > @@ -265,6 +329,7 @@ > > .attach = fileio_attach, > > .make_request = fileio_make_request, > > .sync = fileio_sync, > > + .sync_cache = fileio_sync_cache, > > .detach = fileio_detach, > > .show = fileio_show, > > }; > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h ./kernel/iotype.h > > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/iotype.h Fri Jan 13 10:20:50 2006 > > +++ ./kernel/iotype.h Sun Apr 16 21:41:40 2006 > > @@ -15,6 +15,7 @@ > > int (*attach)(struct iet_volume *dev, char *args); > > int (*make_request)(struct iet_volume *dev, struct tio *tio, int rw); > > int (*sync)(struct iet_volume *dev, struct tio *tio); > > + int (*sync_cache)(struct iet_volume *dev); > > void (*detach)(struct iet_volume *dev); > > void (*show)(struct iet_volume *dev, struct seq_file *seq); > > }; > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h ./kernel/iscsi.h > > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/iscsi.h Fri Jan 13 10:20:50 2006 > > +++ ./kernel/iscsi.h Sun Apr 16 22:17:01 2006 > > @@ -328,6 +328,7 @@ > > extern int tio_read(struct iet_volume *, struct tio *); > > extern int tio_write(struct iet_volume *, struct tio *); > > extern int tio_sync(struct iet_volume *, struct tio *); > > +extern int tio_sync_cache(struct iet_volume *); > > > > /* iotype.c */ > > extern struct iotype *get_iotype(const char *name); > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c ./kernel/target_disk.c > > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/target_disk.c Fri Jan 13 10:20:50 2006 > > +++ ./kernel/target_disk.c Tue Jun 27 22:45:01 2006 > > @@ -345,6 +345,16 @@ > > list_del_init(&cmnd->list); > > tio_write(cmnd->lun, tio); > > tio_sync(cmnd->lun, tio); > > + return 0; > > +} > > + > > +static int build_sync_cache_response(struct iscsi_cmnd *cmnd) > > +{ > > + > > + assert(cmnd); > > + assert(cmnd->lun); > > + > > + tio_sync_cache(cmnd->lun); > > > > return 0; > > } > > @@ -390,9 +400,11 @@ > > case WRITE_VERIFY: > > send_scsi_rsp(cmnd, build_write_response); > > break; > > + case SYNCHRONIZE_CACHE: > > + send_scsi_rsp(cmnd, build_sync_cache_response); > > + break; > > case START_STOP: > > case TEST_UNIT_READY: > > - case SYNCHRONIZE_CACHE: > > case VERIFY: > > case VERIFY_16: > > case RESERVE: > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c ./kernel/tio.c > > --- /home/lxsrc/iscsitarget-0.4.13/./kernel/tio.c Fri Jan 13 10:20:50 2006 > > +++ ./kernel/tio.c Sun Apr 16 21:41:02 2006 > > @@ -109,6 +109,13 @@ > > return iot->sync ? iot->sync(lu, tio) : 0; > > } > > > > +int tio_sync_cache(struct iet_volume *lu) > > +{ > > + struct iotype *iot = lu->iotype; > > + assert(iot); > > + return iot->sync_cache ? iot->sync_cache(lu) : 0; > > +} > > + > > int tio_init(void) > > { > > tio_cache = kmem_cache_create("tio", > > diff -ur --exclude *.mod.c --exclude ietd --exclude ietadm --exclude .tmp_versions --exclude *.cmd --exclude *.0 --exclude *o --exclude *~ --exclude *.FCS /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c ./usr/ietd.c > > --- /home/lxsrc/iscsitarget-0.4.13/./usr/ietd.c Fri Jan 13 10:20:52 2006 > > +++ ./usr/ietd.c Sat Apr 15 23:47:20 2006 > > @@ -137,10 +137,15 @@ > > log_warning("unable to set SO_REUSEADDR on server socket (%s)!", > > strerror(errno)); > > opt = 1; > > + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt))) > > + log_warning("unable to set SO_KEEPALIVE on server socket (%s)!", > > + strerror(errno)); > > +#ifdef IPV6_V6ONLY > > + opt = 1; > > if (res->ai_family == AF_INET6 && > > setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) > > continue; > > - > > +#endif > > if (bind(sock, res->ai_addr, res->ai_addrlen)) { > > log_error("unable to bind server socket (%s)!", strerror(errno)); > > continue; > > > > ------------------------------------------------------------------------ > > > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job easier > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Iscsitarget-devel mailing list > > Isc...@li... > > https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel > > > > |
From: Ming Z. <min...@gm...> - 2006-06-28 14:22:19
|
just have a quick read * pls also use -p when do diff. * syncwrite should be defined in fileio_data or iet_volume? * code style. if ( ! p->syncwrite ) return 0; should be if (!p->syncwrite) return 0; also blank space and tab are mixed. run Lindent on this might be a good idea. * diff in ietd.c is irrelevant. * i am not sure if fileio_sync_cache() should be done by copying kernel code. i have no better idea though. ming On Wed, 2006-06-28 at 00:00 -0400, Richard Bollinger wrote: > OK... this version is as Ming requested - controlled at the lun level: > root@LS09:/etc# grep -v '[ ]*#' ietd.conf > Target iqn.1996-08.com.elliott-turbo:storage > Lun 0 Path=/x/tmp/1gfile,Type=fileio > Lun 1 Path=/x/tmp/10gfile,Type=fileio,SyncWrite=0 > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > Target iqn.1996-08.com.elliott-turbo:storage.100g > Lun 0 Path=/x/tmp/100gfile,Type=fileio > MaxRecvDataSegmentLength 262144 > MaxXmitDataSegmentLength 262144 > root@LS09:/etc# cat /proc/net/iet/volume > tid:2 name:iqn.1996-08.com.elliott-turbo:storage.100g > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/100gfile > tid:1 name:iqn.1996-08.com.elliott-turbo:storage > lun:0 state:0 iotype:fileio syncwrite:1, path:/x/tmp/1gfile > lun:1 state:0 iotype:fileio syncwrite:0, path:/x/tmp/10gfile > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ Iscsitarget-devel mailing list Isc...@li... https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel |
From: Richard B. <rab...@gm...> - 2006-06-28 19:03:49
|
On 6/28/06, Ming Zhang <min...@gm...> wrote: > * pls also use -p when do diff. Will do next time. > * syncwrite should be defined in fileio_data or iet_volume? Keeping it in fileio_data localized the option code to one file: file-io.c. > * code style. I didn't want to change existing code unless functionally required. Feel free to make it prettier. > * diff in ietd.c is irrelevant. Not irrelevant to users who have had problems compiling when IPV6 not defined in their kernel... this fixes that problem. > * i am not sure if fileio_sync_cache() should be done by copying kernel > code. i have no better idea though. We don't have an fd to call do_fsync() or sys_fdatasync() with and file_fsync() does more than we want (updating the inode and superblock, for example). Perhaps someone could ask Kernel maintainers of buffer.c to reconcile semantic differences between file_sync and do_fsync or provide a file_datasync() function we could use. Thanks, Rich B |
From: Ming Z. <min...@gm...> - 2006-06-28 19:11:31
|
On Wed, 2006-06-28 at 15:03 -0400, Richard Bollinger wrote: > On 6/28/06, Ming Zhang <min...@gm...> wrote: > > * pls also use -p when do diff. > Will do next time. > > > * syncwrite should be defined in fileio_data or iet_volume? > Keeping it in fileio_data localized the option code to one file: file-io.c. > > > * code style. > I didn't want to change existing code unless functionally required. > Feel free to make it prettier. but the code u added should follow kernel code style. > > > * diff in ietd.c is irrelevant. > Not irrelevant to users who have had problems compiling when IPV6 not > defined in their kernel... this fixes that problem. then it should be in another patch. > > > * i am not sure if fileio_sync_cache() should be done by copying kernel > > code. i have no better idea though. > We don't have an fd to call do_fsync() or sys_fdatasync() with and > file_fsync() does more than we want (updating the inode and > superblock, for example). ok > > Perhaps someone could ask Kernel maintainers of buffer.c to reconcile > semantic differences between file_sync and do_fsync or provide a > file_datasync() function we could use. :P not easy at all. > > Thanks, Rich B > > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Iscsitarget-devel mailing list > Isc...@li... > https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel |
From: Richard B. <rab...@gm...> - 2006-06-28 21:21:58
Attachments:
ietdfixes.patch
|
On 6/28/06, Ming Zhang <min...@gm...> wrote: ... > > > * diff in ietd.c is irrelevant. > > Not irrelevant to users who have had problems compiling when IPV6 not > > defined in their kernel... this fixes that problem. > > then it should be in another patch. Assuming that you apply the Lindent patch first, the attached patch addresses two side issues with ietd.c: 1) compilation with a kernel that doesn't have IPV6 enabled is fixed 2) it adds SO_KEEPALIVE option to TCP socket, so that dead client sessions go away automatically Rich B |
From: Richard B. <rab...@gm...> - 2006-06-28 20:14:12
|
One more issue... The data returned by insert_caching_pg() in target_disk.c needs to have the WCE bit conditioned to reflect the state of the write through for the particular LUN. The SVN trunk has that bit cleared per a patch posted to the list on March 21st by mi...@el... on March 21st. To remind us all, that patch read as follows: --- kernel/target_disk.c (revision 30) +++ kernel/target_disk.c (working copy) @@ -23,7 +23,7 @@ static int insert_disconnect_pg(u8 *ptr) static int insert_caching_pg(u8 *ptr) { - unsigned char caching_pg[] = {0x08, 0x12, 0x14, 0x00, 0xff, 0xff, 0x00, 0x00, + unsigned char caching_pg[] = {0x08, 0x12, 0x10, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; I assume we'd just add conditional code to set the third byte. Anyone have a reference to the "caching page". It would be nice to document this string of bytes. Thanks, Rich B |
From: Ming Z. <mi...@el...> - 2006-06-28 20:17:13
|
agree. i forgot that. it should be updated base on current status. should have some defines like #define WCE .. ming On Wed, 2006-06-28 at 16:14 -0400, Richard Bollinger wrote: > One more issue... The data returned by insert_caching_pg() in > target_disk.c needs to have the WCE bit conditioned to reflect the > state of the write through for the particular LUN. The SVN trunk has > that bit cleared per a patch posted to the list on March 21st by > mi...@el... on March 21st. To remind us all, that patch read as > follows: > > --- kernel/target_disk.c (revision 30) > +++ kernel/target_disk.c (working copy) > @@ -23,7 +23,7 @@ static int insert_disconnect_pg(u8 *ptr) > > static int insert_caching_pg(u8 *ptr) > { > - unsigned char caching_pg[] = {0x08, 0x12, 0x14, 0x00, 0xff, > 0xff, 0x00, 0x00, > + unsigned char caching_pg[] = {0x08, 0x12, 0x10, 0x00, 0xff, > 0xff, 0x00, 0x00, > 0xff, 0xff, 0xff, 0xff, 0x80, > 0x14, 0x00, 0x00, > 0x00, 0x00, 0x00, 0x00}; > > I assume we'd just add conditional code to set the third byte. > > Anyone have a reference to the "caching page". It would be nice to > document this string of bytes. > > Thanks, Rich B > > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Iscsitarget-devel mailing list > Isc...@li... > https://lists.sourceforge.net/lists/listinfo/iscsitarget-devel |